【问题标题】:How to use AWS CDK to set EventBridge Rule Target for Lambda with Alias如何使用 AWS CDK 为带有别名的 Lambda 设置 EventBridge 规则目标
【发布时间】:2021-04-18 22:04:35
【问题描述】:

在我的 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 console UI allows alias and version for target target arn has alias when configured through UI

【问题讨论】:

标签: javascript amazon-web-services aws-lambda aws-cdk aws-event-bridge


【解决方案1】:

我找到了:事件规则的类型为IFunction,由于IAliasIVersion都扩展了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 的 IAM 角色以允许“events.amazonaws.com”调用 Lambda 函数?
  • 此事件调用了我的 lambda,这对您不起作用吗?我没有为此 lambda 创建自定义角色,因此如果您为 Lambda 分配了自定义角色,您可能需要导入该角色并注入 awsEvents.Rule 构造函数?你能像上面那样尝试并告诉我们吗?
猜你喜欢
  • 2021-05-28
  • 2021-07-15
  • 2021-01-12
  • 2021-05-13
  • 1970-01-01
  • 2021-03-11
  • 2020-04-25
  • 2021-11-19
  • 2021-05-11
相关资源
最近更新 更多