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

如何使用AWS CDK为带有Alias的Lambda设置EventBridge规则目标

叶晋
2023-03-14

在我的Lambda CDK堆栈中,我想设置一个事件规则,以便每10分钟向我的Lambda发送一个事件。

  • aws事件规则

这将工作并以lambda为目标部署规则

    // ... setup lambdaFunction construct...
    // -- EVENTBRIDGE RULES --

    const meetingSyncEvent = {
        path: "/v1/meeting/sync",
        httpMethod: "GET"
    };

    const eventTarget = new awsEventTarget.LambdaFunction(lambdaFunction, {
        event: awsEvents.RuleTargetInput.fromObject(meetingSyncEvent)
    });



    /**
     TODO how do I add target to ARN with alias/version
     * */

    const eventRule = new awsEvents.Rule(this, generateConstructName("event-rule"), {
        enabled: true,
        description: "event to invoke GET /meeting/sync",
        ruleName: "meeting-sync-rule",
        targets : [
             eventTarget
        ],
        schedule: awsEvents.Schedule.rate(EVENT_MEETING_SYNC_RATE)
    });


    // -- end EVENTBRIDGE RULES --

问题是这只针对没有别名或版本的基本ARN(实际上总是指向$Latest)。AWS控制台中有此选项可用于为目标设置别名或版本(下图),如何在CDK中执行此操作?

AWS控制台UI允许别名和版本的目标arn具有别名时配置通过UI

共有1个答案

段干靖
2023-03-14

我发现了:事件规则采用类型IFunction,由于Ilias和IVersion都扩展了IFunction,因此我们可以使用为函数创建的别名,并将别名作为函数参数(AWS区分函数、别名函数和版本函数)

        const lambdaAlias =  lambdaFunction.latestVersion
                                           .addAlias(ENVIRONMENT_UPPERCASE)


        const eventTarget = new awsEventsTargets.LambdaFunction(lambdaAlias, {
            event: awsEvents.RuleTargetInput.fromObject(meetingSyncEvent)
        });

        const eventRule = new awsEvents.Rule(this, "event-rule", {
            enabled: true,
            description: `event to invoke GET /meeting/sync for ${FUNCTION_NAME}`,
            ruleName: `${FUNCTION_NAME}-invoke-meetingsync`,
            targets: [
                eventTarget
            ],
            schedule: awsEvents.Schedule.rate(EVENT_MEETING_SYNC_RATE)
        });

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

  • 我想创建一个以lambda函数为目标的AWS eventbridge规则。名为“StartInstance”的lambda函数已通过控制台创建。 我创建了一个python脚本,它使用boto3库来创建这个eventbridge规则。我将向该规则传递一个cron表达式,该表达式将在特定日期和时间调用lambda函数。 下面是成功运行的python脚本代码: 如您所见,传递给规则的cron表达式是:,

  • 我正在尝试创建一个以Lambda函数为目标的AWS Eventbridge规则。我可以添加规则和目标,但当我尝试通过RoleArn设置lambda权限时,Cloudformation堆栈部署失败,目标arn不支持RoleArn:aws:lambda:us-east-1:1234567890:功能:联系lambda消费新客户。(服务:AmazonCloudWatchEvents;状态代码:400;错

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

  • 如何使用CloudFormation或CDK将另一个AWS帐户的事件总线指定为CloudWatch规则的目标? 下面是一个使用CDK的示例规则,我尝试将CodeDeploy事件发送到另一个帐户: 如何将另一个帐户的EventBus指定为目标?语法是什么?是ARN还是什么?

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