当前位置: 首页 > 知识库问答 >
问题:

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

黄弘深
2023-03-14

我想创建一个以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函数。

为什么会这样?

共有2个答案

苏鸿羽
2023-03-14

将策略Amazon EventBridgeFullAccess附加到角色。

袁琪
2023-03-14

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

解释

这里缺少几件事:

首先:

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

create\u event\u source\u mapping lambda API将允许您显式添加此映射。这必须在创建目标和规则后在代码中完成。

第二个:

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

 类似资料:
  • 我有一个现有的Lambda函数。 我可以使用控制台创建一个以Lambda为目标的新规则。 当我通过控制台这样做时,它会自动创建一个“EventBridge(CloudWatch Events)”触发器,该触发器在Lambda配置屏幕上可见。 规则执行并成功调用Lambda。 尝试使用C#和SDK(nuget包:AWSSDK. EventBridge)自动执行上述步骤,我采取以下步骤: 我成功调用P

  • 我使用Java lambda函数将自定义事件放入AWS EventBridge。此eventbridge的目标是另一个Java lambda函数。如何在目标lambda函数中接收事件?我的意思是我必须使用HandlerRequest方法中的输入类型是什么?尝试使用ScheduledEvent作为输入类型,但没有成功。搜索了许多EventBridge API文档,但没有获得如何从EventBridg

  • 在我的Lambda CDK堆栈中,我想设置一个事件规则,以便每10分钟向我的Lambda发送一个事件。 aws事件规则 这将工作并以lambda为目标部署规则 问题是这只针对没有别名或版本的基本ARN(实际上总是指向$Latest)。AWS控制台中有此选项可用于为目标设置别名或版本(下图),如何在CDK中执行此操作? AWS控制台UI允许别名和版本的目标arn具有别名时配置通过UI

  • 我正在尝试创建一个EventBridge(CloudWatch Events)规则,并将该规则添加为现有Lambda函数的触发器。 代码使用Lambda目标正确创建EventBridge,但它不会将触发器添加到实际的Lambda中。我必须通过AWS Web控制台手动将EventBridge添加到Lambda。 似乎仅仅将Lambda添加为事件规则的目标是不够的。如何将事件规则作为触发器添加到Lam

  • 我有3个独立的堆栈(都在同一个帐户和区域) he AuthStack通过lambda post-confirmation trigger lambda函数进行身份验证,并向EventsBusStack发送一个新的用户事件对象 EventBusStack通过后确认lambda接收newUser对象 然而,使用CDK,我似乎无法找到一种方法来定位位于第三个堆栈中的lambda函数,即RewardsSt

  • 我正在尝试使用CloudFormation创建Lambda函数的新版本。 我想拥有同一个Lambda函数的多个版本,这样我就可以(a)在不同的版本中指向别名——比如DEV和PROD——并且(b)能够回滚到更早的版本 这是我的Lambda版本的定义: 运行“aws cloudformation创建堆栈”时会创建一个版本,但后续的“aws cloudformation更新堆栈”命令不会执行任何操作。没