我想對我使用 AWS Command Line (AWS CLI) 建立之 Amazon EventBridge 規則不會調用 AWS Lambda 函數的原因進行疑難排解。
簡短描述
請使用以下步驟識別問題:
- 確認事件來源已發佈事件並觸發相關聯的 Amazon EventBridge 規則。
- 確認 EventBridge 規則已調用設定的目標。
- 如果目標調用失敗,請確保 AWS Lambda 函數在其資源政策中擁有適當權限。
解決方案
注意: 如果您在執行 AWS CLI 命令時收到錯誤,請確定您使用的是最新版本的 AWS CLI。
檢閱 EventBridge 規則的 CloudWatch 指標
- 開啟 Amazon CloudWatch 主控台。
- 在左側導覽窗格的指標下,選擇所有指標。
- 選取 AWS/Events 命名空間。
- 為相關規則選取 TriggerRules、Invocations 和 FailedInvocations (如有) 指標。如有必要,請使用 SUM 統計資料檢閱這些指標。
注意: TriggerRules 資料點表示事件觸發了 EventBridge 規則。Invocation 資料點表示 EventBridge 規則調用了對應目標。如果指標包括 FailedInvocations 資料點,則這些表示該規則可能無法調用目標。FailedInvocations 代表永久失敗,而且可能因不正確權限或設定錯誤的目標所造成。
確認 Lambda 函數的資源政策擁有適當權限
建立以 Lambda 函數作為目標的 EventBridge 規則時,請記住以下幾點:
- 當您使用 Amazon EventBridge 主控台建立規則時,主控台即會將適當權限自動新增至函數的資源政策。
- 當您使用 AWS CLI、SDK 或 AWS CloudFormation 建立規則時,您必須在資源政策中手動套用權限。
這些權限會授予 Amazon EventBridge 服務存取權限以調用 Lambda 函數。
檢閱與目標 Lambda 函數相關聯的權限
請執行下列步驟:
- 開啟 AWS Lambda 主控台。
- 選擇目標 Lambda 函數。
- 選擇組態索引標籤,然後選擇權限。
- 在資源型政策區段下,檢閱政策文件。
或者,將 GetPolicy API 或 get-policy AWS CLI 命令與適當輸入搭配使用,以擷取 Lambda 函數的資源政策。
以下範例顯示允許 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"
}
注意: 將 ARN 取代為適當的區域、帳戶 ID 及資源名稱。
更新資源政策
如果您需要更新資源政策,請執行下列步驟:
- 開啟 AWS Lambda 主控台。
- 選擇目標 Lambda 函數。
- 選擇組態索引標籤,然後選取權限。
- 在資源型政策區段中,選擇新增權限。
- 選取 AWS Service:EventBridge (CloudWatch Events)。
- 提供陳述式 ID (Sid) 作為政策陳述式的選用識別碼。
- 提供主體作為 events.amazonaws.com。
注意: 通常會自動填入。
- 提供來源 ARN 作為 EventBridge 規則的 ARN。
- 在動作中,從下拉式清單中選取 lambda:InvokeFunction。
- 選擇儲存。
您也可以使用 AddPermission API 或 AWS Lambda 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
將 Amazon SQS 無效字母佇列新增至目標
EventBridge 使用 Amazon Simple Queue Service (Amazon SQS) DLQs 儲存無法傳送到目標的事件。將 Amazon SQS DLQ 連接到目標報告 FailedInvocations。從 DLQ 擷取事件以進行分析,並且取得更多關於該問題的內容。修復後,即可將失敗的事件重新傳送到目標以進行處理。
- 在 EventBridge 主控台中開啟相關規則。
- 在目標下,選取編輯,然後展開其他設定區段。
- 在無效字母佇列下,選擇在目前的 AWS 帳戶中選取 Amazon SQS 註冊以作為無效字母佇列使用。
- 選取要作為 DLQ 使用的 SQS 佇列。
- 指派 DLQ 後,請完成編輯規則區段中的剩餘步驟以儲存變更。
相關資訊
我的規則已執行,但並未調用 Lambda 函數
為 Amazon EventBridge 使用資源型政策: AWS Lambda 權限
事件重試政策和使用無效字母佇列
改善了 Amazon EventBridge 的失敗復原能力