【问题标题】:How to create an EventBridge (CloudWatch Events) rule and add it to a Lambda function as a trigger using CDK?如何使用 CDK 创建 EventBridge (CloudWatch Events) 规则并将其作为触发器添加到 Lambda 函数?
【发布时间】:2021-05-11 14:56:31
【问题描述】:

我正在尝试创建 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-lambda aws-cdk aws-event-bridge


    【解决方案1】:

    来自 CDK 开发人员指南中的 Importing existing external resources

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

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

    【讨论】:

      猜你喜欢
      • 2022-12-03
      • 2017-11-01
      • 2021-08-06
      • 2021-07-15
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      相关资源
      最近更新 更多