Configuration de la file d'attente des lettres mortes d'un planning dans le planificateur EventBridge - 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 de la file d'attente des lettres mortes d'un planning dans le planificateur EventBridge

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

La rubrique suivante appelle cela JSON un événement lettre morte. Un événement avec 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 pour votre calendrier, le EventBridge planificateur envoie l'événement lettre morte correspondant au nombre maximal de tentatives que vous avez défini.

Les rubriques suivantes décrivent comment configurer une SQS file d'attente Amazon en fonction de votre calendrier, configurer les autorisations dont le EventBridge planificateur a besoin DLQ pour envoyer des messages à Amazon SQS et recevoir des événements de lettre morte de la part du. DLQ

Création d'une SQS file d'attente Amazon

Avant de configurer un DLQ pour votre planning, vous devez créer une file d'SQSattente Amazon standard. Pour obtenir des instructions sur la création d'une file d'attente à l'aide de la SQS console Amazon, consultez la section Création d'une SQS file d'attente Amazon dans le manuel Amazon Simple Queue Service Developer Guide.

Note

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

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

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

En cas de succès, vous le verrez QueueURL dans le résultat.

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

Après avoir créé la file d'attente, notez la file d'attenteARN. Vous en aurez besoin ARN lorsque vous spécifierez un DLQ pour votre calendrier de EventBridge planificateur. Vous pouvez trouver votre file d'attente ARN dans la SQS console Amazon ou à l'aide de la get-queue-attributes AWS CLI commande.

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

En cas de succès, vous verrez la file d'attente ARN 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 sans réponse à Amazon. SQS

Configurer les autorisations des rôles d'exécution

Pour permettre à EventBridge Scheduler de transmettre des événements sans date limite à AmazonSQS, votre rôle d'exécution du calendrier doit respecter la politique d'autorisation suivante. Pour plus d'informations sur l'attachement d'une nouvelle politique d'autorisation à votre rôle d'exécution de planification, voir 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 de planification dispose peut-être déjà des autorisations requises si vous utilisez EventBridge Scheduler pour appeler une cible Amazon SQSAPI.

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

Spécifier une file d'attente de lettres mortes

Pour spécifier unDLQ, utilisez la console du EventBridge planificateur ou AWS 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 au AWS Management Console, puis cliquez sur le lien suivant pour ouvrir la section EventBridge Planificateur de la EventBridge console : home https://console.aws.amazon.com/scheduler/

  2. Sur la console du EventBridge planificateur, créez un nouveau planning ou choisissez un planning existant dans votre liste de plannings à modifier.

  3. Sur la page Paramètres, pour Dead-letter queue (DLQ), effectuez l'une des opérations suivantes :

    • Choisissez Sélectionnez une SQS file d'attente Amazon dans mon AWS compte en tant que DLQ, puis choisissez la file d'attente qui vous ARN DLQ convient dans la liste déroulante.

    • Choisissez Spécifier une SQS file d'attente Amazon dans d'autres AWS comptes en tant que DLQ, puis entrez la file d'attente ARN pour votreDLQ. Si vous choisissez une file d'attente dans un autre AWS compte, la console du EventBridge planificateur ne pourra pas afficher la file d'attente ARNs dans une liste déroulante.

  4. Passez en revue vos sélections, puis choisissez Créer un calendrier ou Enregistrer le calendrier pour terminer la configuration d'unDLQ.

  5. (Facultatif) Pour consulter les DLQ détails d'un planning, choisissez le nom du planning dans la liste, puis cliquez sur l'onglet File d'attente des lettres mortes sur la page détaillée du planning.

AWS CLI
Pour mettre à jour un calendrier existant à l'aide du AWS CLI
  • Utilisez la update-schedulecommande pour mettre à jour votre planning. Spécifiez la SQS file d'attente Amazon que vous avez créée précédemment en tant queDLQ. Spécifiez le IAM rôle ARN auquel vous avez attaché les SQS autorisations Amazon 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 à l'DLQaide du AWS 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 le AWS CLI pour recevoir un événement lettre morte de la part du. DLQ

Récupérez l'événement « lettre morte »

Utilisez la receive-messagecommande, comme indiqué ci-dessous, pour récupérer un événement contenant une 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

En cas de succès, vous obtiendrez un résultat similaire à 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 de lettre morte pour vous aider à identifier et à résoudre les problèmes pouvant expliquer l'échec de l'appel cible.

  • ERROR_CODE— Contient le code d'erreur que le EventBridge planificateur reçoit du service de la cible. API Dans l'exemple précédent, le code d'erreur renvoyé par Amazon SQS estAWS.SimpleQueueService.NonExistentQueue. Si le calendrier ne parvient pas à invoquer 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 le EventBridge planificateur reçoit du service de la cible. API 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 calendrier échoue en raison d'un problème avec le EventBridge planificateur, le message d'erreur suivant s'affichera à la place :. Unexpected error occurred while processing the request

  • TARGET_ARN— ARN L'objectif invoqué par votre calendrier, dans le ARN format de service suivant :arn:aws:scheduler:::aws-sdk:service:apiAction.

  • EXHAUSTED_RETRY_CONDITION— Indique pourquoi l'événement a été organisé auDLQ. Cet attribut sera présent si l'erreur provenant de la cible API est une erreur réessayable et non une erreur permanente. L'attribut peut contenir les valeurs MaximumRetryAttempts si le EventBridge planificateur l'a envoyé DLQ après avoir dépassé le nombre maximal de tentatives que vous avez configuré pour le calendrierMaximumEventAgeInSeconds, ou si l'événement est antérieur à l'âge maximum que vous avez configuré sur le calendrier et ne parvient toujours pas à se produire.

Dans l'exemple précédent, nous pouvons déterminer, en fonction 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.