Depuración de la entrega de eventos - Amazon EventBridge

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Depuración de la entrega de eventos

Los problemas relacionados con la entrega de eventos pueden ser difíciles de identificar, y EventBridge ofrece varias formas de depurar los errores en la entrega de eventos y recuperarse de ellos.

¿Cómo EventBridge vuelve a intentar entregar eventos

A veces, un evento no se entrega correctamente al destino especificado en una regla. Esto puede suceder, por ejemplo:

  • Si el recurso de destino no está disponible

  • Debido a las condiciones de la red

Cuando un evento no se entrega correctamente a un destino debido a errores recuperables, EventBridge vuelve a intentar enviar el evento. El tiempo durante el que se intenta y el número de reintentos se establecen en la configuración de la política de reintentos del destino. De forma predeterminada, EventBridge vuelve a intentar enviar el evento durante 24 horas y hasta 185 veces, con un retraso exponencial o un retardo aleatorio.

Si un evento no se entrega una vez agotados todos los reintentos, el evento se descarta y EventBridge no se sigue procesando.

Uso de colas con letra muerta para procesar los eventos no entregados

Para evitar perder eventos no entregados a un destino, puede configurar una cola de mensajes fallidos (DLQ) y enviarle todos los eventos fallidos para que los procese más adelante.

EventBridge Los DLQ son colas estándar de Amazon SQS EventBridge que se utilizan para almacenar eventos que no se pudieron entregar correctamente a un objetivo. Al crear una regla y añadir un destino, puede elegir si desea utilizar o no una DLQ. Al configurar una DLQ, puede retener los eventos que no se hayan entregado correctamente. A continuación, puede resolver el problema que provocó el error en la entrega del evento y procesar los eventos más tarde.

Cuando configura un DLQ para el objetivo de una regla, EventBridge envía los eventos con invocaciones fallidas a la cola de Amazon SQS seleccionada.

Los errores de eventos se gestionan de distintas formas. Algunos eventos se descartan o se envían a una DLQ sin volver a intentar la entrega. Por ejemplo, en el caso de los errores derivados de la falta de permisos para acceder a un destino o de un recurso de destino que ya no existe, todos los reintentos fallan hasta que se adopte una medida para resolver el problema subyacente. En lugar de volver a intentarlo, EventBridge envía estos eventos directamente al DLQ, si lo tiene.

Cuando se produce un error en la entrega de un evento, EventBridge publica un evento en CloudWatch las métricas de Amazon que indican que se ha producido un invocation error en un objetivo. Si utilizas un DLQ, se envían métricas adicionales a CloudWatch Inclusive InvocationsSentToDLQ yInvocationsFailedToBeSentToDLQ.

También puede especificar los DLQ para los buses de eventos, si los utiliza AWS KMS claves administradas por el cliente para cifrar los eventos en reposo. Para obtener más información, consulte Utiliza colas de texto sin efecto para capturar los errores de eventos cifrados.

Cada mensaje de la DLQ incluirá los siguientes atributos personalizados:

  • RULE_ARN

  • TARGET_ARN

  • ERROR_CODE

    El siguiente es un ejemplo de los códigos de error que puede devolver una DLQ:

    • 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

    Se puede devolver las siguientes condiciones:

    • MaximumRetryAttempts

    • MaximumEventAgeInSeconds

  • RETRY_ATTEMPTS

En el siguiente vídeo se repasa la configuración de las DLQ:

Consideraciones sobre el uso de una cola de mensajes fallidos

Tenga en cuenta lo siguiente al configurar un DLQ para. EventBridge

  • Solo se admiten colas estándar. No puede utilizar una cola FIFO para una entrada DLQ. EventBridge

  • EventBridge incluye los metadatos del evento y los atributos del mensaje en el mensaje, incluidos: el código de error, el mensaje de error, la condición de reintento agotada, el ARN de la regla, los intentos de reintento y el ARN de destino. Puede usar estos valores para identificar un evento y la causa del error.

  • Permisos para DLQ de la misma cuenta:

    • Si añade un objetivo a una regla mediante la consola y elige una cola de Amazon SQS en la misma cuenta, se adjuntará a la cola una política basada en recursos que le concede EventBridge acceso a la cola.

    • Si utiliza la PutTargets operación de la EventBridge API para añadir o actualizar un destino para una regla y elige una cola de Amazon SQS en la misma cuenta, debe conceder permisos manualmente a la cola seleccionada. Para obtener más información, consulte Concesión de permisos a la cola de mensajes fallidos.

  • Permisos para usar colas de Amazon SQS desde una cuenta diferente. AWS

    • Si crea una regla desde la consola, las colas de otras cuentas no se muestran para que las seleccione. Debe proporcionar el ARN de la cola de la otra cuenta y, a continuación, adjuntar manualmente una política basada en recursos para conceder permisos a la cola. Para obtener más información, consulte Concesión de permisos a la cola de mensajes fallidos.

    • Si crea una regla mediante la API, debe adjuntar manualmente una política basada en recursos a las colas de SQS de otra cuenta que se utilice como cola de mensajes fallidos. Para obtener más información, consulte Concesión de permisos a la cola de mensajes fallidos.

  • La cola de Amazon SQS que utilice debe estar en la región en la que creó la regla.

Concesión de permisos a la cola de mensajes fallidos

Para entregar correctamente los eventos a la cola, EventBridge debe tener permiso para hacerlo. Al especificar un DLQ mediante la EventBridge consola, los permisos se añaden automáticamente. Esto incluye:

Si especificas un DLQ mediante la API o utilizas una cola que se encuentra en una AWS cuenta diferente, debes crear manualmente una política basada en los recursos que conceda los permisos necesarios y, a continuación, adjuntarla a la cola.

Ejemplo de permisos de cola con letra muerta de Target

La siguiente política basada en recursos demuestra cómo conceder los permisos necesarios para enviar mensajes de eventos EventBridge a una cola de Amazon SQS. El ejemplo de política otorga al EventBridge servicio permisos para usar la SendMessage operación para enviar mensajes a una cola denominada «DLQ». MyEvent La cola debe estar en la región us-west-2 en la cuenta 123456789012. AWS El Condition estado de cuenta solo permite solicitudes que provengan de una regla denominada «MyTestRule» que se haya creado en la región us-west-2 en la cuenta 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" } } }

Ejemplo de permisos de cola con letra muerta para el bus de eventos

La siguiente política basada en recursos demuestra cómo conceder los permisos necesarios al especificar un DLQ para un bus de eventos. En este caso, aws:SourceArn especifica el ARN del bus de eventos que envía los eventos al DLQ. También en este ejemplo, la cola debe estar en la misma región que el bus 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 adjuntar la política a la cola, utilice la consola de Amazon SQS, abra la cola y, a continuación, seleccione la política de acceso y edítela. También puede utilizar la AWS CLI. Para obtener más información, consulte Permisos de Amazon SQS.

Cómo reenviar eventos desde una cola de mensajes fallidos

Los mensajes se pueden sacar de una DLQ de dos formas:

  • Evitar escribir lógica de consumo de Amazon SQS: establezca la DLQ como una fuente de eventos en la función de Lambda para drenar dicha cola.

  • Escriba la lógica de consumo de Amazon SQS: utilice la API AWS o el SDK de Amazon SQS AWS CLI o escriba una lógica de consumo personalizada para sondear, procesar y eliminar los mensajes del DLQ.