为什么我的 CloudWatch Events 规则未触发 Lambda 函数?

上次更新时间:2020 年 5 月 11 日

我使用 AWS 命令行界面 (AWS CLI)、API 或 AWS CloudFormation 创建了 Amazon CloudWatch Events 规则。但未调用目标 AWS Lambda 函数。当我通过 AWS 管理控制台创建或更新相同的 CloudWatch Events 规则时,该规则可以正常工作。我应该如何排查此问题?

简短描述

当您使用 AWS 管理控制台以 Lambda 函数作为目标创建 CloudWatch Events 规则时,适当的权限将自动添加到该函数基于资源的策略中。当您通过 AWS CLI、API 或 AWS CloudFormation 创建相同的规则时,则必须手动将这些权限添加到资源策略中,以允许 events.amazonaws.com 调用 Lambda 函数。

解决方法

查看 CloudWatch Events 规则的“调用”和“未能调用”指标

在 AWS/Events 命名空间中,检查 CloudWatch Events 规则的“调用”和“未能调用”指标。如果两个指标有一个共同的数据点,则表示 CloudWatch Events 规则尝试调用目标,但调用失败。由于“未能调用”指标未包括任何重试调用,您必须纠正权限问题或目标的错误配置。

确定是否已在 Lambda 函数的基于资源的策略中为 CloudWatch Events 添加适当的权限

打开 AWS Lambda 控制台,然后选择目标函数。选择权限,然后确认您已配置适当的权限。

或者,使用 GetPolicy 命令检查该函数基于资源的策略。在命令的输出中,查找 events.amazonaws.com,它是策略中的受信实体。如果找不到 events.amazonaws.com,则使用 AddPermission 命令添加权限。将委托人设置为 events.amazonaws.com。例如:

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

注意:务必使用您的函数和 ARN 的相应值替换函数和 Amazon 资源名称 (ARN) 的值。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?