Recevez un POST sur API Gateway + Lambda à l'aide d'AWS CDK (Python)

En gros, AWS CDK consiste à écrire un document de conception (CloudFormation) pour une application construite sur AWS dans un langage de programmation. Dans cet article, nous utiliserons Python pour implémenter le flux simple de traitement de JSON POSTed avec Lambda via API Gateway. Pour les paramètres d'utilisation d'AWS CDK, reportez-vous aux documents officiels ci-dessous:

procédure

Tout d'abord, créez un répertoire approprié et créez le cdk.json suivant.

cdk.json


{
  "app": "python3 app.py"
}

Ensuite, créez un nouveau répertoire (par exemple lambda) dans ce répertoire et créez-y une fonction Lambda (ici webhook.py). C'est une fonction qui renvoie simplement le JSON de la partie du corps de la requête telle quelle.

lambda/webhook.py


import json

def handler(event, content):
    try:
        body = event.get("body")
        print(body)
        status_code = 200
    except Exception as e:
        status_code = 500
        body = {"description": str(e)}
    return {
        "statusCode": status_code,
        "headers": {
            "Content-Type": "text/plain"
        },
        "body": json.dumps(body)
    }

Enfin, revenez au répertoire d'origine et définissez l'application Honmaru (ʻapp.py`).

app.py


import os
from aws_cdk import (
    core,
    aws_lambda as _lambda,
    aws_apigateway as apigw
)

class PrintPostStack(core.Stack):

    def __init__(self, scope: core.App, name: str, **kwargs) -> None:
        super().__init__(scope, name, **kwargs)

        lambda_func = _lambda.Function(
            self, "PrintPostFunc",
            code=_lambda.Code.from_asset("lambda"),
            handler="webhook.handler",
            runtime=_lambda.Runtime.PYTHON_3_7,
        )

        api = apigw.RestApi(self, "PrintPostApi")
        api.root.add_method("POST", apigw.LambdaIntegration(lambda_func))

app = core.App()

PrintPostStack(
    app, "PrintPostStack",
    env={
        "region": os.environ["CDK_DEFAULT_REGION"],
        "account": os.environ["CDK_DEFAULT_ACCOUNT"]
    }
)
app.synth()

--Stack est un terme qui fait référence à l'ensemble de toutes les ressources AWS qui sont générées.

c'est tout. Tout ce que vous avez à faire est de déployer avec la commande ci-dessous.

$ cdk deploy

Si tout se passe bien, vous verrez l'URL du point de terminaison. POST un JSON approprié avec la commande cURL et vérifiez la réponse.

$ curl -X POST \
> -H "Content-Type: application/json" \ 
> -d '{"Key1":"Value1", "Key2":"Value2"}' \
> https://xxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/

"{\"Key1\":\"Value1\", \"Key2\":\"Value2\"}"

Si le JSON est retourné tel quel comme ci-dessus, il réussit.

De plus, dans webhook.py, la partie du corps de la requête est print (body). Vous pouvez voir ce journal depuis CloudWatch. Dans AWS Console> Services, recherchez et cliquez sur CloudWatch et accédez au groupe Journaux> Journaux pour voir les journaux nommés PrintPostStack. Vous devriez voir le JSON comme indiqué ci-dessous. スクリーンショット 2020-09-07 6.40.51.png

c'est tout! J'ai présenté AWS CDK via la passerelle API ultra-simple + Lambda. Veuillez également consulter l'exemple officiel ci-dessous.

Recommended Posts

Recevez un POST sur API Gateway + Lambda à l'aide d'AWS CDK (Python)
Créez rapidement une API avec Python, lambda et API Gateway à l'aide d'AWS SAM
[Python] J'ai écrit une API REST en utilisant AWS API Gateway et Lambda.
LINE BOT avec Python + AWS Lambda + API Gateway
Version Amazon API Gateway et AWS Lambda Python
Vérifiez types_map lors de l'utilisation de mimetypes avec AWS Lambda (Python)
Exécutez Python selon la planification sur AWS Lambda
Publiez régulièrement des images de Papillon sur Python + AWS Lambda + Slack
[Python] Exécutez Headless Chrome sur AWS Lambda
[AWS] Essayez de tracer API Gateway + Lambda avec X-Ray
Essayez d'implémenter un robot Cisco Spark avec AWS Lambda + Amazon API Gateway (Python)
Comment configurer Layer sur Lambda à l'aide d'AWS SAM
Envoyez et recevez Gmail via l'API Gmail en utilisant Python
Déployer la fonction Python 3 avec Serverless Framework sur AWS Lambda
Prise en charge de l'environnement d'exécution Python 2.7 sur AWS Lambda (à partir de 2020.1)
Publiez sur votre compte en utilisant l'API sur Twitter
Je veux AWS Lambda avec Python sur Mac!
Une petite histoire à savoir comme un point addictif lors de l'écriture d'applications Twilio à l'aide de Python sur AWS Lambda
Publier sur Twitter en utilisant Python
[Python] Permet d'importer les packages pip3 sur AWS Lambda
Précautions lors de l'exécution de Python sur EC2 à partir d'AWS Lambda (Exécuter la commande)
Bonnes pratiques pour la journalisation au format JSON sur AWS Lambda / Python
J'ai comparé Node.js et Python lors de la création d'une miniature à l'aide d'AWS Lambda
J'ai essayé ChatOps avec Slack x API Gateway x Lambda (Python) x RDS
Tweet Récapitulatif WakaTime à l'aide d'AWS Lambda
Remarques sur l'installation de Python à l'aide de PyEnv
Essayez d'utiliser l'API d'action de Python argparse
Notes sur l'utilisation de rstrip avec python.
Installer Python sur CentOS à l'aide de Pyenv
Notifier HipChat avec AWS Lambda (Python)
Installez Python sur CentOS en utilisant pyenv
Présentation du mécanisme Twilio # 3-1 - Procédure pas à pas de mise en œuvre de la passerelle API API + Lambda (partie 1)
Le module ne peut pas être importé en Python sur EC2 exécuté à partir d'AWS Lambda
Configuration de l'authentification de base à l'aide de Python @Lambda
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
Exécutez un servomoteur en utilisant python sur Raspberry Pi 3
Connectez-vous à s3 avec AWS Lambda Python
Détectez la température à l'aide de python sur Raspberry Pi 3!
Créer une feuille de calcul Google à l'aide de l'API Python / Google Data
API REST facile avec API Gateway / Lambda / DynamoDB
Configuration de l'authentification Digest à l'aide de Python @Lambda
N'hésitez pas à transformer Python en utilisant la bibliothèque en une fonction AWS Lambda