在 EventBridge 排程器中設定排程的無效字母佇列 - EventBridge 排程器

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 EventBridge 排程器中設定排程的無效字母佇列

Amazon EventBridge 排程器支援使用 Amazon Simple Queue Service 的無效字母佇列 (DLQ)。當排程無法調用其目標時,EventBridge 排程器會將包含調用詳細資訊和從目標接收的任何回應的 JSON 承載交付至您指定的 Amazon SQS 標準佇列。

下列主題將此 JSON 稱為無效字母事件。無效字母事件可讓您對排程或目標的問題進行故障診斷。如果您為排程設定重試政策,EventBridge 排程器會交付已耗盡所設定重試次數上限的無效字母事件。

下列主題說明如何將 Amazon SQS 佇列設定為排程的 DLQ、設定 EventBridge 排程器傳遞訊息至 Amazon SQS 所需的許可,以及從 DLQ 接收無效字母事件。

建立 Amazon SQS 佇列

為排程設定 DLQ 之前,您必須建立標準 Amazon SQS 佇列。如需使用 Amazon SQS 主控台建立佇列的指示,請參閱《Amazon Simple Queue Service 開發人員指南》中的建立 Amazon SQS 佇列

注意

EventBridge 排程器不支援使用 FIFO 佇列做為排程的 DLQ。

使用下列 AWS CLI 命令來建立標準佇列。

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

如果成功,您會在輸出QueueURL中看到 。

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

建立佇列之後,請記下佇列 ARN。當您為 EventBridge 排程器排程指定 DLQ 時,將需要 ARN。您可以在 Amazon SQS 主控台或使用 get-queue-attributes AWS CLI 命令來尋找佇列 ARN。

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

如果成功,您會在輸出中看到佇列 ARN。

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

在下一節中,您將新增必要的許可到您的排程執行角色,以允許 EventBridge 排程器將無效字母事件交付至 Amazon SQS。

設定執行角色許可

若要讓 EventBridge 排程器將無效字母事件交付至 Amazon SQS,您的排程執行角色需要下列許可政策。如需將新許可政策連接至排程執行角色的詳細資訊,請參閱設定執行角色

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

如果您使用 EventBridge 排程器叫用 Amazon SQS API 目標,您的排程執行角色可能已連接必要的許可。

在下一節中,您將使用 EventBridge 排程器主控台,並為您的排程指定 DLQ。

指定無效字母佇列

若要指定 DLQ,請使用 EventBridge 排程器主控台或 AWS CLI 來更新現有排程,或建立新的排程。

Console
使用主控台指定 DLQ
  1. 登入 AWS 管理主控台,然後選擇以下連結以開啟 EventBridge 主控台的 EventBridge 排程器區段:https://https://console.aws.amazon.com/scheduler/home

  2. 在 EventBridge 排程器主控台上,建立新的排程,或從要編輯的排程清單中選擇現有的排程。

  3. 設定頁面上,針對無效字母佇列 (DLQ),執行下列其中一項操作:

    • 選擇選取我 AWS 帳戶中的 Amazon SQS 佇列做為 DLQ,然後從下拉式清單中選擇 DLQ 的佇列 ARN。

    • 選擇將其他 AWS 帳戶中的 Amazon SQS 佇列指定為 DLQ,然後輸入 DLQ 的佇列 ARN。如果您在另一個 AWS 帳戶中選擇佇列,EventBridge 排程器主控台將無法在下拉式清單中顯示佇列 ARNs。

  4. 檢閱您的選擇,然後選擇建立排程儲存排程以完成設定 DLQ。

  5. (選用) 若要檢視排程的 DLQ 詳細資訊,請從清單中選擇排程的名稱,然後選擇排程詳細資訊頁面上的無效字母佇列索引標籤。

AWS CLI
使用 更新現有排程 AWS CLI
  • 使用 update-schedule命令來更新您的排程。指定您先前建立的 Amazon SQS 佇列做為 DLQ。指定您連接必要 Amazon SQS 許可的 IAM 角色 ARN 做為執行角色。將所有其他預留位置值取代為您的資訊。

    $ 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"}'
使用 建立具有 DLQ 的新排程 AWS CLI
  • 使用 create-schedule命令來建立排程。將所有預留位置值取代為您的資訊。

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

在下一節中,您將使用 AWS CLI 從 DLQ 接收無效字母事件。

擷取無效字母事件

使用 receive-message命令,如下所示,從 DLQ 擷取無效字母事件。您可以使用 --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

如果成功,您會看到類似以下的輸出。

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

在無效字母事件中記下下列屬性,以協助您識別目標排斥失敗的可能原因並進行故障診斷。

  • ERROR_CODE – 包含 EventBridge 排程器從目標服務 API 收到的錯誤代碼。在上述範例中,Amazon SQS 傳回的錯誤碼為 AWS.SimpleQueueService.NonExistentQueue。如果排程因為 EventBridge 排程器問題而無法叫用目標,您將改為看到下列錯誤碼:AWS.Scheduler.InternalServerError

  • ERROR_MESSAGE – 包含 EventBridge 排程器從目標服務 API 收到的錯誤訊息。在上述範例中,Amazon SQS 傳回的錯誤訊息為 The specified queue does not exist for this wsdl version。如果排程因 EventBridge 排程器問題而失敗,您將改為看到下列錯誤訊息:Unexpected error occurred while processing the request

  • TARGET_ARN – 您的排程調用的目標 ARN,採用下列服務 ARN 格式:arn:aws:scheduler:::aws-sdk:service:apiAction

  • EXHAUSTED_RETRY_CONDITION – 指出將事件交付至 DLQ 的原因。如果目標 API 的錯誤是可重試的錯誤,而不是永久錯誤,則會出現此屬性。MaximumRetryAttempts 如果 EventBridge 排程器在超過您為排程設定的重試次數上限之後將其傳送至 DLQMaximumEventAgeInSeconds,則 屬性可以包含這些值,或者,如果事件比您在排程上設定的存留期上限更舊,且仍然無法交付,則 屬性可以包含這些值。

在上述範例中,我們可以根據錯誤代碼和錯誤訊息,判斷我們為排程指定的目標佇列不存在。