

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

# 重試政策和無效字母佇列
<a name="eb-custom-bus-retry"></a>

當目標呼叫失敗時，EventBridge 會重試，直到`RetryPolicy`達到 中的兩個限制之一，預設為 5 次嘗試或 300 秒，然後將記錄寫入 中的 Amazon SQS 佇列`OnFailureConfiguration.Arn`。當您建立訂閱者時同時設定兩者：沒有無效字母佇列，會捨棄耗盡其重試的事件，而唯一的追蹤是 `EventsDropped` 指標。

## 重試限制
<a name="eb-custom-bus-retry-policy"></a>

交付會在最先達到限制時停止。


| 限制 | 範圍 | 預設 | 
| --- | --- | --- | 
| MaxRetryAttempts | 0 到 185 | 5 | 
| MaxEventAgeInSeconds | 60 到 86，400 | 300 | 

預設值短於自訂事件匯流排 - Classic 目標的 24 小時和 185 次嘗試。依賴一天重試的遷移設計必須明確`MaxEventAgeInSeconds`設定為 86，400；否則，在超過 5 分鐘的目標中斷期間失敗的事件會移至無效字母佇列，而不是延遲交付。對於 FIFO 訂閱者，失敗的事件只要重試，就會封鎖其群組中的後續事件，因此長重試時段會交易延遲的順序。

## 無效字母記錄
<a name="eb-custom-bus-retry-record"></a>

記錄是 JSON 文件，而不是事件。下列範例顯示兩個事件在一個批次中一起失敗的記錄。

```
{
    "version": "1.0",
    "busArn": "arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef",
    "subscriberArn": "arn:aws:events:us-east-1:111122223333:subscriber/large-orders/EXAMPLEabcdef1234567890",
    "targetArn": "arn:aws:sqs:us-east-1:111122223333:large-orders",
    "errorCode": "ACCESS_DENIED",
    "errorMessage": "The delivery role is not authorized to perform sqs:SendMessage on the target.",
    "exhaustedRetryCondition": "MaximumEventAgeInSeconds",
    "retryAttempts": 4,
    "failedMessages": [
        { "eventId": "a1b2c3d4-...", "eventGroupId": "order-1001", "deduplicationId": null, "timestamp": "2026-09-16T18:40:12Z", "targetRequestId": "..." },
        { "eventId": "e5f6a7b8-...", "eventGroupId": "order-1001", "deduplicationId": null, "timestamp": "2026-09-16T18:40:13Z", "targetRequestId": "..." }
    ]
}
```

到達佇列的每個失敗都會先重試：沒有略過 的交付失敗`RetryPolicy`。EventBridge 會重試 EventBridge 內部的故障，而無限制且永遠不會產生記錄。下表列出記錄可以攜帶的代碼。 `errorMessage` 被截斷為 1，024 個字元。


| `errorCode` | 失敗的項目 | `errorMessage` | 
| --- | --- | --- | 
| CUSTOMER\_VALIDATION | 目標 API 拒絕請求 (4xx 回應）：錯誤值、缺少欄位、內文格式錯誤 | 目標 API 自己的訊息 | 
| ACCESS\_DENIED | EventBridge 無法擔任交付角色、不允許該角色呼叫目標，或目標的 AWS KMS 金鑰拒絕存取 | EventBridge 無法擔任{{角色}}。檢查角色是否存在，且其信任政策允許 EventBridge 服務主體擔任該角色。 或 EventBridge 無法存取{{資源}}。檢查其是否存在，及其政策是否允許 EventBridge 服務主體存取。 | 
| RESOURCE\_NOT\_FOUND | 目標或其 AWS KMS 金鑰不存在 | 無法存取上述訊息或一般訊息 | 
| INPUT\_TRANSFORMATION\_FAILURE | Transformer 或通用目標Input表達式擲出或產生無值 | 表達式錯誤 | 
| THROTTLING | 目標調節了呼叫 | 一般訊息 | 
| EXECUTION\_TIMEOUT | 目標未在 內回應 InvocationTimeoutSeconds | 一般訊息 | 
| REQUEST\_TOO\_LARGE | 請求超過目標的大小限制；較低 MaxBatchSize | 一般訊息 | 
| PARTIAL\_BATCH\_FAILURE | 目標接受批次的一部分並拒絕其餘部分；記錄僅failedMessages列出已拒絕的事件 | 一般訊息 | 
| RESOURCE\_CONFLICT | 目標回報衝突，例如已在使用的名稱 | 一般訊息 | 
| KMS\_INVALID\_STATE | 目標金鑰 AWS KMS 已停用或待刪除 | 一般訊息 | 
| SFN\_TYPE\_NOT\_SUPPORTED | REQUEST\_RESPONSE 與不支援同步執行的標準狀態機器搭配使用 | 一般訊息 | 
| COMPUTE\_EXECUTION\_ERROR | REQUEST\_RESPONSE 函數或執行執行並報告錯誤 | 一般訊息 | 
| INVOCATION\_DEPENDENCY\_INTERNAL | 目標傳回伺服器錯誤 (5xx 回應） | 一般訊息 | 
| LOOP\_DETECTED | 事件或其衍生的事件已通過目標匯流排；請參閱 [迴圈偵測](eb-custom-bus-target-bus.md#eb-custom-bus-target-bus-loops) | 一般訊息 | 
| INTERNAL\_SERVER\_ERROR | EventBridge 內部的失敗，同時進行仍耗盡重試次數的呼叫 | 一般訊息 | 

一般訊息為 *交付失敗。調查時使用此記錄的錯誤代碼和請求 ID，如果失敗仍然存在，請聯絡 AWS Support。*EventBridge 會在傳遞基礎訊息的位置使用它，以公開另一個服務的內部，因此對於那些代碼， `errorCode`和 `targetRequestId`是可運作的事實，以及帶有已傳送請求的`EVENT_DELIVERY_ATTEMPT`日誌記錄。相同的值會做為 Amazon SQS 訊息屬性 (`ERROR_CODE`、`ERROR_MESSAGE`、`SUBSCRIBER_ARN``TARGET_ARN`、`BUS_ARN`、`EXHAUSTED_RETRY_CONDITION`、`RETRY_ATTEMPTS`) 到達，因此消費者可以在其上進行路由，而無需剖析內文。對於 FIFO 訂閱者，請使用 FIFO 佇列做為無效字母佇列；EventBridge `MessageGroupId` 會從事件的 設定每個記錄`EventGroupId`，因此一個群組的記錄會保持順序。

交付角色在佇列`sqs:SendMessage`上需要 。如果沒有它，`OnFailureDestinationFailed`指標會計算無法寫入的每個記錄，並遺失這些事件。

## 從無效字母佇列重新產生事件
<a name="eb-custom-bus-retry-redrive"></a>

佇列會保留記錄，而不是事件，因此您可以透過從匯流排重播事件來重新驅動。事件仍必須在匯流排的保留期間內。

1. 讀取記錄並收集每個 `failedMessages[].eventId`，以及最早和最新的 `timestamp`。

1. 修正原因`errorCode`名稱：角色的政策、目標或表達式。

1. 在具有相同目標和角色的相同匯流排上建立訂閱者、其 `StartingPoint` 為最早時間戳記且其 `EndPoint` 為最新的`POINT_IN_TIME`開始位置，以及識別符的`SYSTEM_METADATA`篩選條件。

1. 當訂閱者交付事件時，請將其刪除並從佇列中刪除記錄。

```
aws eventsv2 create-subscriber \
    --name redrive-2026-09-16 \
    --event-bus-arn arn:aws:events:us-east-1:111122223333:event-busv2/orders/EXAMPLE1234567890abcdef \
    --starting-position POINT_IN_TIME \
    --point-in-time-configuration '{ "PointType": "TIMESTAMP", "StartingPoint": "2026-09-16T18:40:00Z", "EndPoint": "2026-09-16T18:41:00Z" }' \
    --filter-configuration '{ "Filters": [ { "Scope": "SYSTEM_METADATA", "Pattern": "{\"aws:EventId\":[\"a1b2c3d4-...\",\"e5f6a7b8-...\"]}" } ] }' \
    --invoke-configuration '{ "TargetArn": "arn:aws:sqs:us-east-1:111122223333:large-orders", "RoleArn": "arn:aws:iam::111122223333:role/EventBusDeliveryRole" }'
```

重播的事件會隨著 `aws:DeliveryType` 到達`REPLAY`，因此消費者可以從即時流量告訴他們。