本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定排程的無效字母佇列
亞馬遜 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-attributes
$
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
在下一節中,您將會AWS CLI使用從 DLQ 接收無效字母事件。
擷取無效字母事件
使用receive-message
--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
,如果事件早於您在排程上設定的保留天數上限且仍無法傳遞,則屬性可以包含這些值。
在前面的例子中,我們可以根據錯誤代碼和錯誤消息來確定我們為排程指定的目標隊列不存在。