Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
如何對 EventBridge 規則的問題進行疑難排解?
我想解決 Amazon EventBridge 規則未觸發目標的問題。
簡短描述
若要解決未觸發目標的 EventBridge 規則,請完成以下步驟:
- 確認相關事件是否已發生。
- 確認事件與規則事件模式相符。
- 確認目標已成功處理事件。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
確認相關事件是否已發生
請執行下列動作:
- 如果 AWS CloudTrail 已擷取事件,請分析 CloudTrail 日誌。驗證 API 呼叫是否在預期時間內發生,並與事件模式中的所有欄位相符。
**注意:**部分 AWS 服務僅在 us-east-1 區域提供。例如,AWS Identity and Access Management (IAM) API 呼叫僅在 us-east-1 AWS 區域發佈。如果您在另一個區域中建立了規則,則這些事件不會轉送到 EventBridge,並且不會觸發該規則。 - EventBridge 主控台提供了包含範例 AWS 和合作夥伴事件的沙盒工具。使用該工具將事件模式與 AWS、合作夥伴和自訂事件進行比對。或者,使用 TestEventPattern API 來確認事件模式與事件之間的比對。
- EventBridge 提供 TriggeredRules 指標來報告成功比對的事件規則。使用 TriggeredRules 指標的時間戳記來查看事件發生的時間。
查看 CloudWatch 指標
若要查看 EventBridge 規則的 Amazon CloudWatch 指標,請完成以下步驟:
- 開啟 CloudWatch console (CloudWatch 主控台)。
- 選取所有指標。
- 選取 AWS/Events 命名空間。
- 為規則選取 TriggeredRules、Invocations 和 FailedInvocations 指標。
**注意:**您可以使用 SUM 統計資料來查看這些指標。
確認事件與規則事件模式相符
若要比對事件,事件模式中的所有欄位必須相符。使用沙盒工具,測試事件與具有數個欄位的事件模式。使用如下的簡單事件模式:
{ "source": ["aws.s3"] }
如果比對成功,請增加事件模式的複雜度。新增至事件模式的每個欄位都會篩選與其相符的事件,並使其比對範圍更為精確。若要取得精確的模式,使用者可以暫時附加 CloudWatch Logs 群組目標或 Amazon Simple Notification Service (Amazon SNS) 主題。此動作會擷取轉送至目標的事件,或隔離目標組態錯誤。這還可確認事件是否已傳遞至目標,以及輸入轉換器是否設定正確。
根據傳遞給目標的事件,重新撰寫模式以符合使用者需求。以下是事件模式範例:
{ "source": [ "aws.s3" ], "detail-type": [ "AWS API Call via CloudTrail" ], "detail": { "eventName": [ "PutObject", "DeleteObject", "DeleteObjects" ], "requestParameters": { "bucketName": [ "123456789012-prod-app1" ], "key": [ { "prefix": "feature1/" }, { "prefix": "feature2/" } ] } } }
**注意:**此模式會將 Amazon Simple Storage Service (Amazon S3) API 呼叫清單,與以 feature1 或 feature2 開頭之物件的特定儲存貯體進行比對。
您可以逐步新增欄位來隔離與事件不符的欄位。
確認目標已成功處理事件
當規則將事件轉送到顯示成功和失敗調用的目標時,調用指標會發佈一個資料點。EventBridge 在永久無法調用目標時,會發佈 FailedInvocations 資料點。此資料點表示目標組態存在問題或權限不足。
EventBridge 必須具有調用目標所需的權限。IAM 角色或資源政策可以授予目標權限。當您使用 EventBridge 建立規則時,主控台會自動將所需的權限新增至相關資源。
**注意:**如果您使用 AWS SDK、AWS Command Line Interface (AWS CLI) 或 AWS CloudFormation 部署規則,請設定權限。
如果沒有任何 FailedInvocations 資料點,則 EventBridge 已成功將事件傳送到目標。但是,目標可能無法正確運作。例如,AWS Lambda 目標在執行或限流時可能會遇到錯誤。如需更多資訊,請查看目標的 CloudWatch 指標和任何相關日誌。
若要確定 FailedInvocations 的原因,請將 Amazon Simple Queue Service (Amazon SQS) 無效字母佇列 (DLQ) 與目標關聯。
若要在目標上設定 DLQ,請完成以下步驟:
- 建立一個 SQS 佇列。
- 選取事件規則,然後選擇 Edit (編輯)。
- 選擇 Targets (目標) 索引標籤,然後選擇 Edit (編輯)。
- 展開要設定重試政策之目標的 Additional settings (其他設定) 索引標籤。
- 在 Dead-letter queue (無效字母佇列) 區段,根據您的 SQS DLQ 是位於同一帳戶還是不同帳戶中,選取相應的選項。
- 選擇選取目前 AWS 帳戶中的一個 Amazon SQS 佇列作為無效字母佇列,然後選取 SQS 佇列的名稱。
- 選擇 Update (更新)。
如果規則調用失敗,則 DLQ 會記錄錯誤訊息。若要查看錯誤,請完成以下步驟:
- 從 SQS 佇列中,選擇 Send and receive (傳送和接收) 訊息。
- 選擇 Poll for messages (輪詢訊息)。
- 選取錯誤訊息,然後前往 Attributes (屬性) 區段。
以下是來自 DLQ 的訊息範例,顯示 EventBridge 沒有調用 Lambda 目標所需的權限:
"MessageAttributes": { "ERROR_CODE": { "StringValue": "NO_PERMISSIONS", "DataType": "String" }, "ERROR_MESSAGE": { "StringValue": "User: events.amazonaws.com is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:us-east-1:123456789012:function:Hello_World because no resource-based policy allows the lambda:InvokeFunction action (Service: AWSLambdaInternal; Status Code: 403; Error Code: AccessDeniedException; Request ID: 6635c4c4-9c54-416e-bc40-ef25bad0aca5; Proxy: null)", "DataType": "String" },
相關資訊
- 語言
- 中文 (繁體)
