Debug della distribuzione di eventi - Amazon EventBridge

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Debug della distribuzione di eventi

I problemi di consegna degli eventi possono essere difficili da identificare e EventBridge offre alcuni modi per eseguire il debug e ripristinare gli errori di consegna degli eventi.

In che modo EventBridge riprova a fornire eventi

A volte un evento non viene distribuito correttamente alla destinazione specificata in una regola. Ciò può accadere, ad esempio:

  • Se la risorsa di destinazione non è disponibile

  • A causa delle condizioni della rete

Quando un evento non viene consegnato correttamente a una destinazione a causa di errori recuperabili, EventBridge riprova a inviare l'evento. A questo proposito, puoi impostare il periodo durante il quale effettua nuovi tentativi e il numero di tentativi nelle impostazioni Policy di ripetizione della destinazione. Per impostazione predefinita, EventBridge riprova a inviare l'evento per 24 ore e fino a 185 volte con un backoff e un jitter esponenziali o un ritardo casuale.

Se un evento non viene consegnato dopo aver esaurito tutti i tentativi, l'evento viene eliminato e non viene più elaborato. EventBridge

Utilizzo di code di lettere morte per elaborare gli eventi non consegnati

Per evitare di perdere eventi dopo la mancata distribuzione a una destinazione, è possibile configurare una coda DLQ e inviarle tutti gli eventi non riusciti per un'elaborazione successiva.

EventBridge I DLQ sono code Amazon SQS standard che vengono utilizzate per archiviare eventi EventBridge che non è stato possibile consegnare correttamente a una destinazione. Quando crei una regola e aggiungi una destinazione, puoi scegliere se utilizzare o meno una coda DLQ. Quando configuri un coda DLQ, puoi mantenere tutti gli eventi che non sono stati distribuiti correttamente. È quindi possibile risolvere il problema che ha causato la mancata distribuzione dell'evento ed elaborare gli eventi in un secondo momento.

Quando configuri un DLQ per una destinazione di una regola, EventBridge invia gli eventi con chiamate non riuscite alla coda Amazon SQS selezionata.

Gli errori relativi agli eventi vengono gestiti in modi diversi. Alcuni eventi vengono abbandonati o inviati a una coda DLQ senza che venga effettuato alcun nuovo tentativo. Ad esempio, per gli errori derivanti dalla mancanza di autorizzazioni per una destinazione o da una risorsa di destinazione che non esiste più, tutti i nuovi tentativi falliscono fino a che non viene intrapresa un'azione per risolvere il problema alla base. Invece di riprovare, EventBridge invia questi eventi direttamente al DLQ, se disponibile.

Quando la consegna di un evento non riesce, EventBridge pubblica un evento su Amazon CloudWatch Metrics indicando che un obiettivo invocation non è riuscito. Se utilizzi un DLQ, vengono inviate metriche aggiuntive a, tra cui and. CloudWatch InvocationsSentToDLQ InvocationsFailedToBeSentToDLQ

È inoltre possibile specificare DLQ per i bus di eventi, se si utilizza per AWS KMS chiavi gestite dal cliente crittografare gli eventi inattivi. Per ulteriori informazioni, consulta Utilizzo di code di lettere morte per acquisire gli errori degli eventi crittografati.

Ogni messaggio nella tua coda DLQ includerà i seguenti attributi personalizzati:

  • RULE_ARN

  • TARGET_ARN

  • ERROR_CODE

    Di seguito è riportato un esempio dei codici di errore che una coda DLQ può restituire:

    • 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

    Possono essere restituite le seguenti condizioni:

    • MaximumRetryAttempts

    • MaximumEventAgeInSeconds

  • RETRY_ATTEMPTS

Il video seguente descrive le code DLQ:

Considerazioni sull'utilizzo di una coda DLQ

Considerate quanto segue quando configurate un DLQ per. EventBridge

  • Sono supportate solo le code standard. Non è possibile utilizzare una coda FIFO per un DLQ in. EventBridge

  • EventBridge include i metadati degli eventi e gli attributi del messaggio, tra cui: il codice di errore, il messaggio di errore, la condizione Exhausted Retry, l'ARN della regola, i tentativi di tentativo e l'ARN di destinazione. È possibile utilizzare questi valori per identificare un evento e la causa dell'errore.

  • Autorizzazioni per le code DLQ nello stesso account:

    • Se aggiungi un obiettivo a una regola utilizzando la console e scegli una coda Amazon SQS nello stesso account, alla coda viene allegata automaticamente una policy basata sulle risorse che concede EventBridge l'accesso alla coda.

    • Se utilizzi il PutTargets funzionamento dell' EventBridge API per aggiungere o aggiornare un obiettivo per una regola e scegli una coda Amazon SQS nello stesso account, devi concedere manualmente le autorizzazioni alla coda selezionata. Per ulteriori informazioni, consulta Concessione delle autorizzazioni per la coda DLQ.

  • Autorizzazioni per l'utilizzo delle code Amazon SQS da un altro account. AWS

    • Se crei una regola dalla console, non vengono visualizzate le code di altri account che puoi selezionare. È necessario fornire l'ARN della coda nell'altro account e quindi associare manualmente una policy basata su risorse per concedere l'autorizzazione alla coda. Per ulteriori informazioni, consulta Concessione delle autorizzazioni per la coda DLQ.

    • Se crei una regola utilizzando l'API, devi associare manualmente una policy basata su risorse alle code SQS in un altro account utilizzato come coda DLQ. Per ulteriori informazioni, consulta Concessione delle autorizzazioni per la coda DLQ.

  • La coda Amazon SQS utilizzata deve trovarsi nella stessa Regione in cui crei la regola.

Concessione delle autorizzazioni per la coda DLQ

Per inviare correttamente gli eventi alla coda, EventBridge devi avere l'autorizzazione a farlo. Quando si specifica un DLQ utilizzando la EventBridge console, le autorizzazioni vengono aggiunte automaticamente. Questo include:

Se specifichi un DLQ utilizzando l'API o utilizzi una coda che si trova in un AWS account diverso, devi creare manualmente una politica basata sulle risorse che conceda le autorizzazioni richieste e quindi collegarla alla coda.

Esempio di autorizzazioni Target per la coda a lettera morta

La seguente politica basata sulle risorse mostra come concedere le autorizzazioni necessarie per inviare messaggi di eventi EventBridge a una coda Amazon SQS. L'esempio di policy concede al EventBridge servizio le autorizzazioni per utilizzare l'SendMessageoperazione per inviare messaggi a una coda denominata "DLQ». MyEvent La coda deve trovarsi nella regione us-west-2 nell'account 123456789012. AWS L'Conditionistruzione consente solo le richieste che provengono da una regola denominata "MyTestRule" creata nella regione us-west-2 nell'account 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" } } }

Esempio di autorizzazioni per la coda a lettere morte di Event Bus

La seguente politica basata sulle risorse dimostra come concedere le autorizzazioni richieste quando si specifica un DLQ per un bus di eventi. In questo caso, aws:SourceArn specifica l'ARN del bus degli eventi che invia gli eventi al DLQ. Anche in questo esempio, la coda deve trovarsi nella stessa regione del bus degli eventi.

{ "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" } } }

Per associare la policy alla coda, usa la console Amazon SQS, apri la coda, quindi scegli la policy di accesso e modifica la policy. Puoi anche utilizzare l' AWS CLI. Per ulteriori informazioni, consulta Autorizzazioni di Amazon SQS.

Come inviare nuovamente eventi da una coda DLQ

Puoi spostare i messaggi da una coda DQL in due modi:

  • Evita di scrivere logica consumer di Amazon SQS: imposta la coda DQL come origine di evento sulla funzione Lambda per svuotare la coda DLQ.

  • Scrivi la logica consumer di Amazon SQS: utilizza l'API Amazon SQS AWS , l'SDK AWS CLI o per scrivere una logica consumer personalizzata per il polling, l'elaborazione e l'eliminazione dei messaggi nel DLQ.