

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

# 在 EventBridge 排程器中設定排程的無效字母佇列
<a name="configuring-schedule-dlq"></a>

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

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

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

**Topics**
+ [建立 Amazon SQS 佇列](#configuring-schedule-dlq-create-queue)
+ [設定執行角色許可](#configuring-schedule-dlq-permissions)
+ [指定無效字母佇列](#configuring-schedule-dlq-console)
+ [擷取無效字母事件](#configuring-schedule-dlq-dead-letter-event)

## 建立 Amazon SQS 佇列
<a name="configuring-schedule-dlq-create-queue"></a>

 為排程設定 DLQ 之前，您必須建立標準 Amazon SQS 佇列。如需使用 Amazon SQS 主控台建立佇列的說明，請參閱《Amazon *Simple Queue Service *[開發人員指南》中的建立 Amazon SQS 佇列](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/step-create-queue.html)。

**注意**  
 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 主控台或使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sqs/get-queue-attributes.html#get-queue-attributes](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sqs/get-queue-attributes.html#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。

## 設定執行角色許可
<a name="configuring-schedule-dlq-permissions"></a>

 若要讓 EventBridge 排程器將無效字母事件交付至 Amazon SQS，您的排程執行角色需要下列許可政策。如需將新許可政策連接至排程執行角色的詳細資訊，請參閱[設定執行角色](setting-up.md#setting-up-execution-role)。

------
#### [ JSON ]

****  

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

------

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

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

## 指定無效字母佇列
<a name="configuring-schedule-dlq-console"></a>

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

------
#### [ Console ]

**使用主控台指定 DLQ**

1. 登入 AWS 管理主控台，然後選擇以下連結以開啟 EventBridge 主控台的 EventBridge 排程器區段：https：//[https://console.aws.amazon.com/scheduler/home](https://console.aws.amazon.com/scheduler/home) 

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

1.  在**設定**頁面上，針對**無效字母佇列 (DLQ)**，執行下列其中一項：
   +  選擇**選取我 AWS 帳戶中的 Amazon SQS 佇列做為 DLQ**，然後從下拉式清單中選擇 DLQ 的佇列 ARN。
   +  選擇**將其他 AWS 帳戶中的 Amazon SQS 佇列指定為 DLQ**，然後輸入 DLQ 的佇列 ARN。如果您在另一個 AWS 帳戶中選擇佇列，EventBridge 排程器主控台將無法在下拉式清單中顯示佇列 ARNs。

1.  檢閱您的選擇，然後選擇**建立排程**或**儲存排程**以完成設定 DLQ。

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

------
#### [ AWS CLI ]

**使用 更新現有的排程 AWS CLI**
+  使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/scheduler/update-schedule.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/scheduler/update-schedule.html)命令來更新您的排程。指定您先前建立的 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**
+  使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/scheduler/create-schedule.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/scheduler/create-schedule.html)命令來建立排程。將所有預留位置值取代為您的資訊。

  ```
  $ 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 的無效字母事件。

## 擷取無效字母事件
<a name="configuring-schedule-dlq-dead-letter-event"></a>

 使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sqs/receive-message.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/sqs/receive-message.html)命令，如下所示，從 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 排程器在超過您為排程設定的重試次數上限之後將其傳送至 DLQ`MaximumEventAgeInSeconds`，則 屬性可以包含這些值，或者，如果事件比您在排程上設定的存留期上限更舊，且仍然無法交付，則 屬性可以包含這些值。

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

**注意**  
如果您使用[通用目標](managing-targets-universal.md)，請注意 EventBridge 排程器不會在排程建立時間驗證`Input`欄位的內容。具有無效輸入參數的排程將成功建立，但每次調用都會失敗。DLQ 訊息將包含來自目標服務的錯誤代碼和訊息，這可協助您識別無效的參數。如需詳細資訊，請參閱[無效的通用目標輸入組態](troubleshooting.md#troubleshooting-usi-target-input)。