Usar filas de mensagens não entregues para processar eventos não entregues no EventBridge - Amazon EventBridge

Usar filas de mensagens não entregues para processar eventos não entregues no EventBridge

Para evitar a perda de eventos após eles não serem entregues a um destino, você pode configurar uma fila de mensagens não entregues (DLQ) e enviar todos os eventos que falharam para processamento posterior.

As DLQs do EventBridge são filas padrão do Amazon SQS que o EventBridge usa para armazenar eventos que não puderam ser entregues com êxito a um destino. Ao criar uma regra e adicionar um destino, é possível escolher se quer ou não usar uma DLQ. Ao configurar uma DLQ, é possível reter todos os eventos que não foram entregues com êxito. Em seguida, é possível resolver o problema que resultou na falha na entrega do evento e processar os eventos posteriormente.

Ao configurar uma DLQ para o destino de uma regra, o EventBridge envia os eventos com invocações com falha para a fila selecionada do Amazon SQS.

Os erros de eventos são tratados de diferentes maneiras. Alguns eventos são descartados ou enviados para uma DLQ sem nenhuma tentativa de repetição. Por exemplo, com relação a erros que resultam da falta de permissões para um destino ou de um recurso de destino que não existe mais, nenhuma tentativa ocorrerá enquanto não for tomada uma medida para resolver o problema subjacente. O EventBridge envia esses eventos diretamente à DLQ de destino, se você tiver especificado uma.

Quando a entrega de um evento falha, o EventBridge publica um evento nas métricas do Amazon CloudWatch indicando que um destino invocation falhou. Se você usa uma DLQ, métricas adicionais são enviadas ao CloudWatch, incluindo InvocationsSentToDLQ e InvocationsFailedToBeSentToDLQ.

Você também pode especificar DLQs para barramentos de eventos, se usar chaves gerenciadas pelo cliente do AWS KMS para criptografar eventos em repouso. Para ter mais informações, consulte Usar filas de mensagens não entregues para capturar erros de eventos criptografados no EventBridge.

Cada mensagem em sua DLQ incluirá os seguintes atributos personalizados:

  • RULE_ARN

  • TARGET_ARN

  • ERROR_CODE

    A seguinte é uma amostra dos códigos de erro que uma DLQ pode retornar:

    • 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

    As seguintes condições podem ser retornadas:

    • MaximumRetryAttempts

    • MaximumEventAgeInSeconds

  • RETRY_ATTEMPTS

O seguinte vídeo aborda as configurações de DLQs:

Considerações sobre o uso de uma fila de mensagens não entregues

Considere o seguinte ao configurar uma DLQ para o EventBridge:

  • Somente filas padrão são compatíveis. Não é possível usar uma fila FIFO para uma DLQ no EventBridge.

  • O EventBridge inclui metadados de eventos e atributos de mensagem na mensagem, incluindo: o código de erro, a mensagem de erro, a condição de repetição esgotada, o ARN da regra, as tentativas de repetição e o ARN de destino. É possível usar esses valores para identificar um evento e a causa da falha.

  • Permissões para DLQs na mesma conta:

    • Se adicionar um destino a uma regra usando o console e escolher uma fila do Amazon SQS na mesma conta, uma política baseada em recursos que concede ao EventBridge acesso à fila será anexada à fila.

    • Se usar a operação PutTargets da API do EventBridge para adicionar ou atualizar um destino para uma regra e escolher uma fila do Amazon SQS na mesma conta, deverá conceder manualmente as permissões para a fila selecionada. Para saber mais, consulte Como conceder permissões para a fila de mensagens não entregues.

  • Permissões para usar filas do Amazon SQS de uma conta diferente da AWS.

  • A fila do Amazon SQS que é usada deve estar na mesma região em que a regra foi criada.

Como conceder permissões para a fila de mensagens não entregues

Para entregar eventos na fila com êxito, o EventBridge deve ter a respectiva permissão. Ao especificar uma DLQ usando o console do EventBridge, as permissões são adicionadas automaticamente. Isso inclui:

Se especificar uma DLQ usando a API ou usar uma fila que esteja em uma conta diferente da AWS, deverá criar manualmente uma política baseada em recursos que conceda as permissões necessárias e anexá-la à fila.

Exemplo de permissões de fila de mensagens não entregues do destino

A política baseada em recursos a seguir demonstra como conceder as permissões necessárias para que o EventBridge envie mensagens de evento a uma fila do Amazon SQS. O exemplo de política concede ao serviço EventBridge permissões para usar a operação SendMessage para enviar mensagens para uma fila chamada "MyEventDLQ". A fila deve estar na região us-west-2 na conta 123456789012 da AWS. A declaração Condition permite somente solicitações provenientes de uma regra chamada "MyTestRule" criada na região us-west-2 na conta 123456789012 da 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" } } }

Exemplo de permissões de fila de mensagens não entregues do barramento de eventos

A política baseada em recursos a seguir demonstra como conceder as permissões necessárias ao especificar uma DLQ para um barramento de eventos. Nesse caso, aws:SourceArn especifica o ARN do barramento de eventos que envia os eventos à DLQ. Neste exemplo também, a fila deve estar na mesma região que o barramento de eventos.

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

Para anexar a política à fila, use o console do Amazon SQS, abra a fila, escolha a Política de acesso e edite a política. Você também pode usar o AWS CLI Para saber mais, consulte Permissões do Amazon SQS.

Como reenviar eventos de uma fila de mensagens não entregues

É possível remover mensagens de uma DLQ de duas maneiras:

  • Evite escrever a lógica de consumidor do Amazon SQS: defina sua DLQ como uma origem de evento para a função do Lambda para drenar sua DLQ.

  • Escrever a lógica do consumidor do Amazon SQS: use a API do Amazon SQS, o AWS SDK ou a AWS CLI para escrever a lógica personalizada do consumidor para sondagem, processamento e exclusão das mensagens na DLQ.