Configurazione di una coda DLQ per una pianificazione - EventBridge Pianificatore

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configurazione di una coda DLQ per una pianificazione

Amazon EventBridge Scheduler supporta le code di lettere morte (DLQ) utilizzando Amazon Simple Queue Service. Quando una pianificazione non riesce a richiamare la destinazione, EventBridge Scheduler fornisce un payload JSON contenente i dettagli della chiamata e qualsiasi risposta ricevuta dalla destinazione a una coda standard Amazon SQS specificata.

L'argomento seguente si riferisce a questo JSON come a un evento lettera morta. Un evento senza scadenza ti consente di risolvere i problemi relativi alla pianificazione o agli obiettivi. Se configuri un criterio di ripetizione per la tua EventBridge pianificazione, Scheduler invia l'evento senza scadenza, esaurendo il numero massimo di tentativi che hai impostato.

I seguenti argomenti descrivono come configurare una coda Amazon SQS come DLQ per la tua pianificazione, impostare le autorizzazioni necessarie a EventBridge Scheduler per recapitare messaggi ad Amazon SQS e ricevere eventi senza risposta dal DLQ.

Creazione di una coda Amazon SQS

Prima di configurare un DLQ per la tua pianificazione, devi creare una coda Amazon SQS standard. Per istruzioni sulla creazione di una coda utilizzando la console Amazon SQS, consulta Creazione di una coda Amazon SQS nella Guida per sviluppatori di Amazon Simple Queue Service.

Nota

EventBridge Scheduler non supporta l'utilizzo di una coda FIFO come DLQ della pianificazione.

Usa il seguenteAWS CLI comando per creare una coda standard.

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

In caso di esito positivo, sarà visualizzatoQueueURL nell'output.

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

Dopo aver creato la coda, annota l'ARN della coda. L'ARN è necessario quando si specifica un DLQ per la EventBridge pianificazione di Scheduler. Puoi trovare l'ARN della coda nella console Amazon SQS o usando il get-queue-attributesAWS CLIcomando.

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

In caso di successo, vedrai l'ARN della coda nell'output.

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

Nella sezione successiva, aggiungerai le autorizzazioni necessarie al tuo ruolo di esecuzione della pianificazione per consentire a EventBridge Scheduler di inviare eventi senza risposta ad Amazon SQS.

Come configurare le autorizzazioni per il ruolo di esecuzione

Per consentire a EventBridge Scheduler di inviare eventi senza scadenza ad Amazon SQS, il tuo ruolo di esecuzione della pianificazione richiede la seguente politica di autorizzazione. Per ulteriori informazioni sull'aggiunta di una nuova politica di autorizzazione al ruolo di esecuzione della pianificazione, consulta Configurazione del ruolo di esecuzione.

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

È possibile che al ruolo di esecuzione della pianificazione siano già associate le autorizzazioni necessarie se si utilizza EventBridge Scheduler per richiamare un target API Amazon SQS.

Nella sezione successiva, potrai utilizzare la console di EventBridge pianificazione e configurare una funzione in

Come configurare una coda DLQ

Per specificare un DLQ, usa la console EventBridge Scheduler oAWS CLI per aggiornare una pianificazione esistente o creane una nuova.

Console
Per specificare un DLQ utilizzando la console
  1. Accedi aAWS Management Console, quindi scegli il seguente link per aprire la sezione EventBridge Scheduler della EventBridge console: https://console.aws.amazon.com/scheduler/home

  2. Nella console EventBridge Scheduler, crea una nuova pianificazione o scegli una pianificazione esistente dall'elenco di pianificazioni da modificare.

  3. Nella pagina Impostazioni, per Dead-letter queue (DLQ), effettuate una delle seguenti operazioni:

    • Scegli Seleziona una coda Amazon SQS nel mioAWS account come DLQ, quindi scegli l'ARN della coda per il tuo DLQ dall'elenco a discesa.

    • Scegli Specifica una coda Amazon SQS in altriAWS account come DLQ, quindi inserisci l'ARN della coda per il tuo DLQ. Se scegli una coda in un altroAWS account, la console di EventBridge pianificazione non sarà in grado di visualizzare gli ARN della coda in un elenco a discesa.

  4. Rivedi le selezioni, quindi scegli Crea pianificazione o Salva pianificazione per completare la configurazione di un DLQ.

  5. (Facoltativo) Per visualizzare i dettagli DLQ di una pianificazione, scegli il nome della pianificazione dall'elenco, quindi scegli la scheda Coda con lettere non consentite nella pagina dei dettagli della pianificazione.

AWS CLI
Per aggiornare una pianificazione esistente utilizzando ilAWS CLI
  • Usa il update-schedulecomando per aggiornare la tua pianificazione. Specifica la coda Amazon SQS che hai creato in precedenza come DLQ. Specifica il ruolo IAM ARN a cui hai collegato le autorizzazioni Amazon SQS richieste come ruolo di esecuzione. Sostituisci tutti gli altri valori segnaposto con le tue informazioni.

    $ 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"}'
Per creare una nuova pianificazione con un DLQ utilizzando ilAWS CLI
  • Usa il create-schedulecomando per creare una pianificazione. Sostituisci tutti i valori segnaposto con le tue informazioni.

    $ 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"}'

Nella sezione successiva, sarà utilizzatoAWS CLI per ricevere una funzione in

Come recuperare l'evento DLQ

Utilizzate il receive-messagecomando, come illustrato di seguito, per recuperare un evento non valido dal DLQ. È possibile impostare il numero di messaggi da recuperare utilizzando l'--max-number-of-messagesattributo.

$ aws sqs receive-message --queue-url your-dlq-url --attribute-names All --message-attribute-names All --max-number-of-messages 1

In caso di esito positivo, sarà visualizzato un output simile al seguente.

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

Nota i seguenti attributi nell'evento «lettera morta» per aiutarti a identificare e risolvere i possibili motivi per cui l'inovcazione di target non è riuscita.

  • ERROR_CODE— Contiene il codice di errore che EventBridge Scheduler riceve dall'API di servizio del target. Nell'esempio precedente, il codice di errore restituito da Amazon SQS èAWS.SimpleQueueService.NonExistentQueue. Se la pianificazione non riesce a richiamare un target a causa di un problema con EventBridge Scheduler, vedrai invece il seguente codice di errore:AWS.Scheduler.InternalServerError.

  • ERROR_MESSAGE— Contiene il messaggio di errore che EventBridge Scheduler riceve dall'API di servizio del target. Nell'esempio precedente, il messaggio di errore restituito da Amazon SQS èThe specified queue does not exist for this wsdl version. Se la pianificazione fallisce a causa di un problema con EventBridge Scheduler, verrà invece visualizzato il seguente messaggio di errore:Unexpected error occurred while processing the request.

  • TARGET_ARN— L'ARN del target richiamato dalla pianificazione, nel seguente formato ARN di servizio:arn:aws:scheduler:::aws-sdk:service:apiAction.

  • EXHAUSTED_RETRY_CONDITION— Indica il motivo per cui l'evento è stato consegnato al DLQ. Questo attributo sarà presente se l'errore dell'API di destinazione è un errore ripetibile e non un errore permanente. L'attributo può contenere i valoriMaximumRetryAttempts se EventBridge Scheduler lo ha inviato al DLQ dopo aver superato il numero massimo di tentativi configurati per la pianificazione oMaximumEventAgeInSeconds se l'evento è più vecchio dell'età massima configurata nella pianificazione e non riesce ancora a consegnare.

Nell'esempio precedente, possiamo determinare, in base al codice di errore e al messaggio di errore, che la coda di destinazione che abbiamo specificato per la pianificazione non esiste.