Utilisation de files d'attente de lettres mortes pour traiter les événements non livrés dans EventBridge - Amazon EventBridge

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.

Utilisation de files d'attente de lettres mortes pour traiter les événements non livrés dans EventBridge

Pour éviter de perdre des événements qui ne parviennent pas à être livrés à une cible, vous pouvez configurer une file d’attente de lettres mortes (DLQ) et lui envoyer tous les événements ayant échoué pour qu’ils soient traités ultérieurement.

EventBridge DLQs sont des files d'attente Amazon SQS standard EventBridge utilisées pour stocker des événements qui n'ont pas pu être transmis avec succès à une cible. Lorsque vous créez une règle et ajoutez une cible, vous pouvez choisir d’utiliser ou non une DLQ. Lorsque vous configurez une DLQ, vous pouvez conserver tous les événements qui n’ont pas été correctement livrés. Vous pouvez ensuite résoudre le problème ayant provoqué l’échec de la livraison des événements et traiter les événements ultérieurement.

Lorsque vous configurez une DLQ pour la cible d'une règle, EventBridge envoie les événements ayant échoué à la file d'attente Amazon SQS sélectionnée.

Les erreurs d’événement sont traitées de différentes façons. Certains événements sont supprimés ou envoyés à une DLQ sans effectuer de nouvelle tentative. Par exemple, pour les erreurs résultant de l'absence d'autorisations sur une cible, ou si une ressource cible n'existe plus, aucune nouvelle tentative n'aura lieu tant que des mesures ne seront pas prises pour résoudre le problème sous-jacent. EventBridge envoie ces événements directement au DLQ cible, si vous en avez spécifié un.

En cas d'échec de la diffusion d'un événement, EventBridge publie un événement sur Amazon CloudWatch Metrics indiquant qu'un objectif invocation a échoué. Si vous utilisez un DLQ, des métriques supplémentaires sont envoyées aux adresses suivantes : CloudWatch y compris InvocationsSentToDLQ etInvocationsFailedToBeSentToDLQ.

Vous pouvez également spécifier DLQs des bus d'événements, si vous les utilisez AWS KMS clés gérées par le client pour chiffrer des événements au repos. Pour de plus amples informations, veuillez consulter Utilisation de files d'attente contenant des lettres mortes pour capturer les erreurs d'événements chiffrées dans EventBridge.

Chaque message de votre DLQ inclura les attributs personnalisés suivants :

  • RULE_ARN

  • TARGET_ARN

  • ERROR_CODE

    Voici des exemples de code d’erreur qu’une DLQ peut renvoyer :

    • CONNECTION_FAILURE

    • CROSS_ACCOUNT_INGESTION_FAILED

    • CROSS_REGION_INGESTION_FAILED

    • ERROR_FROM_TARGET

    • EVENTS_IN_BATCH_REQUEST_REJECTED

    • EVENTS_IN_BATCH_REQUEST_REJECTED

    • FAILED_TO_ASSUME_ROLE

    • INTERNAL_ERROR

    • INVALID_JSON

    • INVALID_PARAMETER

    • NO_PERMISSIONS

    • NO_RESOURCE

    • RESOURCE_ALREADY_EXISTS

    • RESOURCE_LIMIT_EXCEEDED

    • RESOURCE_MODIFICATION_COLLISION

    • SDK_CLIENT_ERROR

    • THIRD_ACCOUNT_HOP_DETECTED

    • THIRD_REGION_HOP_DETECTED

    • THROTTLING

    • TIMEOUT

    • TRANSIENT_ASSUME_ROLE

    • UNKNOWN

  • ERROR_MESSAGE

  • EXHAUSTED_RETRY_CONDITION

    Les conditions suivantes peuvent être renvoyées :

    • MaximumRetryAttempts

    • MaximumEventAgeInSeconds

  • RETRY_ATTEMPTS

La vidéo suivante décrit les paramètres DLQs :

Considérations relatives à l’utilisation d’une file d’attente de lettres mortes

Tenez compte des points suivants lors de la configuration d'un DLQ pour EventBridge.

  • Seules les files d’attente standard sont prises en charge. Vous ne pouvez pas utiliser une file d'attente FIFO pour un DLQ dans. EventBridge

  • EventBridge inclut les métadonnées de l'événement et les attributs du message dans le message, notamment : le code d'erreur, le message d'erreur, la condition de nouvelle tentative épuisée, l'ARN de la règle, les tentatives de nouvelle tentative et l'ARN cible. Vous pouvez utiliser ces valeurs pour identifier un événement et la cause de l’échec.

  • Autorisations pour DLQs le même compte :

    • Si vous ajoutez une cible à une règle à l'aide de la console et que vous choisissez une file d'attente Amazon SQS dans le même compte, une politique basée sur les ressources qui accorde l' EventBridge accès à la file d'attente est attachée à la file d'attente pour vous.

    • Si vous utilisez l' EventBridge API PutTargets pour ajouter ou mettre à jour une cible pour une règle, et que vous choisissez une file d'attente Amazon SQS dans le même compte, vous devez accorder manuellement des autorisations à la file d'attente sélectionnée. Pour en savoir plus, consultez Octroi d’autorisations à la file d’attente de lettres mortes.

  • Autorisations d'utilisation des files d'attente Amazon SQS à partir d'un autre compte. AWS

    • Si vous créez une règle à partir de la console, les files d’attente des autres comptes ne sont pas affichées pour que vous puissiez les sélectionner. Vous devez fournir l’ARN de la file d’attente dans l’autre compte, puis attacher manuellement une politique basée sur les ressources pour accorder l’autorisation à la file d’attente. Pour en savoir plus, consultez Octroi d’autorisations à la file d’attente de lettres mortes.

    • Si vous créez une règle à l’aide de l’API, vous devez attacher manuellement une politique basée sur les ressources aux files d’attente SQS d’un autre compte utilisé comme file d’attente de lettres mortes. Pour en savoir plus, consultez Octroi d’autorisations à la file d’attente de lettres mortes.

  • La file d’attente Amazon SQS que vous utilisez doit se trouver dans la même région que celle dans laquelle vous créez la règle.

Octroi d’autorisations à la file d’attente de lettres mortes

Pour transmettre correctement les événements à la file d'attente, vous EventBridge devez être autorisé à le faire. Lorsque vous spécifiez un DLQ à l'aide de la EventBridge console, les autorisations sont automatiquement ajoutées. Cela consiste notamment à :

Si vous spécifiez un DLQ à l'aide de l'API, ou si vous utilisez une file d'attente qui se trouve dans un autre AWS compte, vous devez créer manuellement une politique basée sur les ressources qui accorde les autorisations requises, puis l'associer à la file d'attente.

Exemple d'autorisations de file d'attente pour les lettres mortes

La politique basée sur les ressources suivante explique comment accorder les autorisations requises pour envoyer des messages d'événements EventBridge à une file d'attente Amazon SQS. L'exemple de politique accorde au EventBridge service l'autorisation d'utiliser l'SendMessageopération pour envoyer des messages à une file d'attente nommée « MyEvent DLQ ». La file d'attente doit se trouver dans la région us-west-2 sur le compte 123456789012. AWS La Condition déclaration autorise uniquement les demandes provenant d'une règle nommée « MyTestRule » créée dans la région us-west-2 sur le compte 123456789012. AWS

{ "Sid": "Dead-letter queue permissions", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:us-west-2:123456789012:MyEventDLQ", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:events:us-west-2:123456789012:rule/MyTestRule" } } }

Exemple d'autorisations de file d'attente de lettres mortes dans un bus d'événements

La politique basée sur les ressources suivante montre comment accorder les autorisations requises lors de la spécification d'un DLQ pour un bus d'événements. Dans ce cas, aws:SourceArn spécifie l'ARN du bus d'événements qui envoie les événements au DLQ. Ici encore, dans cet exemple, la file d'attente doit se trouver dans la même région que le bus d'événements.

{ "Sid": "Dead-letter queue permissions", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:region:account-id:queue-name", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:events:region:account-id:event-bus/event-bus-arn" } } }

Pour attacher la politique à la file d’attente, utilisez la console Amazon SQS, ouvrez la file d’attente, puis choisissez la stratégie d’accès et modifiez-la. Vous pouvez également utiliser AWS CLI. Pour en savoir plus, consultez SQSAutorisations Amazon.

Comment renvoyer des événements à partir d’une file d’attente de lettres mortes

Vous pouvez déplacer les messages hors d’une DLQ de deux façons :

  • Éviter d’écrire une logique de consommateur Amazon SQS : définissez votre DLQ en tant que source d’évènement pour la fonction Lambda afin de purger votre DLQ.

  • Rédigez la logique client Amazon SQS : utilisez l'API Amazon SQS AWS , le SDK AWS CLI ou écrivez une logique client personnalisée pour interroger, traiter et supprimer les messages dans le DLQ.