AWS Lambda
Manuel du développeur

Appel asynchrone

Lorsque vous appelez une fonction de façon asynchrone, Lambda envoie l'événement à une file d'attente. Un processus distinct lit les événements à partir de la file d'attente et exécute votre fonction. Lorsque l'événement est ajouté à la file d'attente, Lambda renvoie une réponse de réussite sans informations supplémentaires. Pour appeler une fonction de façon asynchrone, définissez le paramètre du type d'appel sur Event.

$ aws lambda invoke --function-name my-function --invocation-type Event --payload '{ "key": "value" }' response.json { "StatusCode": 202 }

Le fichier de sortie (response.json) ne contient pas d'informations, mais il est tout de même créé lorsque vous exécutez cette commande. Si Lambda n’est pas en mesure d'ajouter l'événement à la file d'attente, le message d'erreur s'affiche dans la sortie de la commande.

Lambda gère la file d’attente de l'appel asynchrone de la fonction et tente de relancer automatiquement les événements ayant échoué. Si la fonction renvoie une erreur, Lambda tente de l'exécuter deux nouvelles fois, avec une minute d’attente entre les deux premières tentatives et deux minutes entre la deuxième et la troisième. Les erreurs de fonction comprennent des erreurs renvoyées par le code de la fonction et des erreurs renvoyées par l’environnement d'exécution de la fonction, comme les délais d'expiration. Si les 3 tentatives échouent, Lambda envoie l'événement dans une file d'attente de lettres mortes, si elle est configurée.


      Lambda enregistre chaque tentative dans un sous-segment.

Si la fonction n'a pas suffisamment de simultanéité disponible pour traiter tous les événements, des demandes supplémentaires sont bloquées. Pour les erreurs de limitation (erreur 429) et les erreurs système (série 500), Lambda renvoie l'événement à la file d'attente et tente d'exécuter la fonction à nouveau pour une durée maximale de 6 heures. L'intervalle de réessai augmente exponentiellement de 1 seconde après la première tentative à un maximum de 5 minutes, mais peut être plus long si la file d'attente est sauvegardée. Lambda réduit également la vitesse de lecture des événements de la file d'attente, et les événements plus anciens peuvent ne pas être lus. La durée maximale pendant laquelle un événement peut rester dans la file d'attente est de 4 jours.


      Les demandes bloquées en attente apparaîtront en attente dans AWS X-Ray.

Même si votre fonction ne renvoie pas une erreur, elle peut recevoir le même événement plusieurs fois à partir de Lambda, car la file d'attente elle-même est finalement cohérent. Si la fonction ne peut pas à prendre en charge les événements entrants, ils peuvent également être supprimés de la file d'attente sans être envoyés à la fonction. Assurez-vous que le code de votre fonction gère correctement les événements dupliqués et que vous avez suffisamment de simultanéité disponible pour gérer tous les appels.

Files d'attente de lettres mortes de la fonction AWS Lambda

Lorsque les trois essais de traitement d’un appel asynchrone échouent, Lambda peut envoyer l'événement à une file d’attente Amazon SQS ou à une Amazon SNS rubrique. Configurez votre fonction avec une file d'attente de lettres mortes pour enregistrer ces événements en vue d'un traitement ultérieur.

Si vous n'avez pas de file d'attente ou de rubrique, créez-en une. Choisissez le type de cible qui correspond à votre cas d'utilisation.

Pour envoyer des événements à une file d'attente ou une rubrique, votre fonction a besoin d’autorisations supplémentaires. Ajoutez une stratégie avec les autorisations requises au rôle d’exécution de votre fonction.

Après avoir créé la cible et mis à jour votre rôle d'exécution de la fonction, ajoutez la file d'attente de lettres mortes à votre fonction. Vous pouvez configurer plusieurs fonctions pour envoyer des événements à la même cible.

Configuration d'une file d'attente de lettres mortes

  1. Ouvrez la page Fonctions de la console Lambda.

  2. Choisissez une fonction.

  3. Sous Debugging and error handling (Débogage et gestion des erreurs), définissez la DLQ resource (Ressource DLQ) sur Amazon SQS ou Amazon SNS.

  4. Choisissez la file d'attente ou la rubrique cible.

  5. Choisissez Save.

Pour configurer une file d'attente de lettres mortes avec la AWS CLI, utilisez la commande update-function-configuration.

$ aws lambda update-function-configuration --function-name my-function \ --dead-letter-config TargetArn=arn:aws:sns:us-east-2:123456789012:my-topic

Lambda envoie l'événement à la file d'attente de lettres mortes en l'état, avec des informations supplémentaires dans les attributs. Vous pouvez utiliser ces informations pour identifier l'erreur que la fonction a renvoyée ou établir une corrélation entre l'événement et des journaux ou une trace AWS X-Ray.

Attributs de message de file d'attente de lettres mortes

  • RequestID (Chaîne) – ID de la demande d'appel. Les ID de demande apparaissent dans les journaux de la fonction. Vous pouvez également utiliser le kit SDK X-Ray pour enregistrer l'ID de demande sur un attribut dans la trace, que vous pouvez ensuite rechercher par ID de demande dans la console X-Ray. Consultez l'exemple de processeur d'erreur pour obtenir un exemple.

  • ErrorCode (Nombre) – Le code d'état HTTP.

  • ErrorMessage (Chaîne) – Le premier Ko du message d'erreur.


      Attributs d'événement de file d'attente de lettres mortes dans la console Amazon SQS.

Si Lambda ne peut pas envoyer un message à la file d'attente de lettres mortes, il supprime l'événement et émet la métrique DeadLetterErrors. Cela peut survenir en raison d'un manque d'autorisations ou si la taille totale du message est supérieure à la limite de la file d'attente cible ou rubrique. Par exemple, si une notification Amazon SNS avec un corps proche de 256 KB déclenche une fonction qui génère une erreur, le message peut dépasser la taille maximale autorisée dans la file d'attente de lettres mortes en raison des données d'événement supplémentaires ajoutées par Amazon SNS, combinées aux attributs ajoutés par Lambda.

Si vous utilisez Amazon SQS comme source d'événement, configurez une file d'attente de lettres mortes sur la file d'attente Amazon SQS elle-même et non pas sur la fonction Lambda. Pour plus d'informations, consultez Utilisation de AWS Lambda avec Amazon SQS.

Sur cette page :