Découvrez comment accéder à RDS à partir d'une fonction Lambda écrite en Python.
Il existe un didacticiel dans la documentation officielle d'AWS, alors suivez-le. Cependant, dans le tutoriel, l'opération est basée sur CLI, nous la remplacerons donc par l'opération du mannequin le cas échéant.
Regardons de plus près étape par étape.
Créez un RDS à partir du mannequin AWS. Il faudra un certain temps pour créer. Une fois que vous l'avez créé, assurez-vous de pouvoir y accéder localement.
$ mysql -u username -h lambda.xxxxxxxxxxxx.us-east-1.rds.amazonaws.com -p
Lorsque vous créez un RDS, la source est restreinte par défaut en tant que paramètre de groupe de sécurité. Par conséquent, même s'il est accessible à partir de l'environnement local, il existe un problème en raison du fait qu'il ne peut plus être accédé à partir de Lambda par la suite. Par conséquent, modifiez le groupe de sécurité de l'instance RDS appropriée et remplacez la source par n'importe quelle adresse IP (0.0.0.0/0). (Définissez une adresse IP appropriée en fonction de vos besoins.)
Supposons que vous travaillez actuellement sur / path / to / workdir /
.
Veuillez lire / path / to / workdir /
comme il convient.
Créez un script Python similaire à ce qui suit. Le nom du fichier est ʻapp.py`.
import sys
import logging
import rds_config
import pymysql
#rds settings
rds_host = "rds-instance-endpoint"
name = rds_config.db_username
password = rds_config.db_password
db_name = rds_config.db_name
logger = logging.getLogger()
logger.setLevel(logging.INFO)
try:
conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, connect_timeout=5)
except:
logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")
sys.exit()
logger.info("SUCCESS: Connection to RDS mysql instance succeeded")
def handler(event, context):
"""
This function fetches content from mysql RDS instance
"""
item_count = 0
with conn.cursor() as cur:
cur.execute("create table Employee3 ( EmpID int NOT NULL, Name varchar(255) NOT NULL, PRIMARY KEY (EmpID))")
cur.execute('insert into Employee3 (EmpID, Name) values(1, "Joe")')
cur.execute('insert into Employee3 (EmpID, Name) values(2, "Bob")')
cur.execute('insert into Employee3 (EmpID, Name) values(3, "Mary")')
conn.commit()
cur.execute("select * from Employee3")
for row in cur:
item_count += 1
logger.info(row)
#print(row)
return "Added %d items from RDS MySQL table" %(item_count)
Dans ʻapp.py,
rds_config et
pymysql` sont importés, alors préparez-les.
Tout d'abord, enregistrez le contenu suivant sous rds_config.py
.
#config file containing credentials for rds mysql instance
db_username = "username"
db_password = "password"
db_name = "databasename"
Ensuite, utilisez pip pour enregistrer pymysql
dans / chemin / vers / rép_travail /
.
$ pip install pymysql -t /path/to/workdir/
Maintenant que vous avez les fichiers dont vous avez besoin, compressez-les.
La mise en garde ici est qu'au lieu d'archiver tout le répertoire, archivez sous / path / to / workdir /
.
$ zip -r app.zip /path/to/workdir/*
Ici, j'ai créé un fichier zip appelé ʻapp.zip`.
Créez un nouveau rôle sur l'écran AWS IAM. À ce moment-là, sélectionnez «AWS Lambda» comme rôle de service AWS. Ici, nous l'appelons «rôle-lambda».
Créez une fonction Lambda à partir d'un mannequin AWS. Cette fois, j'ai choisi «Fonction vide» et j'ai choisi API Gateway comme déclencheur. Veuillez sélectionner les nécessaires dans cette zone. Les autres éléments de réglage sont les suivants.
Créez une fonction Lambda avec ce paramètre.
Enfin, exécutez-le manuellement. Vous pouvez le faire manuellement en appuyant sur le bouton «Test» sur l'écran Lambda. Si vous obtenez les résultats suivants, vous réussissez.
"Added 3 items from RDS MySQL table"
Recommended Posts