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

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

設定排程的無效字母佇列

亞馬遜 EventBridge 排程器使用 Amazon 簡單佇列服務支援無效字母佇列 (DLQ)。當排程無法叫用其目標時,S EventBridge cheduler 會將包含叫用詳細資訊以及從目標接收到的任何回應傳送至您指定的 Amazon SQS 標準佇列的 JSON 承載。

下列主題將此 JSON 稱為無效字母事件。無效字母事件可讓您疑難排解排程或目標的問題。如果您為排程設定重試原則, EventBridge Scheduler 會傳送已耗盡您設定的重試次數上限的無效字母事件。

下列主題說明如何將 Amazon SQS 佇列設定為排程的 DLQ、設定將訊息傳遞至 Amazon SQS 所需的許可 EventBridge 排程器,以及從 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-attributesAWS 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,您的排程執行角色需要下列權限政策。如需有關將新權限原則附加至排程執行角色的詳細資訊,請參閱設定執行角色

{ "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 Management Console,然後選擇下列連結以開啟主 EventBridge 控台的「 EventBridge 排程器」區段: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 Scheduler 主控台將無法在下拉式清單中顯示佇列 ARN。

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

請注意無效字母事件中的下列屬性,以協助您識別和疑難排解目標 inovtion 失敗的可能原因。

  • 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如果 S EventBridge cheduler 在超過您為排程設定的重試嘗試次數上限之後傳送至 DLQ,或者MaximumEventAgeInSeconds,如果事件早於您在排程上設定的保留天數上限且仍無法傳遞,則屬性可以包含這些值。

在前面的例子中,我們可以根據錯誤代碼和錯誤消息來確定我們為排程指定的目標隊列不存在。