Amazon 故障 EventBridge - Amazon EventBridge

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

Amazon 故障 EventBridge

您可以使用本節中的主題對 Amazon EventBridge 問題進行疑難排解。

我的規則可以運行,但是我的 Lambda 函數未被調用

您的 Lambda 函數可能無法執行的原因之一是您未擁有正確的許可。

檢查 Lambda 函數的許可
  1. 使用 AWS CLI,使用函數和您的 AWS 區域執行下列命令:

    aws lambda get-policy --function-name MyFunction --region us-east-1

    您應該會看到下列輸出。

    { "Policy": "{\"Version\":\"2012-10-17\", \"Statement\":[ {\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:events:us-east-1:123456789012:rule/MyRule\"}}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:123456789012:function:MyFunction\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Sid\":\"MyId\"} ], \"Id\":\"default\"}" }
  2. 如果您看到以下錯誤訊息。

    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-name MyFunction \ --statement-id MyId \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule
  3. 如果輸出包含 SourceAccount 欄位,那麼您需要將其移除。SourceAccount設定可防 EventBridge 止呼叫函數。

注意

如果原則不正確,您可以在 EventBridge 主控台中編輯規則,方法是移除規則,然後再將其新增回規則。接著, EventBridge 主控台會在目標上設定正確的權限。

如果您使用特定的 Lambda 別名或版本,如下列命令所示,您必須將 --qualifier 參數新增至 aws lambda get-policyaws lambda add-permission 命令。

aws lambda add-permission \ --function-name MyFunction \ --statement-id MyId \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn arn:aws:events:us-east-1:123456789012:rule/MyRule --qualifier alias or version

我剛建立或修改規則,但不符合測試事件

當您變更規則或其目標,連入事件可能不會立即開始或停止比對新的或更新的規則。允許一小段時間來讓變更生效。

如果短時間後事件仍然不匹配,請檢查指 CloudWatch 標 TriggeredRulesInvocations,以及您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 --name TestRule --schedule-expression 'cron(0 0/4 * * ? *)'

若要每五分鐘執行一次規則,請使用下列 cron 表達式。

aws events put-rule --name TestRule --schedule-expression 'cron(0/5 * * * ? *)'

使用 cron 表示式之 EventBridge 規則的最佳解析度為一分鐘。您的排程規則會在此一分鐘內運行,但不會精確地在第 0 秒時觸發。

因為 EventBridge 目標服務是分散式的,所以從排定的規則執行到目標服務對目標資源執行動作的時間之間,可能會有幾秒鐘的延遲。

我的規則與 AWS 全域服務API呼叫相符,但未執行

AWS 全球服務;例如IAM和 Amazon Route 53 僅在美國東部 (維吉尼亞北部) 區域提供,因此來自全球服務的來 AWS API電事件僅在該區域提供。如需詳細資訊,請參閱 Amazon AWS 服務的活動 EventBridge

規則執行時,與我的規則相關聯的IAM角色會被忽略

EventBridge 僅將IAM角色用於將事件傳送至 Kinesis 串流的規則。對於叫用 Lambda 函數或 Amazon SNS 主題的規則,您需要提供以資源為基礎的許可。

確保您的區域 AWS STS 端點已啟用, EventBridge 以便在擔任您提供的IAM角色時可以使用它們。若要取得更多資訊,請參閱《使用指南》AWS STS 中的〈在 AWS 區域中啟用和IAM用〉

我的規則有一個應該匹配資源的事件模式,但沒有事件匹配

大多數服務 AWS 將冒號(:) 或斜杠(/)視為 Amazon 資源名稱(ARNs)。中的相同字符,但在事件模式規則中 EventBridge 使用完全匹配。建立事件模式時,請務必使用正確的ARN字元,以使其符合要比對的事件中的ARN語法。

某些事件 (例如來自 CloudTrail的 AWS API呼叫事件) 在資源欄位中沒有任何項目。

我的事件交付到目標時發生延遲

EventBridge 嘗試將件傳遞至目標最多 24 小時,但在目標資源受到限制的情況下除外。第一次嘗試會在事件送達事件串流後立即執行。如果目標服務發生問題, EventBridge會自動重新排程另一個傳送。如果自事件到達以來已過 24 小時,則 EventBridge 會停止嘗試傳送事件,並將FailedInvocations量度發佈於中 CloudWatch。我們建議您設定一DLQ個儲存無法成功傳遞至目標的事件。如需更多資訊,請參閱使用無效字母佇列來處理未傳遞的事件 EventBridge

部分事件從未交付至我的目標

如果 EventBridge 規則目標受到長時間限制,則 EventBridge 可能不會重試傳遞。例如,如果未佈建目標來處理內送事件流量,且目標服務正在限制代表您發 EventBridge 出的要求,則 EventBridge 可能不會重試傳遞。

在回應一個事件時,規則的運行次數超過一次

在極少數情況下,單一事件或排程時間可運行相同的規則一次以上,或者特定觸發的規則可多次調用相同的目標

防止無限迴圈

在中 EventBridge,可以建立導致無限迴圈的規則,其中規則會重複執行。如果您有導致無限迴圈的規則,請將其重新寫入,讓規則採取的動作不符合相同的規則。

例如,偵測到 Amazon S3 儲存貯體ACLs已變更,然後執行軟體將其變更為新狀態的規則會導致無限迴圈。解決它的一種方法是重寫規則,使其僅匹配處ACLs於不良狀態的規則。

無限循環可能會快速引發較預期還高的費用。我們建議您使用預測費用,也就是在費用超過您指定的限制時提醒您。如需詳細資訊,請參閱在符合預算的情形下管理成本

我的活動沒有傳送到目標 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 --region us-east-1 --topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic"

若要擁有正確的許可,您的策略屬性類似於以下內容。

"{\"Version\":\"2012-10-17\", \"Id\":\"__default_policy_ID\", \"Statement\":[{\"Sid\":\"__default_statement_ID\", \"Effect\":\"Allow\", \"Principal\":{\"AWS\":\"*\"}, \"Action\":[\"SNS:Subscribe\", \"SNS:ListSubscriptionsByTopic\", \"SNS:DeleteTopic\", \"SNS:GetTopicAttributes\", \"SNS:Publish\", \"SNS:RemovePermission\", \"SNS:AddPermission\", \"SNS:SetTopicAttributes\"], \"Resource\":\"arn:aws:sns:us-east-1:123456789012:MyTopic\", \"Condition\":{\"StringEquals\":{\"AWS:SourceOwner\":\"123456789012\"}}},{\"Sid\":\"Allow_Publish_Events\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"events.amazonaws.com\"}, \"Action\":\"sns:Publish\", \"Resource\":\"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 --region us-east-1 --topic-arn "arn:aws:sns:us-east-1:123456789012:MyTopic" --attribute-name Policy --attribute-value NEW_POLICY_STRING
注意

如果原則不正確,您也可以在 EventBridge 主控台中編輯規則,方法是移除規則,然後再將其新增回規則。 EventBridge 在目標上設定正確的權限。

案例 2

如果您的SNS主題已加密,則必須在KMS金鑰原則中包含以下部分。

{ "Sid": "Allow EventBridge to use the key", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": "*" }

EventBridge即使刪除了與 Amazon SNS 主題關聯的規則,我的 Amazon SNS 主題仍然具有許可

當您以 Amazon SNS 作為目標建立規則時,請代表您向 Amazon SNS 主題 EventBridge 新增許可。如果您在建立規則後不久刪除規則, EventBridge 可能不會從 Amazon SNS 主題中移除該許可。如果發生這種情況,您可以透過使用 aws sns set-topic-attributes 命令從該主題移除許可。如需有關傳送事件之資源型許可的詳細資訊,請參閱 使用 Amazon 資源型政策 EventBridge

我可以使用哪些IAM條件鍵 EventBridge?

EventBridge 支援 AWS寬度條件鍵 (請參閱《IAM使用指南》中的IAM和 AWS STS 條件內容鍵),以及中列出的按鍵在 Amazon 使用IAM政策條件 EventBridge

如何判斷 EventBridge 規則何時被破壞?

您可以使用以下警報在 EventBridge 規則中斷時通知您。

建立警示以在規則損壞時發出提醒
  1. 在開啟 CloudWatch 主控台https://console.aws.amazon.com/cloudwatch/

  2. 選擇建立警示 。在「依類別的CloudWatch 測量結果」窗格中,選擇事件測量結果

  3. 在量度清單中,選取FailedInvocations

  4. 在圖形上方,選擇統計數據總和

  5. 期間中選擇一個值,例如 5 分鐘。選擇下一步

  6. 警示臨界值下,為名稱輸入警示的唯一名稱,例如myFailedRules。在描述中輸入警示的描述,例如規則不會將事件交付至目標

  7. 中選擇 >=1。在 for 中輸入 10

  8. 在「動作」 下,對於「每當此警示」,選擇「狀態為」ALARM。

  9. 對於「傳送通知至」,請選取現有的 Amazon SNS 主題或建立新主題。若要建立新的主題,請選擇新清單。輸入新 Amazon SNS 主題的名稱,例如:myFailedRules

  10. 在 [電子郵件清單] 中,輸入警示變更為ALARM狀態時要通知的電子郵件地址清單 (以逗號分隔)。

  11. 選擇建立警示