跳至內容

為什麼 EventBridge 規則沒有觸發 Lambda 函式?

2 分的閱讀內容
0

我想對我建立的 Amazon EventBridge 規則無法調用 AWS Lambda 函式的問題進行疑難排解。

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

檢閱 EventBridge 規則的 Amazon CloudWatch 指標

請完成下列步驟:

  1. 開啟 CloudWatch console (CloudWatch 主控台)。
  2. 在導覽窗格的 Metrics (指標) 下,選擇 All Metrics (所有指標)。
  3. 選擇 AWS/Events 命名空間。
  4. 為規則選擇 TriggeredRulesInvocationsFailedInvocations 指標。如有必要,請使用 SUM 統計資料檢閱指標。
    **注意:**如果指標包括 FailedInvocations 資料點,則該規則可能無法調用目標。如需詳細資訊,請參閱 EventBridge 指標

確認 Lambda 函式的資源政策擁有適當權限

當您使用 EventBridge 主控台建立規則時,主控台即會將適當權限自動新增至函式的資源型政策。當您使用 AWS CLI、AWS SDK 或 AWS CloudFormation 建立規則時,您必須在資源型政策中手動套用權限。這些權限會授予 EventBridge 服務存取權限以調用 Lambda 函式。

檢閱與目標 Lambda 函式相關聯的權限

請完成下列步驟:

  1. 開啟 Lambda console (Lambda 主控台)。
  2. 選取目標 Lambda 函式。
  3. 選擇 Configuration (組態) 索引標籤,然後選擇 Permissions (權限)。
  4. Resource-based policy )資源型政策) 區段下,檢閱政策文件。
    **注意:**或者,若要擷取 Lambda 函式的資源政策,請使用 GetPolicy API 或 get-policy AWS CLI 命令以及適當的輸入。

下列資源政策範例允許 EventBridge 調用 Lambda 函式:

{  "Effect": "Allow",
  "Action": "lambda:InvokeFunction",
  "Resource": "arn:aws:lambda:region:account-id:function:function-name",
  "Principal": {
    "Service": "events.amazonaws.com"
  },
  "Condition": {
    "ArnLike": {
      "AWS:SourceArn": "arn:aws:events:region:account-id:rule/rule-name"
    }
  },
  "Sid": "InvokeLambdaFunction"
}

**注意:**將 Resource 替換為 Lambda 函式 ARN,將 SourceArn 替換為規則 ARN。

更新資源政策

請完成下列步驟:

  1. 開啟 Lambda console (Lambda 主控台)。
  2. 選擇目標 Lambda 函式。
  3. 選擇組態索引標籤,然後選取權限
  4. Resource-based policy (資源型政策) 區段中,選擇 Add permissions (新增權限)。
  5. 選擇 AWS Service - EventBridge (AWS 服務 - EventBridge)。
  6. 提供陳述式 ID 作為政策陳述式的選用識別碼。
  7. Principal (主體) 中,使用 events.amazonaws.com。
  8. 提供 Source ARN (來源 ARN) 作為 EventBridge 規則的 ARN。
  9. 動作中,從下拉式清單中選取 lambda:InvokeFunction
  10. 選擇 Save (儲存)。

若要更新政策,您也可以使用 AddPermission API。或者,執行類似下列範例的 add-permission AWS CLI 命令:

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

將 DLQ 新增至 Amazon SQS 上的目標

EventBridge 會使用 Amazon Simple Queue Service (Amazon SQS) 上的無效字母佇列 (DLQs) 來儲存無法傳送到目標的事件。將 SQS DLQ 附加到報告 FailedInvocations 的目標。若要取得有關問題更多背景資訊,您可以從 DLQ 中擷取事件。失敗的事件可以重新傳送到目標進行處理。

請完成下列步驟:

  1. EventBridge 主控台中開啟相關規則。
  2. 目標下,選取編輯,然後展開其他設定區段。
  3. Dead-letter queue (無效字母佇列) 下,選擇 Select an Amazon SQS queue in the current AWS account to use as the dead-letter queue (在目前的 AWS 帳戶中選取 Amazon SQS 佇列作為無效字母佇列)。
  4. 選擇要作為 DLQ 使用的 SQS 佇列。
  5. 指派 DLQ 後,請檢閱並儲存您的變更。

相關資訊

我的規則已執行,但並未調用 Lambda 函數

AWS Lambda 權限

使用無效字母佇列來處理 EventBridge 中未傳遞的事件

改善了 Amazon EventBridge 的失敗復原能力