Débogage de la livraison d’événements - 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.

Débogage de la livraison d’événements

Les problèmes de diffusion d'événements peuvent être difficiles à identifier. EventBridge Il existe plusieurs moyens de déboguer et de récupérer en cas d'échec de livraison d'événements.

Comment EventBridge réessaie d'organiser des événements

Parfois, un événement n’est pas correctement livré à la cible spécifiée dans une règle. Cela peut se produire, par exemple :

  • Si la ressource cible n'est pas disponible

  • En raison de l'état du réseau

Lorsqu'un événement n'est pas correctement transmis à une cible en raison d'erreurs récupérables, EventBridge réessaie d'envoyer l'événement. Vous définissez la durée des tentatives et le nombre de nouvelles tentatives dans les paramètres Politique de nouvelles tentatives de la cible. Par défaut, EventBridge réessaie d'envoyer l'événement pendant 24 heures et jusqu'à 185 fois avec un retard exponentiel ou un délai aléatoire.

Si un événement n'est pas délivré une fois toutes les tentatives épuisées, l'événement est abandonné et son traitement EventBridge ne se poursuit pas.

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

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 Les DLQ sont des files d'attente EventBridge Amazon SQS standard utilisées pour stocker des événements qui n'ont pas pu être transmis à 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 provoquées par l’absence d’autorisations sur une cible ou par une ressource cible qui n’existe plus, toutes les nouvelles tentatives échouent tant qu’une mesure n’est pas prise pour résoudre le problème sous-jacent. Plutôt que de réessayer, EventBridge envoie ces événements directement au DLQ, si vous en avez 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 des DLQ pour les 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 plus d’informations, consultez Utilisation de files d'attente contenant des lettres mortes pour capturer les erreurs liées aux événements chiffrés.

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 la configuration des DLQ :

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 les DLQ dans 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, veuillez consulter la section 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, veuillez consulter la section 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, veuillez consulter la section 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, veuillez consulter la section Autorisations Amazon SQS.

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.