我想對我建立的 Amazon EventBridge 規則無法調用 AWS Lambda 函式的問題進行疑難排解。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
檢閱 EventBridge 規則的 Amazon CloudWatch 指標
請完成下列步驟:
- 開啟 CloudWatch console (CloudWatch 主控台)。
- 在導覽窗格的 Metrics (指標) 下,選擇 All Metrics (所有指標)。
- 選擇 AWS/Events 命名空間。
- 為規則選擇 TriggeredRules、Invocations 和 FailedInvocations 指標。如有必要,請使用 SUM 統計資料檢閱指標。
**注意:**如果指標包括 FailedInvocations 資料點,則該規則可能無法調用目標。如需詳細資訊,請參閱 EventBridge 指標。
確認 Lambda 函式的資源政策擁有適當權限
當您使用 EventBridge 主控台建立規則時,主控台即會將適當權限自動新增至函式的資源型政策。當您使用 AWS CLI、AWS SDK 或 AWS CloudFormation 建立規則時,您必須在資源型政策中手動套用權限。這些權限會授予 EventBridge 服務存取權限以調用 Lambda 函式。
檢閱與目標 Lambda 函式相關聯的權限
請完成下列步驟:
- 開啟 Lambda console (Lambda 主控台)。
- 選取目標 Lambda 函式。
- 選擇 Configuration (組態) 索引標籤,然後選擇 Permissions (權限)。
- 在 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。
更新資源政策
請完成下列步驟:
- 開啟 Lambda console (Lambda 主控台)。
- 選擇目標 Lambda 函式。
- 選擇組態索引標籤,然後選取權限。
- 在 Resource-based policy (資源型政策) 區段中,選擇 Add permissions (新增權限)。
- 選擇 AWS Service - EventBridge (AWS 服務 - EventBridge)。
- 提供陳述式 ID 作為政策陳述式的選用識別碼。
- 在 Principal (主體) 中,使用 events.amazonaws.com。
- 提供 Source ARN (來源 ARN) 作為 EventBridge 規則的 ARN。
- 在動作中,從下拉式清單中選取 lambda:InvokeFunction。
- 選擇 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 中擷取事件。失敗的事件可以重新傳送到目標進行處理。
請完成下列步驟:
- 在 EventBridge 主控台中開啟相關規則。
- 在目標下,選取編輯,然後展開其他設定區段。
- 在 Dead-letter queue (無效字母佇列) 下,選擇 Select an Amazon SQS queue in the current AWS account to use as the dead-letter queue (在目前的 AWS 帳戶中選取 Amazon SQS 佇列作為無效字母佇列)。
- 選擇要作為 DLQ 使用的 SQS 佇列。
- 指派 DLQ 後,請檢閱並儲存您的變更。
相關資訊
我的規則已執行,但並未調用 Lambda 函數
AWS Lambda 權限
使用無效字母佇列來處理 EventBridge 中未傳遞的事件
改善了 Amazon EventBridge 的失敗復原能力