如何對 Amazon EventBridge 規則的問題進行疑難排解?

2 分的閱讀內容
0

我想要解決我的 Amazon EventBridge 規則未如預期般觸發或調用目標的原因。

簡短描述

使用此驗證流程來隔離問題:

  1. 確認已發生相關事件 (例如,AWS CloudTrail API 呼叫或 Simple Storage Service (Amazon S3) 物件上傳)。
  2. 確認事件與規則事件模式相符。
  3. 確認目標已成功處理事件 (例如,事件調用 AWS Lambda 函數)。

解決方法

使用下列步驟對與 Amazon EventBridge 規則相關的問題進行疑難排解:

驗證傳入的事件

以下列一種或多種方式驗證傳入事件:

  • 如果 AWS CloudTrail 已擷取事件,請分析 CloudTrail 日誌。驗證 API 呼叫是否在預期時間內發生,並與事件模式中的所有欄位相符。
    **注意:**某些 AWS 服務僅適用於 us-east-1 區域。例如,AWS Identity and Access Management (IAM) API 呼叫僅在 us-east-1 區域發佈。如果在另一個區域中建立規則以符合 IAM 事件,則這些事件不會轉送到 EventBridge。因此,這些事件不會觸發該規則。
  • Amazon EventBridge 主控台提供包含範例 AWS 和合作夥伴事件的 EventBridge 工具沙盒。使用此工具比對建議的事件模式與 AWS、合作夥伴和自訂事件。或者,使用 TestEventPattern API 來確認事件模式與事件之間的比對。
  • EventBridge 提供 TriggeredRules 指標,以報告成功比對的事件的規則。TriggeredRules 資料點的時間戳記會顯示事件發生的時間。

檢閱 CloudWatch 指標

請遵循以下步驟檢閱 Amazon EventBridge 規則的 CloudWatch 指標:

  1. 開啟 CloudWatch 主控台
  2. 選取所有指標
  3. 選取 AWS/Events 命名空間。
  4. 為相關規則選取 TriggerRulesInvocationsFailedInvocations (如有) 指標。您可以使用 SUM 統計資料檢閱這些指標。

驗證事件模式

若要比對事件,事件模式中的所有欄位必須相符。使用沙盒工具,測試所需的事件與具有數個欄位的事件模式。例如,使用此處列出的簡單事件模式:

{
    "source": ["aws.s3"]
}

如果比對成功,請增加事件模式的複雜性。您新增到事件模式的每個欄位都會篩選相符的事件並縮小其焦點。

以下是事件模式範例。該模式將 Amazon S3 API 呼叫清單與以兩個字串 (feature1 和 feature2) 其中之一開頭的物件的特定儲存貯體進行比對。

{
  "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/"
        }
      ]
    }
  }
}

逐步新增欄位以隔離與所需事件不符的欄位。

驗證目標

  • 當規則將事件轉送到目標時,Invocations 指標會發佈資料點。這表示成功和失敗調用。

  • Amazon EventBridge 在永久無法調用目標時,會發佈 FailedInvocations 資料點。FailedInvocations 表示目標組態存在問題或因權限不足而引起的問題。

  • Amazon EventBridge 必須獲得適當的權限才能調用目標。根據目標的不同,由 AWS Identity and Access Management (IAM) 角色資源政策授予權限。

  • 當您使用 Amazon EventBridge 主控台建立規則時,主控台會自動將所需權限新增至相關資源。
    **注意:**如果您使用 AWS 開發套件、AWS Command Line Interface (AWS CLI) 或 AWS CloudFormation 部署規則,請明確設定權限。

  • 如果沒有任何 FailedInvocations 資料點,則 Amazon EventBridge 已成功將事件傳送到目標。但是,目標可能無法正確運作。例如,AWS Lambda 目標可能會在執行時或節流時遇到錯誤。若要取得詳細資訊,請檢閱目標的 Amazon CloudWatch 指標和任何相關日誌。

  • Amazon Simple Queue Service (Amazon SQS) 無效字母佇列 (DLQ) 與目標建立關聯。未傳遞到目標的事件會傳送至無效字母佇列。您可以使用此方法取得失敗事件的更多詳細資訊。檢閱以下從 DLQ 擷取到的失敗事件的訊息程式碼片段:

    "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"
                    },

    此訊息顯示 Amazon EventBridge 服務沒有調用 Lambda 目標的必要權限。

  • Amazon EventBridge 規則最多支援五個目標。暫時附加 Amazon CloudWatch Logs 群組目標或 Amazon Simple Notification Service (Amazon SNS) 主題。此動作會擷取轉送至目標的事件,或隔離目標組態錯誤。日誌或主題提供下列服務:

  • 確認必須由目標剖析和處理的事件主體和特定欄位

  • 確認事件已傳遞至目標

  • 確認輸入轉換器設定正確

相關資訊

對 Amazon EventBridge 進行疑難排解

為什麼 CloudWatch 事件規則沒有觸發 Lambda 函數?

如何對 Amazon EventBridge 排程器的錯誤進行疑難排解?

AWS 官方
AWS 官方已更新 9 個月前