1

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

这有效并以 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 配置时具有别名

4

1 回答 1

1

我找到了:事件规则需要 type IFunction, sinceIAliasIVersion都 extend 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)
        });

于 2021-01-19T06:54:06.333 回答