简体   繁体   English

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

[英]How to use AWS CDK to set EventBridge Rule Target for Lambda with Alias

In my Lambda CDK stack, I want to setup an event rule to send an event to my Lambda every 10 minutes.在我的 Lambda CDK 堆栈中,我想设置一个事件规则以每 10 分钟向我的 Lambda 发送一个事件。

This works and deploys the rule with the lambda as the target这有效并部署了以 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 --

The problem is this only targets the base ARN without an Alias or version (effectively always pointing to $Latest).问题是这仅针对没有别名或版本的基本 ARN(实际上始终指向 $Latest)。 There is this option in AWS console to set an Alias or version for a target (pics below), how can I do this in the CDK? AWS 控制台中有这个选项可以为目标设置别名或版本(下图),我如何在 CDK 中执行此操作?

aws console UI allows alias and version for target target arn has alias when configured through UI aws 控制台 UI 允许目标的别名和版本target arn 在通过 UI 配置时具有别名

I found it: the event rule takes type IFunction , and since IAlias and IVersion both extend IFunction , so we can take the alias we created for our function, and provide the alias as the function param (AWS differentiates between functions, alias-functions, and version-functions)我发现它:事件规则采用IFunction类型,并且由于IAliasIVersion都扩展IFunction ,所以我们可以采用我们为 function 创建的别名,并将别名提供为 function 参数(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)
        });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM