Appel synchrone - AWS Lambda

Appel synchrone

Lorsque vous appelez une fonction de façon synchrone, Lambda exécute la fonction et attend une réponse. Lorsque la fonction s’achève, Lambda renvoie la réponse du code de la fonction avec des données supplémentaires, telles que la version de la fonction qui a été appelée. Pour appeler une fonction de façon synchrone avec AWS CLI, utilisez la commande invoke.

$ aws lambda invoke --function-name my-function --payload '{ "key": "value" }' response.json { "ExecutedVersion": "$LATEST", "StatusCode": 200 }

Le diagramme suivant montre des clients qui appellent une fonction Lambda de manière synchrone. Lambda envoie les événements directement à la fonction et renvoie la réponse de la fonction à l'appelant.


      Les clients appellent une fonction de manière synchrone et attendent une réponse.

payload est une chaîne qui contient un événement au format JSON. Le nom du fichier où l'AWS CLI écrit la réponse de la fonction est response.json. Si la fonction renvoie un objet ou une erreur, la réponse est l'objet ou d'une erreur au format JSON. Si la fonction se termine sans erreur, la réponse est null.

La sortie de la commande, qui s'affiche dans le terminal, inclut des informations provenant des en-têtes de la réponse à partir de Lambda. Cela inclut la version qui a traité l'événement (utile lorsque vous utilisez des alias) et le code d’état renvoyé par Lambda. Si Lambda a été en mesure d'exécuter la fonction, le code d’état est 200, même si la fonction a renvoyé une erreur.

Note

Pour les fonctions avec un long délai d'attente, votre client peut être déconnecté pendant l'appel synchrone, pendant qu'il attend une réponse. Configurez votre client HTTP, SDK, pare-feu, proxy ou système d'exploitation pour permettre des connexions longues avec des paramètres de délai d'attente ou de keep-alive.

Si Lambda n’est pas en mesure d'exécuter la fonction, l'erreur s'affiche dans la sortie.

$ aws lambda invoke --function-name my-function --payload value response.json An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Unrecognized token 'value': was expecting ('true', 'false' or 'null') at [Source: (byte[])"value"; line: 1, column: 11]

Pour obtenir les journaux pour un appel à partir de la ligne de commande, utilisez l'option --log-type. La réponse inclut un champ LogResult qui contient jusqu'à 4 Ko de journaux codés en base64 provenant de l'appel.

$ aws lambda invoke --function-name my-function out --log-type Tail { "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }

Vous pouvez utiliser l'utilitaire base64 pour décoder les journaux.

$ aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text | base64 -d START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST "AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib", END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Duration: 79.67 ms Billed Duration: 80 ms Memory Size: 128 MB Max Memory Used: 73 MB

L’utilitaire base64 est disponible sous Linux, MacOS et Ubuntu sous Windows. Pour MacOS, la commande est base64 -D.

Pour en savoir plus sur l'API Invoke, y compris une liste complète de paramètres, d’en-têtes et d’erreurs, consultez Invoke.

Lorsque vous appelez une fonction directement, vous pouvez vérifier la réponse pour les erreurs et réessayer. La AWS CLI et le kit SDK AWS réessaient automatiquement selon les délais d'expiration du client, des blocages et des erreurs de service. Pour de plus amples informations, veuillez consulter Gestion des erreurs et tentatives automatiques dans AWS Lambda.