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.
Configuración de una cola de mensajes fallidos para una programación
El Programador de Amazon EventBridge admite colas de mensajes fallidos (DLQ) mediante Amazon Simple Queue Service. Cuando un programa no puede invocar su destino, el Programador de EventBridge envía una carga JSON que contiene los detalles de la invocación y cualquier respuesta recibida del destino a una cola estándar de Amazon SQS que especifique.
En el siguiente tema, se hace referencia a este JSON como un evento de mensajes fallidos. Un evento de mensajes fallidos le permite solucionar problemas relacionados con su programación o sus destinos. Si configura una política de reintentos para su programación, el Programador de EventBridge proporciona el evento de mensajes fallidos, agotando el número máximo de reintentos que haya establecido.
En los siguientes temas, se describe cómo puede configurar una cola de Amazon SQS como DLQ según su programación, configurar los permisos que el Programador de EventBridge necesita para entregar mensajes a Amazon SQS y recibir eventos de mensajes fallidos de la DLQ.
Temas
Cree una cola de Amazon SQS.
Antes de configurar una DLQ para su programación, debe crear una cola Amazon SQS estándar. Para obtener instrucciones sobre cómo crear una cola mediante la consola de Amazon SQS, consulte Creación de una cola de Amazon SQS en la Guía para desarrolladores de Amazon Simple Queue Service.
nota
El Programador de EventBridge no admite el uso de una cola FIFO como DLQ de su programación.
Utilice el siguiente comando AWS CLI para crear una cola estándar.
$
aws sqs create-queue --queue-name
queue-name
Si se realiza correctamente, verá QueueURL
en el resultado.
{
"QueueUrl": "https://sqs.us-west-2.amazonaws.com/123456789012/scheduler-dlq-test"
}
Una vez creada la cola, anote el ARN de la cola. Necesitará el ARN cuando especifique una DLQ para su programación del Programador de EventBridge. Puede encontrar el ARN de la cola en la consola de Amazon SQS o mediante el comando get-queue-attributes
$
aws sqs get-queue-attributes --queue-url
your-dlq-url
--attribute-names QueueArn
Si se realiza correctamente, verá el ARN de la cola en la salida.
{ "Attributes": { "QueueArn": "arn:aws:sqs:us-west-2:123456789012:scheduler-dlq-test" } }
En la siguiente sección, añadirá los permisos necesarios a su función de ejecución de la programación para permitir que Programador de EventBridge entregue eventos de mensajes fallidos a Amazon SQS.
Configurar permisos de rol de ejecución
Para permitir que el Programador de EventBridge entregue eventos de mensajes fallidos a Amazon SQS, su función de ejecución de la programación necesita la siguiente política de permisos. Para obtener más información sobre cómo adjuntar una nueva política de permisos a su rol de ejecución programado, consulte Configuración del rol de ejecución.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sqs:SendMessage" ], "Effect": "Allow", "Resource": "*" } ] }
nota
Es posible que su función de ejecución programada ya tenga los permisos necesarios adjuntos si utiliza el Programador de EventBridge para invocar un destino de la API de Amazon SQS.
En la siguiente sección, utilizará la consola del Programador de EventBridge y especificará una DLQ para la programación.
Especificar una política de cola de mensajes fallidos
Para especificar una DLQ, utilice la consola el Programador de EventBridge o la AWS CLI para actualizar un programa existente o crear uno nuevo.
En la siguiente sección, utilizará la AWS CLI para recibir un evento de mensajes fallidos de DLQ.
Recuperar el evento de mensajes fallidos
Utilice el comando receive-message
--max-number-of-messages
.
$
aws sqs receive-message --queue-url
your-dlq-url
--attribute-names All --message-attribute-names All --max-number-of-messages 1
Si la operación se realiza correctamente, verá un resultado similar al siguiente.
{ "Messages": [ { "MessageId": "2aeg3510-fe3a-4f5a-ab6a-6906560eaf7e", "ReceiptHandle": "AQEBkNKTdOMrWgHKPoITRBwrPoK3eCSZIcZwVqCY0BZ+FfTcORFpopJbtCqj36VbBTlHreM8+qM/m5jcwqSlAlGmIJO/hYmMgn/+dwIty9izE7HnpvRhhEyHxbeTZ5V05RbeasYaBdNyi9WLcnAHviDh6MebLXXNWoFyYNsxdwJuG0f/w3htX6r3dxpXvvFNPGoQb8ihY37+u0gtsbuIwhLtUSmE8rbldEEwiUfi3IJ1zEZpUS77n/k1GWrMrnYg0Gx/BuaLzOrFi2F738XI/Hnh45uv3ca6OYwS1ojPQ1LtX2URg1haV5884FYlaRvY8jRlpCZabTkYRTZKSXG5KNgYZnHpmsspii6JNkjitYVFKPo0H91w5zkHlSx3REAuWk7m3r7PmOMvTNPMhctbD3CkTw==", "MD5OfBody": "07adc3fc889d6107d8bb8fda42fe0573", "Body": "{\"MessageBody\":\"Hello, world!",\"QueueUrl\":\"https://sqs.us-west-2.amazonaws.com/123456789012/does-not-exist\"}", "Attributes": { "SenderId": "AROA2DZE3W4CTL5ZR7EIN:ff00212d8c453aaaae644bc6846d4723", "ApproximateFirstReceiveTimestamp": "1652499058144", "ApproximateReceiveCount": "2", "SentTimestamp": "1652490733042" }, "MD5OfMessageAttributes": "f72c1d78100860e00403d849831d4895", "MessageAttributes": { "ERROR_CODE": { "StringValue": "AWS.SimpleQueueService.NonExistentQueue", "DataType": "String" }, "ERROR_MESSAGE": { "StringValue": "The specified queue does not exist for this wsdl version.", "DataType": "String" }, "EXECUTION_ID": { "StringValue": "ad06616e51cdf74a", "DataType": "String" }, "EXHAUSTED_RETRY_CONDITION": { "StringValue": "MaximumEventAgeInSeconds", "DataType": "String" } "IS_PAYLOAD_TRUNCATED": { "StringValue": "false", "DataType": "String" }, "RETRY_ATTEMPTS": { "StringValue": "0", "DataType": "String" }, "SCHEDULED_TIME": { "StringValue": "2022-05-14T01:12:00Z", "DataType": "String" }, "SCHEDULE_ARN": { "StringValue": "arn:aws:scheduler:us-west-2:123456789012:schedule/DLQ-test", "DataType": "String" }, "TARGET_ARN": { "StringValue": "arn:aws:scheduler:::aws-sdk:sqs:sendMessage", "DataType": "String" } } } ] }
Tenga en cuenta los siguientes atributos en caso de en evento de mensajes fallidos para ayudarle a identificar y solucionar los posibles motivos por los que la innovación del destino ha fallado.
-
ERROR_CODE
— Contiene el código de error que el Programador de EventBridge recibe de la API de servicio del destino. En el ejemplo anterior, el código de error devuelto por Amazon SQS esAWS.SimpleQueueService.NonExistentQueue
. Si la programación no puede invocar un destino debido a un problema con el Programador de EventBridge, en su lugar verá el siguiente código de error:AWS.Scheduler.InternalServerError
. -
ERROR_MESSAGE
— Contiene el mensaje de error que el Programador de EventBridge recibe de la API de servicio del destino. En el ejemplo anterior, el mensaje de error devuelto por Amazon SQS esThe specified queue does not exist for this wsdl version
. Si la programación falla debido a un problema con el Programador de EventBridge, en su lugar verá el siguiente mensaje de error:Unexpected error occurred while processing the request
. -
TARGET_ARN
— El ARN del destino que invoca su programación, en el siguiente formato ARN de servicio:arn:aws:scheduler:::aws-sdk:
.service
:apiAction
-
EXHAUSTED_RETRY_CONDITION
— Indica por qué se envió el evento a la DLQ. Este atributo estará presente si el error de la API de destino es un error que se puede volver a intentar y no un error permanente. El atributo puede contener los valoresMaximumRetryAttempts
si el Programador de EventBridge lo envió a la DLQ después de superar el máximo de reintentos que configuró para la programación oMaximumEventAgeInSeconds
si el evento tiene una antigüedad superior a la antigüedad máxima que configuró en la programación y sigue sin entregarse.
En el ejemplo anterior, podemos determinar, basándonos en el código de error y el mensaje de error, que la cola de destino que especificamos para la programación no existe.