如何在使用AWS CDK时为EventBridge规则目标配置Lambda别名
EventBridge 规则绑定Lambda别名/版本的CDK实现
核心逻辑
aws-events-targets.LambdaFunction 目标构造器的首个入参,不局限于基础Lambda函数实例,原生支持直接传入Lambda别名、固定版本对象,CDK会自动生成带对应后缀的目标ARN,和控制台手动选择别名/版本的配置效果完全一致。
配置步骤
1. 定义需要绑定的Lambda别名/版本实例
按照发布需求,在CDK栈中创建对应的构造对象:
- 绑定别名示例:
const prodAlias = new lambda.Alias(this, 'MeetingSyncProdAlias', { aliasName: 'prod', version: lambdaFunction.currentVersion // 可替换为固定已发布版本,实现不可变绑定 });
- 直接绑定固定版本示例:
const v1Version = lambdaFunction.addVersion('v1.0.0');
2. 构建EventBridge目标时替换入参
原有自定义触发事件的配置无需修改,仅需把目标构造器的首个入参从基础Lambda对象,替换为上述定义的别名/版本对象:
const meetingSyncEvent = { path: "/v1/meeting/sync", httpMethod: "GET" }; // 原写法:传入基础Lambda,始终指向$Latest版本 // const eventTarget = new awsEventTarget.LambdaFunction(lambdaFunction, { // event: awsEvents.RuleTargetInput.fromObject(meetingSyncEvent) // }); // 绑定prod别名的正确写法 const eventTarget = new awsEventTarget.LambdaFunction(prodAlias, { event: awsEvents.RuleTargetInput.fromObject(meetingSyncEvent) }); // 绑定固定v1版本的正确写法(二选一即可) // const eventTarget = new awsEventTarget.LambdaFunction(v1Version, { // event: awsEvents.RuleTargetInput.fromObject(meetingSyncEvent) // }); 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) });
自动处理说明
CDK会自动完成关联的权限配置,无需手动调整:
- 自动为EventBridge执行角色添加调用对应Lambda别名/版本的权限
- 自动在Lambda资源策略中添加EventBridge触发对应别名/版本的授权
最终生成的规则目标ARN会自动携带标识后缀:别名绑定的ARN末尾会附加
:alias/<别名名称>,固定版本绑定的ARN末尾会附加对应版本号,和控制台手动配置的效果无差异。
控制台效果对照


内容的提问来源于stack exchange,提问作者baumannalexj
相关产品推荐
相关产品推荐

