Configurando a fila de mensagens mortas de uma agenda no Scheduler EventBridge - EventBridge Agendador

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á.

Configurando a fila de mensagens mortas de uma agenda no Scheduler EventBridge

O Amazon EventBridge Scheduler suporta filas de mensagens mortas () DLQ usando o Amazon Simple Queue Service. Quando um EventBridge agendamento falha em invocar sua meta, o Scheduler entrega uma JSON carga contendo detalhes da invocação e qualquer resposta recebida do destino para uma fila padrão da Amazon SQS que você especificar.

O tópico a seguir se refere a isso JSON como um evento sem saída. Um evento de mensagens não entregues permite que você solucione problemas com seu agendamento ou metas. Se você configurar uma política de repetição para sua agenda, o EventBridge Scheduler entregará o evento de carta morta que ele tem, esgotando o número máximo de novas tentativas que você definiu.

Os tópicos a seguir descrevem como você pode configurar uma SQS fila da Amazon DLQ para sua agenda, configurar as permissões que o EventBridge Agendador precisa para entregar mensagens para a Amazon SQS e receber eventos indiretos do. DLQ

Crie uma SQS fila da Amazon

Antes de configurar uma DLQ para sua programação, você deve criar uma SQS fila padrão da Amazon. Para obter instruções sobre como criar uma fila usando o SQS console da Amazon, consulte Criação de uma SQS fila da Amazon no Guia do desenvolvedor do Amazon Simple Queue Service.

nota

EventBridge O Scheduler não suporta o uso de uma FIFO fila como sua agenda. DLQ

Use o AWS CLI comando a seguir para criar uma fila padrão.

$ aws sqs create-queue --queue-name queue-name

Se o for bem-sucedido, você verá QueueURL no resultado.

{
    "QueueUrl": "https://sqs.us-west-2.amazonaws.com/123456789012/scheduler-dlq-test"
}

Depois de criar a fila, anote a filaARN. Você precisará do ARN quando especificar um DLQ para sua EventBridge programação do Scheduler. Você pode encontrar sua fila ARN no SQS console da Amazon ou usando o get-queue-attributes AWS CLI comando.

$ aws sqs get-queue-attributes --queue-url your-dlq-url --attribute-names QueueArn

Se for bem-sucedido, você verá a fila ARN na saída.

{
    "Attributes": {
        "QueueArn": "arn:aws:sqs:us-west-2:123456789012:scheduler-dlq-test"
    }
}

Na próxima seção, você adicionará as permissões necessárias à sua função de execução do cronograma para permitir que o EventBridge Scheduler entregue eventos sem saída para a Amazon. SQS

Configure as permissões da função de execução

Para permitir que o EventBridge Scheduler entregue eventos com data limite para a AmazonSQS, sua função de execução do cronograma precisa da seguinte política de permissão. Para obter mais informações sobre como anexar uma nova política de permissão à sua função de execução do agendamento, consulte Configurando a função de execução.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sqs:SendMessage" ], "Effect": "Allow", "Resource": "*" } ] }
nota

Sua função de execução do cronograma pode já ter as permissões necessárias anexadas se você usar o EventBridge Scheduler para invocar um alvo da Amazon SQSAPI.

Na próxima seção, você usará o console do EventBridge Scheduler e especificará um DLQ para sua agenda.

Especificar uma fila de mensagens não entregues

Para especificar umDLQ, use o console do EventBridge Scheduler ou o AWS CLI para atualizar um agendamento existente ou criar um novo.

Console
Para especificar um DLQ usando o console
  1. Faça login no e escolha o AWS Management Console link a seguir para abrir a seção EventBridge Agendador do EventBridge console: home https://console.aws.amazon.com/scheduler/

  2. No console do EventBridge Agendador, crie uma nova agenda ou escolha uma agenda existente na sua lista de agendas para editar.

  3. Na página Configurações, para Dead-letter queue (DLQ), faça o seguinte:

    • Escolha Selecionar uma SQS fila da Amazon em minha AWS conta como uma eDLQ, em seguida, escolha a fila ARN para você na DLQ lista suspensa.

    • Escolha Especificar uma SQS fila da Amazon em outras AWS contas como uma eDLQ, em seguida, entre na fila da ARN sua. DLQ Se você escolher uma fila em outra AWS conta, o console do EventBridge Scheduler não poderá exibir a fila ARNs em uma lista suspensa.

  4. Revise suas seleções e escolha Criar agenda ou Salvar agenda para concluir a configuração de uma. DLQ

  5. (Opcional) Para ver DLQ os detalhes de uma agenda, escolha o nome da agenda na lista e, em seguida, escolha a guia Fila de cartas mortas na página de detalhes da programação.

AWS CLI
Para atualizar um cronograma existente usando o AWS CLI
  • Use o comando update-schedule para atualizar sua agenda. Especifique a SQS fila da Amazon que você criou anteriormente como a. DLQ Especifique a IAM função ARN à qual você anexou SQS as permissões necessárias da Amazon como função de execução. Substitua todos os outros valores de espaço reservado por suas informações.

    $ aws scheduler update-schedule --name existing-schedule \ --schedule-expression 'rate(5 minutes)' \ --target '{"DeadLetterConfig": {"Arn": "DLQ_ARN"}, "RoleArn": "ROLE_ARN", "Arn":"QUEUE_ARN", "Input": "Hello world!" }' \ --flexible-time-window '{ "Mode": "OFF"}'
Para criar um novo agendamento DLQ usando o AWS CLI
  • Para criar um agendamento, use o comando create-schedule. Substitua todos os valores de espaço reservado por suas informações.

    $ aws scheduler create-schedule --name new-schedule \ --schedule-expression 'rate(5 minutes)' \ --target '{"DeadLetterConfig": {"Arn": "DLQ_ARN"}, "RoleArn": "ROLE_ARN", "Arn":"QUEUE_ARN", "Input": "Hello world!" }' \ --flexible-time-window '{ "Mode": "OFF"}'

Na próxima seção, você usará o AWS CLI para receber um evento de carta morta do. DLQ

Recuperar o evento de mensagens não entregues

Use o receive-messagecomando, conforme mostrado a seguir, para recuperar um evento de letra morta do. DLQ Você pode definir o número de mensagens a serem recuperadas usando o atributo --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

Se for bem-sucedido, você verá uma saída semelhante à seguinte:

{
    "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"
                }
            }
        }
    ]
}

Observe os atributos a seguir no evento de mensagens não entregues para ajudá-lo a identificar e solucionar possíveis motivos pelos quais a inovação do destino falhou.

  • ERROR_CODE— Contém o código de erro que o EventBridge Scheduler recebe do serviço API do alvo. No exemplo anterior, o código de erro retornado pela Amazon SQS éAWS.SimpleQueueService.NonExistentQueue. Se o agendamento falhar em invocar um alvo devido a um problema com o EventBridge Scheduler, você verá o seguinte código de erro em vez disso:. AWS.Scheduler.InternalServerError

  • ERROR_MESSAGE— Contém a mensagem de erro que o EventBridge Scheduler recebe do serviço API do alvo. No exemplo anterior, a mensagem de erro retornada pela Amazon SQS éThe specified queue does not exist for this wsdl version. Se o agendamento falhar devido a um problema com o EventBridge Scheduler, você verá a seguinte mensagem de erro em vez disso:Unexpected error occurred while processing the request.

  • TARGET_ARN— O ARN alvo que sua agenda invoca, no seguinte ARN formato de serviço:. arn:aws:scheduler:::aws-sdk:service:apiAction

  • EXHAUSTED_RETRY_CONDITION— Indica por que o evento foi entregue aoDLQ. Esse atributo estará presente se o erro do destino API for um erro que pode ser repetido e não permanente. O atributo pode conter os valores MaximumRetryAttempts se o EventBridge Agendador o tiver enviado para o DLQ após exceder o máximo de tentativas configurado para o agendamento ou MaximumEventAgeInSeconds se o evento for maior que a idade máxima que você configurou no agendamento e ainda não está sendo entregue.

No exemplo anterior, podemos determinar, com base no código de erro e na mensagem de erro, que a fila de destino que especificamos para o agendamento não existe.