Utilizzo di code di lettere morte per elaborare eventi non consegnati in EventBridge - 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à.

Utilizzo di code di lettere morte per elaborare eventi non consegnati in EventBridge

Per evitare di perdere gli eventi dopo che non vengono recapitati a una destinazione, potete configurare una dead-letter queue (DLQ) e inviarvi tutti gli eventi non riusciti per elaborarli in un secondo momento.

EventBridge DLQssono SQS code standard di Amazon EventBridge utilizzate per archiviare eventi che non è stato possibile consegnare correttamente a una destinazione. Quando crei una regola e aggiungi un obiettivo, puoi scegliere se utilizzare o meno unDLQ. Quando configuri unDLQ, puoi conservare tutti gli eventi che non sono stati consegnati 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 un obiettivo di una regola, EventBridge invia gli eventi con chiamate non riuscite alla SQS coda Amazon selezionata.

Gli errori relativi agli eventi vengono gestiti in modi diversi. Alcuni eventi vengono eliminati o inviati a un DLQ senza alcun tentativo. Ad esempio, per gli errori derivanti dalla mancanza di autorizzazioni per una destinazione o se si tratta di una risorsa di destinazione che non esiste più, non verrà effettuato alcun tentativo finché non verrà intrapresa un'azione per risolvere il problema sottostante. EventBridge invia questi eventi direttamente alla destinazioneDLQ, se ne hai specificata una.

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 unDLQ, vengono inviate metriche aggiuntive a CloudWatch Includer and. InvocationsSentToDLQ InvocationsFailedToBeSentToDLQ

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

Ogni tuo messaggio DLQ includerà i seguenti attributi personalizzati:

  • RULE_ARN

  • TARGET_ARN

  • ERROR_CODE

    Di seguito è riportato un esempio dei codici di errore che è DLQ possibile 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 illustra le impostazioniDLQs:

Considerazioni sull'utilizzo di una coda DLQ

Considerate quanto segue quando configurate un DLQ for. EventBridge

  • Sono supportate solo le code standard. Non puoi usare una FIFO coda per entrare. DLQ EventBridge

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

  • Autorizzazioni per DLQs lo stesso account:

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

    • Se utilizzi l'PutTargetsoperazione di per EventBridge API aggiungere o aggiornare un obiettivo per una regola e scegli una SQS coda Amazon 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 di Amazon SQS Queues da un altro AWS account.

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

    • Se si crea una regola utilizzando ilAPI, è necessario allegare manualmente una politica basata sulle risorse alle code di un altro account utilizzato come SQS coda delle lettere morte. Per ulteriori informazioni, consulta Concessione delle autorizzazioni per la coda DLQ.

  • La SQS coda Amazon che usi 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 necessario disporre dell'autorizzazione a farlo. Quando si specifica un DLQ utilizzando la EventBridge console, le autorizzazioni vengono aggiunte automaticamente. Questo include:

Se specifichi un DLQ utilizzo di 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. API

Esempio di autorizzazioni Target per una coda di lettere non scritte

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 politica concede al EventBridge servizio le autorizzazioni per utilizzare l'SendMessageoperazione per inviare messaggi a una coda denominata "». MyEvent DLQ 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 mostra come concedere le autorizzazioni richieste quando si specifica un per un bus di eventi. DLQ In questo caso, aws:SourceArn specifica il bus ARN degli eventi che invia gli eventi a. 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 allegare la politica alla coda, usa la SQS console Amazon, apri la coda, quindi scegli la politica di accesso e modifica la politica. Puoi anche utilizzare l' AWS CLI. Per ulteriori informazioni, consulta SQSAutorizzazioni Amazon.

Come inviare nuovamente eventi da una coda DLQ

Puoi spostare i messaggi da a DLQ in due modi:

  • Evita di scrivere la logica SQS dei consumatori di Amazon: imposta la tua DLQ fonte di eventi sulla funzione Lambda per esaurire il tuo. DLQ

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