我想对为什么我创建的 Amazon EventBridge 规则未调用我的 AWS Lambda 函数进行故障排除。
解决方案
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
查看 EventBridge 规则的 Amazon CloudWatch 指标
完成以下步骤:
- 打开 CloudWatch 控制台。
- 在导航窗格中的 Metrics(指标)下,选择 All Metrics(所有指标)。
- 选择 AWS/Events(AWS/事件)命名空间。
- 为该规则选择 TriggeredRules、Invocations 和 FailedInvocations 指标。如有必要,可以通过 SUM 统计数据查看这些指标。
**注意:**如果指标包含 FailedInvocations 数据点,则该规则可能无法调用目标。有关详细信息,请参阅 EventBridge 指标。
确认 Lambda 函数的资源策略具有相应的权限
当您使用 EventBridge 控制台创建规则时,控制台会自动向函数的基于资源的策略添加相应的权限。当您使用 AWS CLI、AWS SDK 或 AWS CloudFormation 创建规则时,必须手动应用基于资源的策略中的权限。这些权限将授予 EventBridge 服务调用 Lambda 函数的权限。
查看与目标 Lambda 函数关联的权限
完成以下步骤:
- 打开 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 控制台。
- 选择目标 Lambda 函数。
- 选择配置选项卡,然后选择权限。
- 在 Resource-based policy(基于资源的策略)部分中,选择 Add permissions(添加权限)。
- 选择 AWS Service - EventBridge(AWS 服务 - EventBridge)。
- 提供 Statement ID(语句 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
在 Amazon SQS 上向目标添加 DLQ
EventBridge 使用 Amazon Simple Queue Service (Amazon SQS) 上的死信队列 (DLQ) 来存储无法传送到目标的事件。将 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 的故障恢复