Configuration d'une file d'attente lettres mortes pour un calendrier - EventBridge Planificateur

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configuration d'une file d'attente lettres mortes pour un calendrier

Amazon EventBridge Scheduler prend en charge les files d'attente mortes (DLQ) à l'aide Amazon Simple Queue Service. Lorsqu'un calendrier ne parvient pas à appeler sa cible, EventBridge Scheduler envoie une charge utile JSON contenant les détails de l'appel et toute réponse reçue de la cible à une file d'attente standard Amazon SQS que vous spécifiez.

La rubrique suivante fait référence à ce JSON en tant qu'événement lettre morte. Un événement lettre morte vous permet de résoudre les problèmes liés à votre calendrier ou à vos objectifs. Si vous configurez une politique de nouvelles tentatives en fonction de votre calendrier, EventBridge Scheduler envoie l'événement lettre morte correspondant à l'épuisement du nombre maximum de tentatives que vous avez défini.

Les rubriques suivantes décrivent comment configurer une file d'attente Amazon SQS en tant que DLQ adaptée à votre emploi du temps, définir les autorisations dont le EventBridge planificateur a besoin pour envoyer des messages à Amazon SQS et recevoir des événements inactifs provenant du DLQ.

Créez une file d'attente Amazon SQS.

Avant de configurer une DLQ pour votre planning, vous devez créer une file d'attente Amazon SQS standard. Pour obtenir les instructions sur la création d'une file d'attente à l'aide de la console Amazon SQS, veuillez consulter la section Création d'une file d'attente Amazon SQS dans le guide du développeur Amazon Simple Queue Service.

Note

EventBridge Le planificateur ne prend pas en charge l'utilisation d'une file d'attente FIFO comme DLQ de votre calendrier.

Utilisez laAWS CLI commande suivante pour créer une file d'attente standard.

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

Si l'opération aboutit, vous verrez leQueueURL dans la sortie.

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

Après avoir créé la file d'attente, notez l'ARN de la file d'attente. Vous aurez besoin de l'ARN lorsque vous spécifierez un DLQ pour votre planning EventBridge Scheduler. Vous pouvez trouver l'ARN de votre file d'attente dans la console Amazon SQS ou à l'aide de la get-queue-attributesAWS CLIcommande.

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

En cas de succès, vous verrez l'ARN de la file d'attente dans la sortie.

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

Dans la section suivante, vous allez ajouter les autorisations requises à votre rôle d'exécution du planning pour permettre à EventBridge Scheduler de transmettre des événements lettre morte à Amazon SQS.

Configurer les autorisations de rôle d'exécution

Pour permettre à EventBridge Scheduler de transmettre des événements lettre morte à Amazon SQS, votre rôle d'exécution du planning doit respecter la politique d'autorisation suivante. Pour plus d'informations sur l'association d'une nouvelle politique d'autorisation à votre rôle d'exécution du planning, consultez la section Configuration du rôle d'exécution.

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

Votre rôle d'exécution du planning est peut-être déjà associé aux autorisations requises si vous utilisez EventBridge Scheduler pour appeler une cible d'API Amazon SQS.

Dans la section suivante, vous allez utiliser la console du EventBridge planificateur et définir un DLQ pour votre planning.

Spécifier une file d'attente de lettres mortes mortes mortes mortes mortes

Pour spécifier un DLQ, utilisez la console EventBridge Scheduler ouAWS CLI pour mettre à jour un calendrier existant ou en créer un nouveau.

Console
Pour spécifier un DLQ à l'aide de la console
  1. Connectez-vous auAWS Management Console, puis cliquez sur le lien suivant pour ouvrir la section EventBridge Planificateur de EventBridge la console : https://console.aws.amazon.com/scheduler/home

  2. Dans la console du EventBridge planificateur, créez un nouveau calendrier ou choisissez un calendrier existant dans votre liste de programmes à modifier.

  3. Sur la page Paramètres, pour la file d'attente aux lettres mortes (DLQ), effectuez l'une des opérations suivantes :

    • Choisissez Sélectionner une file d'attente Amazon SQS dans monAWS compte en tant que DLQ, puis choisissez l'ARN de file d'attente pour votre DLQ dans la liste déroulante.

    • Choisissez Spécifier une file d'attente Amazon SQS dans d'autresAWS comptes en tant que DLQ, puis saisissez l'ARN de la file d'attente pour votre DLQ. Si vous choisissez une file d'attente dans un autreAWS compte, la console EventBridge Scheduler ne pourra pas afficher les ARN de la file d'attente dans une liste déroulante.

  4. Vérifiez vos sélections, puis choisissez Créer un calendrier ou Enregistrer un calendrier pour terminer la configuration d'un DLQ.

  5. (Facultatif) Pour afficher les détails de la DLQ d'un calendrier, choisissez le nom du calendrier dans la liste, puis choisissez l'onglet File d'attente aux lettres mortes sur la page de détail du calendrier.

AWS CLI
Pour mettre à jour un calendrier existant à l'aide duAWS CLI
  • Utilisez la update-schedulecommande pour mettre à jour votre calendrier. Spécifiez la file d'attente Amazon SQS que vous avez créée précédemment en tant que DLQ. Spécifiez l'ARN du rôle IAM auquel vous avez associé les autorisations Amazon SQS requises en tant que rôle d'exécution. Remplacez toutes les autres valeurs d'espace réservé par vos informations.

    $ 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"}'
Pour créer un nouveau calendrier avec un DLQ à l'aide duAWS CLI
  • Utilisez la create-schedulecommande pour créer un calendrier. Remplacez toutes les valeurs d'espace réservé par vos informations.

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

Dans la section suivante, vous allez utiliser leAWS CLI pour recevoir un événement de lettres mortes de la part du DLQ.

Récupérez l'événement de lettres mortes mortes mortes

Utilisez la receive-messagecommande, comme indiqué ci-dessous, pour récupérer un événement lettre morte dans le DLQ. Vous pouvez définir le nombre de messages à récupérer à l'aide de l'--max-number-of-messagesattribut.

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

Si l'opération aboutit, vous verrez des résultats similaires à ce qui suit.

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

Notez les attributs suivants dans l'événement lettre morte pour vous aider à identifier et à résoudre les causes possibles de l'échec de l'inovcation cible.

  • ERROR_CODE— Contient le code d'erreur que EventBridge Scheduler reçoit de l'API de service de la cible. Dans l'exemple précédent, le code d'erreur renvoyé par Amazon SQS estAWS.SimpleQueueService.NonExistentQueue. Si le calendrier ne parvient pas à appeler une cible en raison d'un problème avec le EventBridge planificateur, le code d'erreur suivant s'affichera à la place :AWS.Scheduler.InternalServerError.

  • ERROR_MESSAGE— Contient le message d'erreur que EventBridge Scheduler reçoit de l'API de service de la cible. Dans l'exemple précédent, le message d'erreur renvoyé par Amazon SQS estThe specified queue does not exist for this wsdl version. Si le planning échoue en raison d'un problème avec EventBridge Scheduler, le message d'erreur suivant s'affichera à la place :Unexpected error occurred while processing the request.

  • TARGET_ARN— L'ARN de la cible invoquée par votre planning, au format ARN de service suivant :arn:aws:scheduler:::aws-sdk:service:apiAction.

  • EXHAUSTED_RETRY_CONDITION— Indique pourquoi l'événement a été transmis au DLQ. Cet attribut sera présent si l'erreur provenant de l'API cible est une erreur réessayable et non une erreur permanente. L'attribut peut contenir les valeursMaximumRetryAttempts si EventBridge Scheduler l'a envoyé au DLQ après avoir dépassé le nombre maximum de tentatives que vous avez configuré pour le calendrierMaximumEventAgeInSeconds, ou si l'événement est antérieur à l'âge maximum que vous avez configuré dans le calendrier et ne parvient toujours pas à être diffusé.

Dans l'exemple précédent, nous pouvons déterminer, sur la base du code d'erreur et du message d'erreur, que la file d'attente cible que nous avons spécifiée pour le planning n'existe pas.