Beschreibt den Zugriff auf RDS über eine in Python geschriebene Lambda-Funktion.
In der offiziellen AWS-Dokumentation finden Sie ein Tutorial. Befolgen Sie es daher. Im Lernprogramm basiert die Operation jedoch auf CLI, sodass wir sie gegebenenfalls durch die Operation des Mannequins ersetzen.
Schauen wir uns das Schritt für Schritt genauer an.
Erstellen Sie ein RDS aus dem AWS-Mannequin. Das Erstellen wird einige Zeit dauern. Stellen Sie nach dem Erstellen sicher, dass Sie lokal darauf zugreifen können.
$ mysql -u username -h lambda.xxxxxxxxxxxx.us-east-1.rds.amazonaws.com -p
Wenn Sie ein RDS erstellen, wird die Quelle standardmäßig als Sicherheitsgruppeneinstellung eingeschränkt. Selbst wenn von der lokalen Umgebung aus darauf zugegriffen werden kann, besteht daher das Problem, dass danach nicht mehr von Lambda aus darauf zugegriffen werden kann. Bearbeiten Sie daher die Sicherheitsgruppe der entsprechenden RDS-Instanz und ändern Sie die Quelle in eine beliebige IP (0.0.0.0/0). (Stellen Sie eine geeignete IP gemäß Ihren Anforderungen ein.)
Angenommen, Sie arbeiten gerade an / path / to / workdir /
.
Bitte lesen Sie gegebenenfalls / path / to / workdir /
.
Erstellen Sie ein Python-Skript ähnlich dem folgenden. Der Dateiname lautet "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)
In app.py
werden rds_config
und pymysql
importiert, bereiten Sie sie also vor.
Speichern Sie zunächst den folgenden Inhalt als "rds_config.py".
#config file containing credentials for rds mysql instance
db_username = "username"
db_password = "password"
db_name = "databasename"
Verwenden Sie dann pip, um pymysql
in / path / to / workdir /
zu speichern.
$ pip install pymysql -t /path/to/workdir/
Nachdem Sie die benötigten Dateien haben, komprimieren Sie sie.
Die Einschränkung hierbei ist, dass anstelle der Archivierung des gesamten Verzeichnisses unter / path / to / workdir /
archiviert wird.
$ zip -r app.zip /path/to/workdir/*
Hier habe ich eine Zip-Datei namens "app.zip" erstellt.
Erstellen Sie eine neue Rolle auf dem AWS IAM-Bildschirm. Wählen Sie zu diesem Zeitpunkt "AWS Lambda" als AWS-Servicerolle aus. Hier nennen wir es "Lambda-Rolle".
Erstellen Sie eine Lambda-Funktion aus einem AWS-Mannequin. Dieses Mal habe ich "Leere Funktion" und API-Gateway als Auslöser gewählt. Bitte wählen Sie die erforderlichen in diesem Bereich aus. Andere Einstellungselemente sind wie folgt.
app.zip
hochErstellen Sie mit dieser Einstellung eine Lambda-Funktion.
Führen Sie es schließlich manuell aus. Sie können dies manuell tun, indem Sie die Taste "Test" auf dem Lambda-Bildschirm drücken. Wenn Sie die folgenden Ergebnisse erhalten, sind Sie erfolgreich.
"Added 3 items from RDS MySQL table"
Recommended Posts