View a markdown version of this page

Usando filas de cartas mortas para processar eventos não entregues no EventBridge - Amazônia EventBridge

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usando filas de cartas mortas 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.

EventBridge As DLQs são filas padrão do Amazon SQS EventBridge usadas para armazenar eventos que não puderam ser entregues com sucesso a um alvo. 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.

Quando você configura uma DLQ para o destino de uma regra, EventBridge envia os eventos com invocações falhadas para a fila do Amazon SQS selecionada.

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, para erros que resultam da falta de permissões em um destino, de um recurso de destino que não existe mais ou de um destino que não pode ser encontrado devido a um endereço inválido ou a uma falha na pesquisa de DNS, nenhuma nova tentativa ocorrerá até que sejam tomadas medidas para resolver o problema subjacente. EventBridge envia esses eventos diretamente para a DLQ de destino, se você tiver especificado uma.

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

Você também pode especificar DLQs para barramentos de eventos, se você usar AWS KMS chaves gerenciadas pelo cliente para criptografar eventos em repouso. Para obter mais informações, consulte Usando filas de mensagens mortas para capturar erros de eventos criptografados em 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:

    • ACTION_DECRYPTION_FAILURE

    • CONNECTION_FAILURE

    • CROSS_ACCOUNT_INGESTION_FAILED

    • CROSS_REGION_INGESTION_FAILED

    • ERROR_FROM_TARGET

    • EVENT_DECRYPTION_FAILURE

    • EVENT_ENCRYPTION_FAILURE

    • 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

    • RULE_DECRYPTION_FAILURE

    • 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 vídeo a seguir aborda a configuração 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. Você não pode usar uma fila FIFO para uma DLQ em. EventBridge

  • EventBridge inclui metadados do evento e atributos da mensagem na mensagem, incluindo: o código de erro, a mensagem de erro, a condição de tentativa esgotada, o ARN da regra, as tentativas de nova tentativa 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 você adicionar um alvo a uma regra usando o console e escolher uma fila do Amazon SQS na mesma conta, uma política baseada em recursos que concede EventBridge acesso à fila será anexada à fila para você.

    • Se você usar a PutTargets operação da EventBridge API para adicionar ou atualizar um alvo para uma regra e escolher uma fila do Amazon SQS na mesma conta, deverá conceder permissões manualmente à 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 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 à fila com sucesso, é EventBridge necessário ter permissão para fazer isso. Quando você especifica uma DLQ usando o EventBridge console, 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 EventBridge enviar mensagens de eventos para uma fila do Amazon SQS. O exemplo de política EventBridge concede ao serviço permissões para usar a SendMessage operação para enviar mensagens para uma fila chamada "MyEventDLQ”. A fila deve estar na região us-west-2 na conta 123456789012. AWS A Condition declaração permite somente solicitações provenientes de uma regra chamada "MyTestRule" criada na região us-west-2 na AWS conta 123456789012.

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

  • Escreva a lógica do consumidor do Amazon SQS — Use a API e o AWS SDK do Amazon SQS ou AWS CLI escreva uma lógica de consumidor personalizada para pesquisar, processar e excluir as mensagens na DLQ.