[PYTHON] RDS-Tutorial zu Lambda

Angenommen, Sie erstellen eine API, die die in RDS gespeicherten Daten mithilfe von AWS API Gateway, Lambda und RDS nach außen verfügbar macht, stellen Sie zunächst von Lambda aus eine Verbindung zu RDS her.

Angenommene Tabellenstruktur

#Tabellenname: link_clicks
|Spaltenname| description       | 
| path      |URL-Pfad|
| clicks    |Linkklicks|
| stat_date |Aggregationsdatum|

1. Erstellen Sie eine Lambda-Funktion

Erstellen Sie in Python ein Programm, das mithilfe von Lambda eine Verbindung zu RDS (MySQL) herstellt und Informationen gemäß dem Abfrageparameter (Pfad) abruft und zurückgibt.

1.1 Erstellen Sie ein Python-Paket (API)

mkdir api

1.2 Installieren Sie Python-abhängige Pakete

Installieren Sie PyMySQL für die Verbindung zu MySQL

pip install PyMySQL -t api

1.3 Beschreiben Sie die Hauptfunktion

Bereiten Sie die Hauptfunktionsbeschreibungsdatei (Handler) und die Einstellungsdatei vor (Ersetzen Sie YOUR_XXX)

api/api.py


# -*- coding: utf-8 -*-
import sys
import logging
import rds_config
import pymysql
import datetime as DT
import json

#rds settings
rds_host  = rds_config.db_host
name = rds_config.db_username
password = rds_config.db_password
db_name = rds_config.db_name


logger = logging.getLogger()
logger.setLevel(logging.INFO)

try:
    mysql_client = 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
    """

    path = event["path"]
  
    query = "select sum(clicks) from link_clicks where path = '%(path)s' group by path" % dict(path=path)
    logger.info(query)

    results = []
    with mysql_client.cursor() as cur:
        cur.execute(query)
        for row in cur:
            clicks = int(row[0])
            results.append({"clicks": clicks})

    return json.dumps(results)

api/rds_config.py


db_host = "YOUR_HOST"
db_username = "YOUR_USERNAME"
db_password = "YOUR_PASSWORD"
db_name = "YOUR_DB_NAME"

1.4 Laden Sie das Programm auf Lambda hoch

deploy.sh


#Zip-Erstellung
(cd api && zip -r - *) > api.zip

# create lambda function
## YOUR_Lambda für die Rolle-vpc-execution-Rolle angeben
aws lambda create-function \
--region YOUR_REGION \
--function-name api  \
--zip-file fileb://api.zip \
--role YOUR_ROLE \
--handler api.handler \
--runtime python2.7 \
--vpc-config SubnetIds=YOUR_SUBNET_IDS,SecurityGroupIds=YOUR_SECURITY_GROUP_ID

# update lambda function
aws lambda update-function-code \
--region YOUR_REGION \
--function-name  api  \
--zip-file fileb://api.zip

2. Überprüfen Sie die Lambda-Funktion

2.1 Vergewissern Sie sich, dass die Lambda-Funktion hochgeladen wurde

Überprüfen Sie, ob die API-Funktion hinzugefügt wurde, indem Sie auf Folgendes zugreifen https://ap-northeast-1.console.aws.amazon.com/lambda/home?region=ap-northeast-1#/functions?display=list

apiファンクションが追加されてる.png

2.2 Testereignisse einstellen

Registrieren Sie ein Testereignis über Aktionen> Testereignis konfigurieren Die Einstellungen sind wie folgt

{
  "path": "/11111"
}

testイベント設定.png テストイベントとしてpathを設定.png

2.3 Test

Klicken Sie im obigen Bild auf Speichern und testen, um zu testen テスト結果が表示される.png

Schließlich

Mit dem obigen Verfahren können Sie jetzt eine Verbindung zu Lambda => RDS herstellen und die Daten durchsuchen. Die Details sind auch im aws-Dokument enthalten. Bitte beziehen Sie sich darauf. http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/vpc-rds-create-lambda-function.html

Recommended Posts

RDS-Tutorial zu Lambda
Führen Sie mysqlclient auf Lambda aus
Starten Sie Lambda mit Boto3
Lambda
Führen Sie Python planmäßig auf AWS Lambda aus
Django Crispy Tutorial (Umgebungskonstruktion auf Mac)
Installieren Sie die Python-Bibliothek auf Lambda mit [/ tmp]
Zugriff auf RDS von Lambda (Python)
[Python] Führen Sie Headless Chrome unter AWS Lambda aus