Amazon web services 如何使用以lambda函数为目标的boto3创建eventbridge规则?

Amazon web services 如何使用以lambda函数为目标的boto3创建eventbridge规则?,amazon-web-services,aws-lambda,boto3,aws-event-bridge,Amazon Web Services,Aws Lambda,Boto3,Aws Event Bridge,我想创建一个以lambda函数为目标的AWS eventbridge规则。名为“StartInstance”的lambda函数已通过控制台创建 我已经创建了一个python脚本,它使用boto3库来创建这个eventbridge规则。我将向该规则传递一个cron表达式,该表达式将在特定日期和时间调用lambda函数 下面是成功运行的python脚本代码: import boto3 eventclient = boto3.client('events') response = eventcli

我想创建一个以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控制台看到上面创建的eventbridge规则时,我觉得它很好,控制台中可以看到所需的目标和cron表达式。但该规则不会在时机成熟时调用lambda函数


为什么会发生这种情况?

TLDR:需要在lambda和eventbridge上建立权限/信任

解释

这里缺少两件事:

第一:

从控制台添加规则和目标时,AWS将执行创建lambda事件源映射的任务。在这种情况下,应将EventBridge规则配置为lambda函数的事件源

lambdaapi将允许您显式添加此映射。这必须在创建目标和规则后在代码中完成

第二:


在EventBridgeAPI的参数中,我没有看到提到RoleArn。规则将使用的角色的ARN需要具有调用目标lambda函数的权限。

您是否通过控制台设置lambda?您是否以角色的形式授予lambda权限?您是否已在事件桥中创建了规则,该事件桥具有告诉何时调用lambda和规则目标作为lambda函数的corn表达式?