[PYTHON] Tutoriel RDS sur Lambda

Tout d'abord, connectez-vous à RDS à partir de Lambda, en supposant que vous créiez une API qui expose les données stockées dans RDS à l'extérieur à l'aide d'API Gateway, Lambda et RDS d'AWS.

Structure de table supposée

#nom de la table: link_clicks
|Nom de colonne| description       | 
| path      |chemin d'URL|
| clicks    |Clics sur les liens|
| stat_date |Date d'agrégation|

1. Créez une fonction Lambda

Créez un programme en python qui se connecte à RDS (mysql) en utilisant lambda et récupère et retourne des informations en fonction du paramètre de requête (chemin).

1.1 Créer un package python (api)

mkdir api

1.2 Installer les packages dépendants de python

Installez PyMySQL pour la connexion à mysql

pip install PyMySQL -t api

1.3 Décrire la fonction principale

Préparer le fichier de description de la fonction principale (gestionnaire) et le fichier de configuration (Remplacez VOTRE_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 Télécharger le programme sur lambda

deploy.sh


#création zip
(cd api && zip -r - *) > api.zip

# create lambda function
## YOUR_Lambda pour ROLE-vpc-execution-Spécifiez le rôle
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. Vérifiez la fonction Lambda

2.1 Confirmer que la fonction Lambda a été téléchargée

Vérifiez que la fonction api a été ajoutée en accédant à https://ap-northeast-1.console.aws.amazon.com/lambda/home?region=ap-northeast-1#/functions?display=list

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

2.2 Définir des événements de test

Enregistrer un événement de test à partir d'actions> configurer l'événement de test Les paramètres sont les suivants

{
  "path": "/11111"
}

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

2.3 Test

Cliquez sur Enregistrer et tester dans l'image ci-dessus pour tester テスト結果が表示される.png

finalement

Avec la procédure ci-dessus, vous pouvez maintenant vous connecter à lambda => RDS et parcourir les données. Les détails sont également écrits dans le document aws, veuillez donc vous y référer. http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/vpc-rds-create-lambda-function.html

Recommended Posts

Tutoriel RDS sur Lambda
Exécutez mysqlclient sur Lambda
Démarrez Lambda avec Boto3
lambda
Exécutez Python selon la planification sur AWS Lambda
Tutoriel Django Crispy (Construction d'environnement sur Mac)
Installez la bibliothèque python sur Lambda à l'aide de [/ tmp]
Comment accéder à RDS depuis Lambda (python)
[Python] Exécutez Headless Chrome sur AWS Lambda