本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon EventBridge 疑難排解
您可以使用本節中的主題來疑難排解 Amazon EventBridge 問題。
提示
若要驗證您的事件模式是否符合預期事件,您可以使用 EventBridge 沙盒來針對範例事件測試事件模式。如需詳細資訊,請參閱使用 EventBridge 沙盒測試事件模式。
我的規則可以運行,但是我的 Lambda 函數未被調用
您的 Lambda 函數可能無法執行的原因之一是您未擁有正確的許可。
檢查 Lambda 函數的許可
-
使用 AWS CLI,對您的 函數和 AWS 區域執行下列命令:
aws lambda get-policy --function-nameMyFunction--regionus-east-1您應該會看到下列輸出。
-
如果您看到以下錯誤訊息。
A client error (ResourceNotFoundException) occurred when calling the GetPolicy operation: The resource you requested does not exist.或者,您有看到輸出,但無法將 events.amazonaws.com 配置為政策中的信任實體,請執行下列命令:
aws lambda add-permission \ --function-nameMyFunction\ --statement-idMyId\ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule -
如果輸出包含
SourceAccount欄位,那麼您需要將其移除。SourceAccount設定會使 EventBridge 無法調用該函數。
注意
如果政策不正確,您也可以在 EventBridge 主控台中,藉由移除它再重新新增到規則來編輯規則。然後,EventBridge 主控台會在目標上設定正確的許可。
如果您使用特定的 Lambda 別名或版本,如下列命令所示,您必須將 --qualifier 參數新增至 aws lambda get-policy 和 aws lambda add-permission 命令。
aws lambda add-permission \ --function-nameMyFunction\ --statement-idMyId\ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule--qualifieralias or version
我剛建立或修改規則,但不符合測試事件
當您變更規則或其目標,連入事件可能不會立即開始或停止比對新的或更新的規則。允許一小段時間來讓變更生效。
如果短時間後事件仍然不相符,請檢查用於規則的 CloudWatch 指標 TriggeredRules、Invocations 和 FailedInvocations。如需有關這些指標的詳細資訊,請參閱監控 Amazon EventBridge。
如果規則旨在符合 AWS 服務的事件,請執行下列其中一項動作:
使用此
TestEventPattern動作可測試規則與測試事件相符的事件模式。如需詳細資訊,請參閱《Amazon EventBridge API 參考》中的 TestEventPattern。使用 EventBridge 主控台
上的沙盒。
我的規則在 ScheduleExpression 中我指定的時間沒有運行
請確定您已設定規則在 UTC+0 時區的排程。如果 ScheduleExpression 正確,請按照 我剛建立或修改規則,但不符合測試事件 中的步驟動作。
我的規則並未在我預期的時間運行
EventBridge 會在您設定的開始時間的一分鐘內執行規則。一旦您建立規則,執行時間的倒數計數將立即開始。
注意
已排程規則具有 guaranteed 意義事件的交付類型,每個預期的時間至少會觸發一次。
您可以使用 cron 表達式在指定的時間調用目標。若要建立在第 0 分鐘每四小時執行一次的規則,請執行下列其中一項:
-
在 EventBridge 主控台中,您可以使用 cron 表達式
0 0/4 * * ? *。 -
使用 AWS CLI,您可以使用表達式
cron(0 0/4 * * ? *)。
例如,若要使用 建立名為 TestRule的規則,每 4 小時執行一次 AWS CLI,請使用下列命令。
aws events put-rule --nameTestRule--schedule-expression 'cron(0 0/4 * * ? *)'
若要每五分鐘執行一次規則,請使用下列 cron 表達式。
aws events put-rule --nameTestRule--schedule-expression 'cron(0/5 * * * ? *)'
使用 Cron 表達式的 EventBridge 規則的最佳解析度為一分鐘。您的排程規則會在此一分鐘內運行,但不會精確地在第 0 秒時觸發。
由於 EventBridge 和目標服務是分散式的,所以從排定的規則執行的時間到目標服務對目標資源執行動作的時間之間,可能會有幾秒鐘的延遲。
我的規則符合 AWS 全域服務 API 呼叫,但未執行
AWS 全球服務;例如 IAM 和 Amazon Route 53 僅適用於美國東部 (維吉尼亞北部) 區域,因此來自全球服務的 AWS API 呼叫事件只能在該區域使用。如需詳細資訊,請參閱來自 AWS 服務的事件。
規則執行時,會忽略與我的規則關聯的 IAM 角色
EventBridge 支援所有目標類型的 IAM 執行角色。如果您規則的 IAM 角色似乎遭到忽略,請確認角色的信任政策允許 events.amazonaws.com 擔任該角色,且許可政策授予目標所需的動作 (例如 lambda:InvokeFunction、 sns:Publish或 sqs:SendMessage)。
對於 Lambda、Amazon SNS 和 Amazon SQS 目標,如果目標上未設定 IAM 執行角色,EventBridge 會回到目標資源上的資源型許可。
請確定您的區域 AWS STS 端點已啟用,以便 EventBridge 可以在擔任您提供的 IAM 角色時使用它們。如需詳細資訊,請參閱《IAM 使用者指南》中的AWS STS 在 AWS 區域中啟用和停用。
我的規則有一個應該匹配資源的事件模式,但沒有事件匹配
中的大多數服務會將冒號 (:) 或斜線 (/) AWS 視為 Amazon Resource Name (ARNs) 中的相同字元,但 EventBridge 在事件模式和規則中使用完全相符。在建立事件模式時,請務必使用正確的 ARN 字元,使這些字元符合要匹配的事件中的 ARN 語法。
有些事件,例如來自 CloudTrail 的 AWS API 呼叫事件,在資源欄位中沒有任何項目。
我的事件交付到目標時發生延遲
EventBridge 交付事件到目標的時間最長為 24 個小時,但您的目標資源受限時例外。第一次嘗試會在事件送達事件串流後立即執行。但是,如果目標服務發生問題,EventBridge 會自動重新排程另一次交付。如果事件到達之後已經過 24 小時,EventBridge 會停止嘗試交付事件,並在 CloudWatch 中發佈 FailedInvocations 指標。建議您設定 DLQ 來儲存無法成功交付至目標的事件。如需詳細資訊,請參閱使用無效字母佇列來處理 EventBridge 中未交付的事件
部分事件從未交付至我的目標
如果 EventBridge 規則的目標受限很長一段時間,EventBridge 可能不會重試傳遞。例如,如果未佈建目標來處理傳入事件流量,且目標服務正在調節代表您提出的要求,則 EventBridge 可能不會重試交付。
在回應一個事件時,規則的運行次數超過一次
在極少數情況下,單一事件或排程時間可運行相同的規則一次以上,或者特定觸發的規則可多次調用相同的目標。
防止無限迴圈
在 EventBridge 中,您可以建立規則,該規則會導致無限迴圈,並且規則會在循環中重複運行。如果您有導致無限迴圈的規則,請將其重新寫入,讓規則採取的動作不符合相同的規則。
例如,如果規則會偵測到 Amazon S3 儲存貯體上的 ACL 已變更,然後執行軟體來將它們變更為新狀態的規則會導致無限迴圈。解決此問題的一種方法是重寫規則,讓其僅匹配處於不良狀態的 ACL。
無限循環可能會快速引發較預期還高的費用。我們建議您使用預測費用,也就是在費用超過您指定的限制時提醒您。如需詳細資訊,請參閱在符合預算的情形下管理成本。
我的事件不會傳送到目標 Amazon SQS 佇列
如果您的 Amazon SQS 佇列已加密,則必須建立客戶管理的 KMS 金鑰,並在 KMS 金鑰政策中包含下列許可區段。如需詳細資訊,請參閱設定 AWS KMS 許可。
{ "Sid": "Allow EventBridge to use the key", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }
我的規則運行,但我沒看到任何訊息發佈到我的 Amazon SNS 主題
案例 1
您需要許可才能將訊息發佈到您的 Amazon SNS 主題中。使用 使用以下命令 AWS CLI,將 us-east-1 取代為您的區域,並使用您的主題 ARN。
aws sns get-topic-attributes --regionus-east-1--topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic"
若要擁有正確的許可,您的策略屬性類似於以下內容。
如果您在原則中看不到具有 Publish 許可的 events.amazonaws.com 情況下,請先複製目前的政策,然後將下列陳述式新增至陳述式清單中。
{\"Sid\":\"Allow_Publish_Events\", \"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"sns:Publish\", \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\"}
然後使用 設定主題屬性 AWS CLI,並使用以下命令。
aws sns set-topic-attributes --regionus-east-1--topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic" --attribute-name Policy --attribute-valueNEW_POLICY_STRING
案例 2
如果您的 SNS 主題已加密,您必須在 KMS 金鑰政策中包含下列區段。
{ "Sid": "Allow EventBridge to use the key", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }
我的 Amazon SNS 主題仍有 EventBridge 的許可,即使我已刪除與 Amazon SNS 主題關聯的規則
當您建立以 Amazon SNS 為目標的規則時,EventBridge 會代表您將許可新增到您的 Amazon SNS 主題。如果您在建立規則之後很快就刪除該規則,EventBridge 可能會無法從您的 Amazon SNS 主題移除許可。如果發生這種情況,您可以透過使用 aws sns set-topic-attributes 命令從該主題移除許可。如需有關傳送事件之資源型許可的詳細資訊,請參閱 將以資源為基礎的政策用於 Amazon EventBridge。
我可以在 EventBridge 中使用哪些 IAM 條件金鑰?
EventBridge 支援 AWS全局條件金鑰 (請參閱《IAM 使用者指南》中的 IAM 和 AWS STS 條件內容金鑰),以及列於 的金鑰在 Amazon EventBridge 中使用 IAM 政策條件。
我要如何知道 EventBridge 規則已損壞?
您可以使用以下警示,在您的 EventBridge 規則失效時通知您。
建立警示以在規則損壞時發出提醒
-
透過 https://console.aws.amazon.com/cloudwatch/
開啟 CloudWatch 主控台。 -
選擇建立警示。在依類別的 CloudWatch 指標窗格中,選擇事件指標。
-
在的指標清單中,選取 FailedInvocations。
-
在圖形上方,選擇統計數據、總和。
-
在期間中選擇一個值,例如 5 分鐘。選擇下一步。
-
在警示閾值之下的名稱中輸入警示的唯一名稱,例如 myFailedRules。在描述中輸入警示的描述,例如規則不會將事件交付至目標。
-
在是 中選擇 >= 和 1。在 for 中輸入 10。
-
在動作下的 每當此警示,選擇狀態為警示。
-
在傳送通知至中選取現有 Amazon SNS 主題或建立新的主題。若要建立新的主題,請選擇新清單。輸入新 Amazon SNS 主題的名稱,例如:myFailedRules。
-
在 Email list (電子郵件清單) 中輸入以逗號分隔的電子郵件地址清單,當警示變更為 ALARM (警示) 狀態時,這些電子郵件地址將會收到通知。
-
選擇建立警示。