首页 > 解决方案 > 如何使用 CDK 创建 EventBridge (CloudWatch Events) 规则并将其作为触发器添加到 Lambda 函数?

问题描述

我正在尝试创建一个 EventBridge (CloudWatch Events) 规则并将该规则作为触发器添加到现有 Lambda 函数中。

    const notificationFunction = lambda.Function.fromFunctionArn(this,
      'DevopsNotificationLambda',
      _props.notificationLambdaArn
    );
    const rule = new Rule(this, `${stackPrefix}-EventRule`, {
      eventPattern: {
        source: ['aws.codepipeline'],
        detailType: ['CodePipeline Pipeline Execution State Change'],
        detail: {pipeline: [pipeline.pipelineName]}
      },
    });
    notificationFunction.addPermission(`${stackPrefix}-CloudWatchPermission`, {
      principal: new ServicePrincipal('events.amazonaws.com'),
      sourceArn: rule.ruleArn
    });
    rule.addTarget(new LambdaFunction(notificationFunction));

该代码正确地使用 Lambda 目标创建 EventBridge,但它不会将触发器添加到实际的 Lambda。我必须通过 AWS Web 控制台手动将 EventBridge 添加到 Lambda。

添加触发器

似乎将 Lambda 作为目标添加到事件规则是不够的。我应该如何将事件规则作为触发器添加到 Lambda?

标签: aws-lambdaaws-cdkaws-event-bridge

解决方案


来自CDK 开发人员指南中的导入现有外部资源

尽管您可以在任何地方使用导入的资源,但您无法修改导入的资源。例如,在导入的 s3.Bucket 上调用 addToResourcePolicy(Python:add_to_resource_policy)什么都不做。

您无法notificationFunction从 CDK 堆栈添加触发器,因为notificationFunction它是外部资源。


推荐阅读