CDK未定义Lambda却报BucketNotificationsHandler运行时版本错误如何解决
问题解决方法
错误来源说明
你遇到的BucketNotificationsHandler是AWS CDK自动创建的内置自定义资源Lambda,用于底层配置S3桶的事件通知规则,你代码中没有显式定义是因为这是CDK封装的底层逻辑。
报错的原因是你使用的CDK版本过旧,旧版本CDK默认给该内置Lambda使用nodejs10.x运行时,而当前AWS已经不再支持该运行时用于创建或更新Lambda函数,因此触发部署失败。
解决方法
方案1:升级CDK版本(推荐)
该问题已经在后续CDK版本中修复,直接升级你的CDK版本到对应兼容版本即可,无需修改业务代码:
- 若使用CDK v1:升级到
1.181.0及以上版本,该版本已将内置自定义资源的默认运行时更换为nodejs14.x - 若使用CDK v2:升级到
2.16.0及以上版本,同样修复了该默认运行时问题
升级完成后重新执行cdk synth和cdk deploy即可正常部署。
方案2:手动覆盖内置Lambda运行时(暂时无法升级CDK时使用)
如果当前场景下你暂时不能升级CDK版本,可以通过CDK的Aspect能力手动修改该内置Lambda的运行时配置,在你当前栈的代码中添加以下逻辑即可:
import { Stack, IAspect } from 'aws-cdk-lib'; import { Function } from 'aws-cdk-lib/aws-lambda'; import { IConstruct } from 'constructs'; // 放在你现有资源定义的同级位置 Stack.of(this).node.applyAspect(new (class implements IAspect { visit(node: IConstruct): void { // 匹配BucketNotificationsHandler相关的Lambda函数 if (node instanceof Function && node.node.id.includes('BucketNotificationsHandler')) { node.addPropertyOverride('Runtime', 'nodejs14.x'); } } })());
修改完成后重新执行cdk synth和cdk deploy即可完成部署。
内容的提问来源于stack exchange,提问作者Sushil Verma
相关产品推荐
相关产品推荐

