如何解决如何使用 boto3 以 lambda 函数为目标创建 eventbridge 规则?
我想创建一个以 lambda 函数为目标的 AWS eventbridge 规则。名为“StartInstance”的 lambda 函数已通过控制台创建。
我创建了一个 python 脚本,它使用 boto3 库来创建这个 eventbridge 规则。我将一个 cron 表达式传递给这个规则,它会在特定的日期和时间调用 lambda 函数。
下面是运行成功的python脚本代码:
import boto3
eventclient = boto3.client('events')
response = eventclient.put_rule(
Name='ec2scheduler',ScheduleExpression='cron(40 16 21 4 ? 2021)',State='ENABLED',Description='schedule ec2 start/stop'
)
response = eventclient.put_targets(
Rule='ec2scheduler',Targets=[
{
'Id': 'StartInstance','Arn': 'arn:aws:lambda:us-east-1:965477548122:function:StartInstance'
}
]
)
如您所见,传递给规则的 cron 表达式为:cron(40 16 21 4 ? 2021)
它应该在日期 2021 年 4 月 21 日格林威治标准时间 16:40 调用了“StartInstance”lambda 函数。但是,当时并没有调用 lambda 函数。我在 cloudwatch 日志中也没有看到为 lambda 函数生成的日志。当我通过 AWS Eventbridge 控制台在控制台中看到所需的目标和 cron 表达式时,上面创建的 eventbridge 规则对我来说看起来不错。但该规则在时机成熟时不会调用 lambda 函数。
为什么会这样?
解决方法
TLDR:需要在 lambda 和 eventbridge 上建立权限/信任
说明
这里缺少一些东西:
首先:
当您从控制台添加规则和目标时,AWS 会执行创建 lambda 事件源映射的工作。在这种情况下,应将 EventBridge 规则配置为 lambda 函数的事件源。
create_event_source_mapping lambda API 将允许您显式添加此映射。这必须在您创建目标和规则后在代码中完成。
第二:
在 put_rule EventBridge API 的参数中,我没有看到提到 RoleArn。规则将使用的角色的 ARN 需要具有调用目标 lambda 函数的权限。
,将策略 AmazonEventBridgeFullAccess 附加到角色。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。