本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用無效字母佇列來處理 中未交付的事件 EventBridge
為了避免在事件無法交付至目標後遺失事件,您可以設定無效字母佇列 (DLQ),並將所有失敗的事件傳送給該佇列,以便稍後處理。
EventBridge DLQs 是標準 Amazon SQS佇列, EventBridge 用於儲存無法成功交付至目標的事件。當您建立規則並新增目標時,您可以選擇是否使用 DLQ。當您設定 時DLQ,您可以保留任何未成功交付的事件。然後,您可以解決導致事件交付失敗的問題,並在稍後處理事件。
當您DLQ為規則的目標設定 時, 會將呼叫失敗的事件 EventBridge 傳送至選取的 Amazon SQS佇列。
事件錯誤以不同的方式進行處理。某些事件會捨棄或傳送至 ,DLQ而不會嘗試任何重試。例如,如果遺失目標的許可或目標資源不再存在所導致的錯誤,在採取動作來解決基礎問題之前,不會重試。 如果您已指定這些事件DLQ, 會直接將這些事件 EventBridge 傳送至目標 。
當事件交付失敗時, 會將事件 EventBridge 發佈至 Amazon CloudWatch 指標,指出目標invocation
失敗。如果您使用 DLQ,其他指標會傳送至 , CloudWatch包括 InvocationsSentToDLQ
和 InvocationsFailedToBeSentToDLQ
。
如果您使用 AWS KMS 客戶受管金鑰 加密靜態事件,也可以DLQs指定 事件匯流排。如需詳細資訊,請參閱使用無效字母佇列擷取 中的加密事件錯誤 EventBridge。
您 中的每個訊息DLQ都會包含下列自訂屬性:
RULE_ARN
TARGET_ARN
ERROR_CODE
以下是 DLQ可以傳回的錯誤碼範例:
-
CONNECTION_FAILURE
-
CROSS_ACCOUNT_INGESTION_FAILED
-
CROSS_REGION_INGESTION_FAILED
-
ERROR_FROM_TARGET
-
EVENTS_IN_BATCH_REQUEST_REJECTED
-
EVENTS_IN_BATCH_REQUEST_REJECTED
-
FAILED_TO_ASSUME_ROLE
-
INTERNAL_ERROR
-
INVALID_JSON
-
INVALID_PARAMETER
-
NO_PERMISSIONS
-
NO_RESOURCE
-
RESOURCE_ALREADY_EXISTS
-
RESOURCE_LIMIT_EXCEEDED
-
RESOURCE_MODIFICATION_COLLISION
-
SDK_CLIENT_ERROR
-
THIRD_ACCOUNT_HOP_DETECTED
-
THIRD_REGION_HOP_DETECTED
-
THROTTLING
-
TIMEOUT
-
TRANSIENT_ASSUME_ROLE
-
UNKNOWN
-
ERROR_MESSAGE
EXHAUSTED_RETRY_CONDITION
可能回傳以下條件:
-
MaximumRetryAttempts
-
MaximumEventAgeInSeconds
-
RETRY_ATTEMPTS
下列影片會逐一說明 的設定DLQs:
使用無效字母佇列的考量
DLQ 為 設定 時,請考慮下列事項 EventBridge。
-
僅支援標準佇列。您無法在 DLQ中使用 的FIFO佇列 EventBridge。
-
EventBridge 訊息中包含事件中繼資料和訊息屬性,包括:錯誤碼、錯誤訊息、耗盡重試條件、規則 ARN、重試嘗試和目標 ARN。您可以使用這些值來識別事件和失敗原因。
-
DLQs 相同帳戶中的 許可:
-
如果您使用主控台將目標新增至規則,並且選擇相同帳戶中的 Amazon SQS佇列,則會將授予佇列 EventBridge 存取權的資源型政策連接至佇列。
-
如果您使用
PutTargets
EventBridge API的操作來新增或更新規則的目標,並選擇相同帳戶中的 Amazon SQS佇列,則必須手動將許可授予選取的佇列。如需進一步了解,請參閱 將許可授予無效字母佇列。
-
-
使用來自不同 AWS 帳戶的 Amazon SQS佇列的許可。
-
如果您從主控台建立規則,則不會顯示來自其他帳戶的佇列供您選取。您必須為其他帳戶中ARN的佇列提供 ,然後手動連接資源型政策以授予佇列許可。如需進一步了解,請參閱 將許可授予無效字母佇列。
-
如果您使用 建立規則API,則必須手動將資源型政策連接到另一個用作無效字母SQS佇列之帳戶中的佇列。如需進一步了解,請參閱 將許可授予無效字母佇列。
-
-
您使用的 Amazon SQS佇列必須位於您建立規則的相同區域中。
將許可授予無效字母佇列
若要成功將事件交付至佇列, EventBridge 必須有許可才能執行此操作。當您DLQ使用 EventBridge 主控台指定 時,會自動新增許可。其中包含:
當您DLQ為規則的目標設定 時。
當您DLQ為已指定 EventBridge 使用 AWS KMS 客戶受管金鑰 加密靜態事件的事件匯流排設定 時。
如需詳細資訊,請參閱使用無效字母佇列擷取 中的加密事件錯誤 EventBridge。
如果您DLQ使用 指定 API,或使用不同 AWS 帳戶中的佇列,則必須手動建立以資源為基礎的政策,以授予所需的許可,然後將其連接至佇列。
目標無效字母佇列許可範例
下列資源型政策示範如何授予 將事件訊息 EventBridge 傳送至 Amazon SQS佇列的必要許可。政策範例授予 EventBridge 服務許可,以使用 SendMessage
操作將訊息傳送至名為 "MyEventDLQ" 的佇列。佇列必須位於 AWS 帳戶 123456789012 的 us-west-2 區域中。Condition
陳述式僅允許來自名為 "MyTestRule" 的規則的請求,該規則是在 AWS 帳戶 123456789012 的 us-west-2 區域中建立的。
{ "Sid": "Dead-letter queue permissions", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:
us-west-2:
123456789012
:MyEventDLQ
", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:events:us-west-2
:123456789012
:rule/MyTestRule
" } } }
事件匯流排無效字母佇列許可範例
下列資源型政策示範如何在DLQ為事件匯流排指定 時授予所需的許可。在此情況下, 會aws:SourceArn
指定將事件傳送至 的事件匯流排ARN的 DLQ。在此範例中,佇列必須與事件匯流排位於相同的區域。
{ "Sid": "Dead-letter queue permissions", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sqs:SendMessage", "Resource": "arn:aws:sqs:
region
:account-id
:queue-name
", "Condition": { "ArnEquals": { "aws:SourceArn": "arn:aws:events:region
:account-id
:event-bus/event-bus-arn
" } } }
若要將政策連接至佇列,請使用 Amazon SQS主控台、開啟佇列,然後選擇存取政策並編輯政策。您也可以使用 AWS CLI。如需進一步了解,請參閱 Amazon SQS 許可。
如何從無效字母佇列重新傳送事件
您可以透過DLQ兩種方式將訊息移出 :
-
避免寫入 Amazon SQS消費者邏輯 – 將 設定為 Lambda 函數DLQ的事件來源,以耗盡您的 DLQ。
-
寫入 Amazon SQS消費者邏輯 – 使用 Amazon SQS API AWS SDK、 或 AWS CLI 來撰寫自訂消費者邏輯,用於輪詢、處理和刪除 中的訊息DLQ。