【问题标题】:How to create eventbridge rule using boto3 with lambda function as target?如何使用以 lambda 函数为目标的 boto3 创建 eventbridge 规则?
【发布时间】:2021-07-15 22:34:17
【问题描述】:

我想创建一个以 lambda 函数为目标的 AWS 事件桥规则。名为“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 函数。

为什么会这样?

【问题讨论】:

  • 您是否通过控制台安排 lambda?您是否以角色的形式授予 lambda 权限?你有没有在事件桥中创建规则,它有玉米表达式,告诉什么时候调用 lambda 和规则的目标作为你的 lambda 函数?

标签: amazon-web-services aws-lambda boto3 aws-event-bridge


【解决方案1】:

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

说明

这里缺少一些东西:

第一:

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

create_event_source_mapping lambda API 可让您显式添加此映射。这必须在创建目标和规则后在代码中完成。

第二:

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

【讨论】:

    【解决方案2】:

    将策略 AmazonEventBridgeFullAccess 附加到角色。

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 2021-04-18
      • 2021-05-13
      • 2021-08-06
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 2020-11-12
      相关资源
      最近更新 更多