Como depurar os eventos de entrega - Amazon 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á.

Como depurar os eventos de entrega

Os problemas de entrega de eventos podem ser difíceis de identificar e EventBridge oferecem algumas maneiras de depurar e se recuperar de falhas na entrega de eventos.

Como EventBridge tenta realizar eventos novamente

Às vezes, um evento não é entregue com êxito ao destino especificado em uma regra. Isso pode acontecer, por exemplo:

  • Se o recurso de destino não estiver disponível

  • Devido às condições da rede

Quando um evento não é entregue com sucesso a um alvo devido a erros recuperáveis, EventBridge tenta enviar o evento novamente. São definidos os tempo de tentativa e o número de tentativas nas configurações da política de repetição do destino. Por padrão, EventBridge tenta enviar novamente o evento por 24 horas e até 185 vezes com um recuo exponencial e instabilidade, ou atraso aleatório.

Se um evento não for entregue após o esgotamento de todas as tentativas, o evento será cancelado e EventBridge não continuará sendo processado.

Usando filas de cartas mortas para processar eventos não entregues

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 usadas para armazenar eventos EventBridge que não puderam ser entregues com sucesso 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.

Quando você configura uma DLQ para o destino de uma regra, EventBridge envia os eventos com invocações falhadas 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, para erros que resultam da falta de permissões para um destino ou de um recurso de destino que não existe mais, todas as tentativas falham até que uma ação seja tomada para resolver o problema subjacente. Em vez de tentar novamente, EventBridge envia esses eventos diretamente para o DLQ, se você tiver um.

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 um DLQ, métricas adicionais são enviadas para CloudWatch incluir 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 ter mais informações, consulte Usando filas de mensagens mortas para capturar erros de eventos criptografados.

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 um DLQ para. EventBridge

  • Somente filas padrão são compatíveis. Você não pode usar uma fila FIFO para uma entrada de DLQ. EventBridge

  • 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 você 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 EventBridge acesso à fila será anexada à fila para você.

    • Se você usar a PutTargets operação da EventBridge API 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. 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 com sucesso à fila, é EventBridge preciso 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 você especificar uma DLQ usando a API ou usar uma fila que esteja em uma AWS conta diferente, deverá criar manualmente uma política baseada em recursos que conceda as permissões necessárias e, em seguida, anexá-la à fila.

Exemplo de permissões de fila de mensagens mortas do Target

A política baseada em recursos a seguir demonstra como conceder as permissões necessárias para enviar mensagens de eventos EventBridge 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 instrução permite somente solicitações provenientes de uma regra chamada "MyTestRule" criada na região us-west-2 na conta 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" } } }

Exemplo de permissões de fila de mensagens mortas do Event Bus

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 para a DLQ. Aqui, novamente neste exemplo, a fila deve estar na mesma região do 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 de consumo do Amazon SQS — Use a API AWS , o SDK do Amazon SQS AWS CLI ou para escrever uma lógica de consumidor personalizada para sondar, processar e excluir as mensagens no DLQ.