Uso de colas de mensajes fallidos para procesar eventos no entregados en EventBridge
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.
Las DLQ de EventBridge son colas estándar de Amazon SQS que EventBridge utiliza para almacenar eventos que no se han podido entregar correctamente a un destino. 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.
Al configurar una DLQ para un destino 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, no se volverá a intentar hasta que se adopte una medida para resolver el problema subyacente. EventBridge envía estos eventos directamente a la DLQ de destino, si ha especificado una.
Cuando se produce un error en la entrega de un evento, EventBridge publica un evento en las métricas de Amazon CloudWatch para indicar que se ha producido un error en la invocation
de un destino. Si utiliza una DLQ, se envían métricas adicionales a CloudWatch, incluidas InvocationsSentToDLQ
y InvocationsFailedToBeSentToDLQ
.
También puede especificar las DLQ para los buses de eventos, si utiliza claves administradas por el cliente de AWS KMS para cifrar los eventos en reposo. Para obtener más información, consulte Uso de colas de mensajes fallidos para capturar errores de eventos cifrados en EventBridge.
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:
Temas
Consideraciones sobre el uso de una cola de mensajes fallidos
A la hora de configurar una DLQ para EventBridge, tenga en cuenta lo siguiente.
-
Solo se admiten colas estándar. No puede usar una cola FIFO para una DLQ en EventBridge.
-
EventBridge incluye en el mensaje los metadatos del evento y los atributos del mensaje como: el código de error, el mensaje de error, la condición de reintento agotada, el ARN de la regla, el número de reintentos 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 destino a una regla mediante la consola y elige una cola de Amazon SQS de la misma cuenta, se adjuntará a la cola una política basada en recursos que concede a EventBridge acceso a la cola.
-
Si utiliza la operación
PutTargets
de la API de EventBridge para añadir o actualizar un destino para una regla, y elige una cola de Amazon SQS de 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 de AWS diferente.
-
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 los permisos correspondientes. Al especificar una DLQ mediante la consola de EventBridge, los permisos se añaden automáticamente. Esto incluye:
Al configurar una DLQ para un destino de una regla.
Cuando configura una DLQ para un bus de eventos en el que ha especificado que EventBridge utilice una clave administrada por el cliente de AWS KMS para cifrar los eventos en reposo.
Para obtener más información, consulte Uso de colas de mensajes fallidos para capturar errores de eventos cifrados en EventBridge.
Si especifica una DLQ mediante la API o utiliza una cola que se encuentra en una cuenta de AWS diferente, debe crear manualmente una política basada en recursos que conceda los permisos necesarios y, a continuación, adjuntarla a la cola.
Ejemplo de permisos para colas de mensajes fallidos de destino
La siguiente política basada en recursos demuestra cómo conceder los permisos necesarios para que EventBridge envíe mensajes de eventos a una cola de Amazon SQS. El ejemplo de política concede al servicio EventBridge permisos para utilizar la operación SendMessage
para enviar mensajes a una cola denominada "MyEventDLQ". La cola debe estar en la región us-west-2 en la cuenta 123456789012 de AWS. La declaración Condition
solo permite las solicitudes que provengan de una regla denominada "MyTestRule" que se haya creado en la región us-west-2 en la cuenta 123456789012 de 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 para colas de mensajes fallidos de buses de eventos
La siguiente política basada en recursos muestra cómo conceder los permisos necesarios al especificar una DLQ para un bus de eventos. En este caso, aws:SourceArn
especifica el ARN del bus de eventos que envía los eventos a la DLQ. De nuevo 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.
-
Escribir la lógica de consumo de Amazon SQS: utilice la API de Amazon SQS, el SDK de AWS o AWS CLI para escribir la lógica de consumo personalizada para el sondeo, el procesamiento y la eliminación de los mensajes de la DLQ.