aws-lambda - 如何使用 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?
解决方案
来自CDK 开发人员指南中的导入现有外部资源。
尽管您可以在任何地方使用导入的资源,但您无法修改导入的资源。例如,在导入的 s3.Bucket 上调用 addToResourcePolicy(Python:add_to_resource_policy)什么都不做。
您无法notificationFunction
从 CDK 堆栈添加触发器,因为notificationFunction
它是外部资源。
推荐阅读
- python - 单击拖动函数 Maya Python
- angular - 角度 8 上的 ngx-device-detector IE 问题
- reactjs - ASP.NET Core + Spa (react) | 返回太多信息。自定义错误消息
- c++ - 为什么我将分钟转换为天小时和分钟的公式返回不正确的结果,我该如何解决?
- c# - Appium - 检查元素是否存在
- agora.io - Agora 是否支持 Safari 屏幕共享?
- devops - 从 Github 提取周期时间
- numpy - LSTM 训练误差非常高且相对不变
- openid-connect - 在 OIDC 中,授权码和授权令牌有什么区别?
- python - 为什么我在 python 上的全局声明之前得到“变量分配”