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:
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.
lambda_func
.
--code = _lambda.Code.from_asset ("lambda")
signifie que le fichier de fonction Lambda se trouve dans le répertoire lambda
.
--handler = "webhook.handler"
signifie regarder la fonction handler
de webhook.py
--runtime = _lambda.Runtime.PYTHON_3_7
devrait utiliser Python 3.7
-API Gateway est défini avec ʻapi`.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.
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