Zugriff auf RDS von Lambda (Python)

Erklären Sie in einer Zeile

Beschreibt den Zugriff auf RDS über eine in Python geschriebene Lambda-Funktion.

Referenzseite

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.

Verfahren

  1. Erstellen Sie RDS
  2. Erstellen Sie ein Lambda-Bereitstellungspaket (Zip-Datei).
  3. Erstellen Sie eine IAM-Rolle, die Lambda gewährt werden soll
  4. Erstellen Sie die Lambda-Funktion
  5. Testausführung

Schauen wir uns das Schritt für Schritt genauer an.

1. Erstellen Sie RDS

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

Sicherheitsgruppen-Fix

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.)

2. Erstellen Sie ein Lambda-Bereitstellungspaket (Zip-Datei).

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.

3. Erstellen Sie eine IAM-Rolle, die Lambda gewährt werden soll

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".

4. Erstellen Sie die Lambda-Funktion

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.

Erstellen Sie mit dieser Einstellung eine Lambda-Funktion.

5. Testlauf

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

Zugriff auf RDS von Lambda (Python)
So greifen Sie über Python auf Wikipedia zu
Wie benutzt man Python Lambda?
[Lambda] [Python] Von Lambda auf Twitter posten!
So aktualisieren Sie Google Sheets von Python
So greifen Sie von außen auf den Datenspeicher zu
So installieren Sie Python
Greifen Sie über Python auf Bitcoind zu
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
So installieren Sie Python
So öffnen Sie einen Webbrowser über Python
Studie aus Python Hour7: Verwendung von Klassen
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
So generieren Sie ein Python-Objekt aus JSON
Wie man gut mit Linux-Befehlen aus Python umgeht
Exportieren Sie den RDS-Snapshot mit Lambda (Python) nach S3.
[AWS / Lambda] Laden einer externen Python-Bibliothek
So erhalten Sie den Wert aus dem Parameterspeicher in Lambda (mit Python)
[Python] So entfernen Sie doppelte Werte aus der Liste
[Neueste Version 2020.8] So installieren Sie Python
So "cache-fähiger" Zugriff auf FPGA-Speicher von Linux
Post von Python nach Slack
So installieren Sie Python [Windows]
python3: Verwendung der Flasche (2)
So kratzen Sie Bilddaten von Flickr mit Python
[Python] Verwendung von Liste 1
So aktualisieren Sie Pythons Tkinter auf 8.6
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
Fragen Sie Athena von Lambda Python ab
Greifen Sie über Python auf Oracle DB zu
Wie benutzt man Python Argparse?
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
So laden Sie Dateien von Selenium of Python in Chrome herunter
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
So führen Sie Notepad ++ Python aus
Stellen Sie von Python aus eine Verbindung zu SQLite her
Führen Sie die Python-Funktion von Powershell aus (wie Sie Argumente übergeben).
So ändern Sie die Python-Version
Wie man in Python entwickelt
[Python] Wie man Skalar beurteilt
[Python] Verwendung von input ()
[Python] Verwendung von virtualenv
[Python] So rufen Sie eine Funktion von c aus Python auf (ctypes edition)
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
Verwendung von Python-Bytes
ODBC-Zugriff auf SQL Server von Linux mit Python
So schneiden Sie ein Block-Multiple-Array aus einem Multiple-Array in Python
So importieren Sie die in EFS eingerichtete Python-Bibliothek in Lambda
So führen Sie ein Python-Programm in einem Shell-Skript aus
So starten Sie AWS Batch über die Python-Client-App
Herstellen einer Verbindung zu verschiedenen DBs über Python (PEP 249) und SQL Alchemy
Wie man aus einer Wahrscheinlichkeitsdichtefunktion in Python tastet
[Python] Exportieren Sie regelmäßig mit Lambda aus CloudWatch-Protokollen nach S3
Wie man Python oder Julia von Ruby aus aufruft (experimentelle Implementierung)
Rufen Sie Matlab von Python zur Optimierung auf