Global outage event
If you're experiencing issues with your AWS services, then please refer to the AWS Health Dashboard. You can find the overall status of ongoing outages, the health of AWS services, and the latest updates from AWS engineers.
如何對 EventBridge 規則的問題進行疑難排解?
我的 Amazon EventBridge 規則不會傳送到目標。
解決方法
**注意:**以下疑難排解步驟適用於所有 EventBridge 目標類型。如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
檢查您的組態
若要確認您已正確設定 EventBridge 規則,請驗證以下設定。
- 規則設為「啟用」,而非「停用」。
- 您的事件模式使用有效的 JSON 語法。
- 目標的 EventBridge 角色具有必要的 AWS Identity and Access Management (IAM) 權限。
- 目標存在,且與 EventBridge 規則位於相同的 AWS 區域。
**注意:**若要設定跨區域事件,請參閱在 Amazon EventBridge 中的 AWS 區域之間傳送和接收事件。 - 資源型政策允許 EventBridge 調用目標。
- 事件來源會將事件發佈到正確的區域。
確認事件已發生
注意:AWS 全域服務只在 us-east-1 區域可用。如果您在其他區域中為這些服務建立規則,則這些服務不會將事件轉送到 EventBridge。因此,EventBridge 不會執行該規則。
檢查 CloudWatch 指標
若要找出問題原因,請在 AWS/Events 命名空間中的 Amazon CloudWatch 主控台檢查以下 EventBridge 指標:
- 檢查 TriggeredRules,確認 EventBridge 是否執行該規則。如果值為 0,請檢查您的 API 呼叫,以驗證事件已發生。您可以使用此指標的時間戳記來檢查事件發生的時間。
- 檢查 Invocations,確認 EventBridge 是否調用目標。如果 TriggeredRules 有值,但 Invocations 沒有值,則規則未調用目標。若要解決此問題,請檢查規則的目標組態。
- 檢查 FailedInvocations,確認目標調用是否失敗。如果 Invocations 有值,而且 FailedInvocations 也有值,則問題發生在目標端。
檢查您組態的 API 呼叫
檢查 CloudTrail 事件歷史記錄,確認事件 API 呼叫在預期時間發生。另外,請確認事件符合事件模式中的所有欄位。
確認事件符合規則事件模式
若要讓 EventBridge 執行規則,事件模式中的所有欄位都必須符合該規則的事件。使用 EventBridge 沙盒工具測試事件是否符合特定事件模式欄位。最佳實務是先使用欄位較少的事件模式開始測試。
事件模式範例:
{ "source": ["aws.s3"]}
如果該事件模式成功符合,請增加事件模式的複雜度。每新增一個欄位,都會縮小事件模式測試的範圍。
如果您不知道事件結構描述,請暫時附加 Amazon CloudWatch Logs 群組目標或 Amazon Simple Notification Service (Amazon SNS) 主題。檢閱 EventBridge 傳送到 CloudWatch Logs group target 或 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 呼叫清單。此模式會針對特定的 Amazon S3 儲存貯體比對以 feature1 或 feature2 開頭的物件 API 呼叫。
您也可以使用 TestEventPattern API 來檢查事件是否符合事件模式。
根據發生事件的 AWS 服務,使用以下常見事件模式。
Amazon Elastic Compute Cloud (Amazon EC2) 執行個體狀態變更:
{ "source": ["aws.ec2"], "detail-type": ["EC2 Instance State-change Notification"], "detail": { "state": ["running", "stopped"] } }
Amazon Relational Database Service (Amazon RDS) 容錯移轉或失敗:
{ "source": ["aws.rds"], "detail-type": ["RDS DB Instance Event"], "detail": { "EventCategories": ["failover", "failure"] } }
AWS Step Functions 執行失敗、逾時或已取消:
{ "source": ["aws.states"], "detail-type": ["Step Functions Execution Status Change"], "detail": { "status": ["FAILED", "TIMED_OUT", "ABORTED"], "stateMachineArn": ["arn:aws:states:us-east-1:123456789012:stateMachine:MyStateMachine"] } }
檢查事件模式語法
確認您的事件模式符合以下語法:
- 對所有欄位名稱或值使用引號。
- 使用陣列標記法,而不是等號。例如,使用 "state": ["running"],不要使用 "state": "running"。
- 驗證 detail 物件中的巢狀層級對於您的組態是否正確。
- 確認所有欄位皆相符。事件模式使用的是 AND 邏輯,而非 OR。
- 請根據事件結構描述,確認您正確使用萬用字元。
確認目標已成功處理事件
疑難排解失敗的調用
如果 CloudWatch 主控台中的 FailedInvocations 有資料點,請檢查目標組態和權限是否有問題。
EventBridge 必須具備調用目標的權限。當您使用 EventBridge 建立規則時,主控台會自動將所需權限新增到相關資源。不過,如果您使用 AWS SDK、AWS CLI 或 AWS CloudFormation 部署規則,則您必須設定權限。您可以使用已附加所需 EventBridge 政策的 IAM 角色或資源型政策。
設定無效字母佇列
如果調用失敗,則 EventBridge 會自動以指數退避方式重試。
若要找出 FailedInvocations 的原因,請完成以下步驟,將 Amazon Simple Queue Service (Amazon SQS) 無效字母佇列與目標建立關聯:
- 開啟 EventBridge console (EventBridge 主控台)。
- 選擇 Rules (規則),然後選擇您的規則。
- 在 Targets (目標) 下,選取目標,然後選擇 Edit (編輯)。
- 展開 Additional settings (其他設定),然後設定 Maximum age of event (事件的最長存在時間) 和 Retry attempts (重試次數) 值。
**注意:**EventBridge 只有在事件超過事件最長存在時間和重試次數上限後,才會將事件傳送到無效字母佇列。根據預設,這些值設為最大值 24 小時和 185 次重試。 - 在 Dead-letter queue (無效字母佇列) 下,選取同一個或不同 AWS 帳戶中的 Amazon SQS 佇列。然後,選擇在 EventBridge 完成重試事件後,用於擷取失敗事件的 SQS 佇列。
**注意:**如果您沒有現有佇列,請先建立 SQS 佇列。 - 選擇 Next (下一步) 或 Update rule (更新規則) 以儲存您的變更。
**注意:**如果沒有任何 FailedInvocations 資料點,則 EventBridge 已成功將事件傳遞至目標,問題出在目標。例如,AWS Lambda 目標在執行時可能遇到錯誤或限流。若要疑難排解這些問題,請檢查目標的 CloudWatch 指標和日誌。
使用無效字母佇列疑難排解失敗的調用
如果規則有任何失敗的調用,則無效字母佇列會記錄錯誤訊息。
若要檢閱錯誤,請完成以下步驟:
- 開啟 Amazon SQS console (Amazon SQS 主控台)。
- 選擇 Queues (佇列),然後選取您的無效字母佇列。
- 選擇 Send and receive messages (傳送和接收訊息)。
- 選擇 Poll for messages (擷取訊息)。
- 從清單中選取錯誤訊息。
- 在 Attributes (屬性) 下,檢查錯誤詳細資料。
以下範例訊息顯示 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" },
相關資訊
為什麼我的 EventBridge 規則沒有調用我的 AWS Lambda 函式?
- 語言
- 中文 (繁體)

相關內容
- 已提問 2 年前
- 已提問 3 年前
- 已提問 1 年前
- 已提問 1 年前