Capture d'enregistrements d'appels asynchrones Lambda - AWS Lambda

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Capture d'enregistrements d'appels asynchrones Lambda

Lambda peut envoyer des enregistrements d'appels asynchrones à l'une des entités suivantes. Services AWS

  • Amazon SQS — Une SQS file d'attente standard.

  • Amazon SNS — Un SNS sujet standard.

  • AWS Lambda – Fonction Lambda.

  • Amazon EventBridge — Un bus EventBridge événementiel.

L'enregistrement d'invocation contient les détails de la demande et de la réponse au JSON format. Vous pouvez configurer des destinations distinctes pour les événements qui ont été traités avec succès et ceux dont le traitement a échoué. Vous pouvez également configurer une file d'SQSattente Amazon standard ou une SNS rubrique Amazon standard sous forme de file d'attente de lettres mortes pour les événements ignorés. Pour les files d’attente de lettres mortes, Lambda envoie uniquement le contenu de l’événement, sans plus d’informations sur la réponse.

Si Lambda ne parvient pas à envoyer un enregistrement vers une destination que vous avez configurée, il envoie une DestinationDeliveryFailures métrique à Amazon. CloudWatch Cela peut se produire si votre configuration inclut un type de destination non pris en charge, tel qu'une SQS FIFO file d'attente Amazon ou un SNS FIFO sujet Amazon. Des erreurs de remise peuvent également se produire en raison d’erreurs d’autorisations et de limites de taille. Pour plus d’informations sur les métriques d’invocation Lambda, consultez Métriques d'invocation.

Note

Pour empêcher une fonction de se déclencher, vous pouvez définir la simultanéité réservée de la fonction sur zéro. Lorsque vous définissez la simultanéité réservée sur zéro pour une fonction invoquée de manière asynchrone, Lambda commence à envoyer les nouveaux événements à la file d’attente de lettres mortes ou à la destination d’événement en situation d’échec, sans aucune nouvelle tentative. Pour traiter les événements qui ont été envoyés alors que la simultanéité réservée était définie sur zéro, vous devez consommer les événements de la file d’attente de lettres mortes ou de la destination des événements en situation d’échec.

Ajouter une destination

Pour retenir les enregistrements des invocations asynchrones, ajoutez une destination à votre fonction. Vous pouvez choisir d’envoyer les invocations réussies ou non à une destination. Chaque fonction peut avoir plusieurs destinations. Vous pouvez donc configurer des destinations distinctes pour les événements réussis et échoués. Chaque enregistrement envoyé à la destination est un JSON document contenant les détails de l'invocation. Comme les paramètres de gestion des erreurs, vous pouvez configurer des destinations au niveau d’une fonction, d’une version de fonction ou d’un alias.

Le tableau suivant répertorie les destinations prises en charge pour les enregistrements d’invocation asynchrones. Pour que Lambda envoie correctement les enregistrements vers la destination que vous avez choisie, assurez-vous que le rôle d’exécution de votre fonction contient également les autorisations appropriées. Le tableau décrit également comment chaque type de destination reçoit l'enregistrement JSON d'appel.

Type de destination Autorisation obligatoire Format spécifique à la destination JSON

SQSFile d'attente Amazon

sqs : SendMessage

Lambda transmet l’enregistrement d’invocation en tant que Message à la destination.

SNSRubrique Amazon

sns:Publish

Lambda transmet l’enregistrement d’invocation en tant que Message à la destination.

Fonction Lambda

InvokeFunction

Lambda transmet l’enregistrement d’invocation comme charge utile à la fonction.

EventBridge

événements : PutEvents

  • Lambda transmet l'enregistrement d'invocation tel qu'il figure detail dans l'appel. PutEvents

  • La valeur du champ événement source est lambda.

  • La valeur du champ événement detail-type est soit Résultat de l’invocation de la fonction lambda – Succès, soit Résultat de l’invocation de la fonction lambda – Échec.

  • Le champ resource d'événement contient la fonction et la destination Amazon Resource Names (ARNs).

  • Pour les autres champs relatifs aux événements, consultez Amazon EventBridge events.

Les étapes suivantes décrivent comment configurer une destination pour une fonction à l'aide de la console Lambda et du. AWS CLI

Console
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Choisissez une fonction.

  3. Sous Function overview (Vue d’ensemble de la fonction), choisissez Add destination (Ajouter une destination).

  4. Pour Source, choisissez Asynchronous invocation (Invocation asynchrone).

  5. Pour Condition choisissez l’une des options suivantes :

    • On failure (En cas d’échec) – Envoyer un enregistrement quand l’événement échoue à toutes les tentatives de traitement ou dépasse l’âge maximal.

    • On success (En cas de succès) – Envoyer un enregistrement quand la fonction traite avec succès une invocation asynchrone.

  6. Pour Type de destination, choisissez le type de ressource qui reçoit l’enregistrement d’invocation.

  7. Pour Destination, choisissez une ressource.

  8. Choisissez Save (Enregistrer).

AWS CLI

Pour configurer une destination à l'aide de AWS CLI, exécutez la commande update-function-event-invoke-config. L'exemple suivant configure Lambda pour envoyer un enregistrement à une file d'attente SQS standard destination nommée lorsqu'un événement ne peut pas être traité.

aws lambda update-function-event-invoke-config \ --function-name my-function \ --destination-config '{"OnFailure":{"Destination": "arn:aws:sqs:us-east-1:123456789012:destination"}}'

Lorsqu'un appel répond à la condition, Lambda envoie JSON un document contenant les détails de l'appel à la destination. L’exemple suivant illustre un enregistrement d’invocation pour un événement dont le traitement a échoué à trois reprises en raison d’une erreur de fonction.

Exemple enregistrement d’invocation
{ "version": "1.0", "timestamp": "2019-11-14T18:16:05.568Z", "requestContext": { "requestId": "e4b46cbf-b738-xmpl-8880-a18cdf61200e", "functionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function:$LATEST", "condition": "RetriesExhausted", "approximateInvokeCount": 3 }, "requestPayload": { "ORDER_IDS": [ "9e07af03-ce31-4ff3-xmpl-36dce652cb4f", "637de236-e7b2-464e-xmpl-baf57f86bb53", "a81ddca6-2c35-45c7-xmpl-c3a03a31ed15" ] }, "responseContext": { "statusCode": 200, "executedVersion": "$LATEST", "functionError": "Unhandled" }, "responsePayload": { "errorMessage": "RequestId: e4b46cbf-b738-xmpl-8880-a18cdf61200e Process exited before completing request" } }

L’enregistrement d’invocation contient des détails sur l’événement, la réponse et la raison pour laquelle l’enregistrement a été envoyé.

Suivi des demandes vers les destinations

Vous pouvez utiliser AWS X-Ray pour visualiser une vue connectée de chaque demande lorsqu’elle est placée en file d’attente, traitée par une fonction Lambda et transmise au service de destination. Lorsque vous activez le suivi X-Ray pour une fonction ou un service qui invoque une fonction, Lambda ajoute un en-tête X-Ray à la demande et transmet l’en-tête au service de destination. Les traces des services en amont sont automatiquement liées aux traces des fonctions Lambda en aval et des services de destination, créant ainsi une end-to-end vue de l'ensemble de l'application. Pour plus d’informations sur le suivi, consultez Visualisez les invocations de fonctions Lambda à l'aide de AWS X-Ray.

Ajouter une file d'attente de lettres mortes

Comme alternative à une destination réservée aux échecs, vous pouvez configurer votre fonction avec une file d’attente de lettres mortes pour enregistrer les événements ignorés en vue d’un traitement ultérieur. Une file d’attente de lettres mortes agit de la même manière qu’une destination réservée aux échecs en ce sens qu’elle est utilisée lorsqu’un événement échoue à toutes les tentatives de traitement ou expire sans être traité. Toutefois, vous ne pouvez ajouter ou supprimer une file d'attente de lettres mortes qu'au niveau de la fonction. Les versions de fonction utilisent les mêmes paramètres de file d'attente de lettres mortes que la version non publiée ($). LATEST Les destinations réservées aux échecs prennent également en charge des cibles supplémentaires et incluent des détails sur la réponse de la fonction dans l’enregistrement d’invocation.

Pour retraiter les événements d'une file d'attente contenant des lettres mortes, vous pouvez la définir comme source d'événements pour votre fonction Lambda. Vous pouvez également récupérer manuellement les événements.

Vous pouvez choisir une file d'attente SQS standard Amazon ou un sujet SNS standard Amazon pour votre file d'attente de lettres mortes. FIFOles files d'attente et les SNS FIFO sujets Amazon ne sont pas pris en charge.

  • SQSFile d'attente Amazon : une file d'attente contient les événements ayant échoué jusqu'à ce qu'ils soient récupérés. Choisissez une file d'attente SQS standard Amazon si vous vous attendez à ce qu'une seule entité, telle qu'une fonction Lambda ou une CloudWatch alarme, traite l'événement défaillant. Pour de plus amples informations, veuillez consulter Utilisation de Lambda avec Amazon SQS.

  • SNSRubrique Amazon : une rubrique transmet les événements ayant échoué à une ou plusieurs destinations. Choisissez un sujet SNS standard d'Amazon si vous vous attendez à ce que plusieurs entités agissent en cas d'échec d'un événement. Par exemple, vous pouvez configurer une rubrique pour envoyer des événements à une adresse e-mail, à une fonction Lambda et/ou à un point de terminaison. HTTP Pour de plus amples informations, veuillez consulter Invocation de fonctions Lambda avec les notifications Amazon SNS.

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

Si la file d’attente ou la rubrique cible est chiffrée avec une clé gérée par le client, le rôle d’exécution doit également être un utilisateur dans la stratégie basée sur les ressources de la clé.

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.

Console
  1. Ouvrez la page Functions (Fonctions) de la console Lambda.

  2. Choisissez une fonction.

  3. Sélectionnez Configuration, puis Asynchronous invocation (Invocation asynchrone).

  4. Sous Asynchronous invocation (Invocation asynchrone), choisissez Edit (Modifier).

  5. Définissez le service de file d'attente des lettres mortes sur Amazon ou SQS Amazon. SNS

  6. Choisissez la file d’attente ou la rubrique cible.

  7. Choisissez Save (Enregistrer).

AWS CLI

Pour configurer une file d'attente contenant des lettres mortes avec le AWS CLI, utilisez la update-function-configurationcommande.

aws lambda update-function-configuration \ --function-name my-function \ --dead-letter-config TargetArn=arn:aws:sns:us-east-1: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’invocation. IDsLes demandes apparaissent dans les journaux des fonctions. Vous pouvez également utiliser le X-Ray SDK pour enregistrer l'ID de demande sur un attribut de la trace. Vous pouvez ensuite rechercher des suivis par ID de demande dans la console X-Ray.

  • ErrorCode(Numéro) — Le code HTTP d'état.

  • ErrorMessage(String) — Les 1 premiers Ko du message d'erreur.

Si Lambda ne parvient pas à envoyer de message à la file d'attente contenant des lettres mortes, il supprime l'événement et émet la métrique. DeadLetterErrors Cela peut se produire 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. Supposons, par exemple, qu'une SNS notification Amazon dont le corps est proche de 256 Ko déclenche une fonction qui génère une erreur. Dans ce cas, les données d'événement ajoutées par AmazonSNS, combinées aux attributs ajoutés par Lambda, peuvent faire en sorte que le message dépasse la taille maximale autorisée dans la file d'attente de lettres mortes.

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