You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何指定S3 autoDeleteObjects自动创建的Lambda的Node.js运行时版本?

问题解答

为什么自动创建的Lambda仍用Node.js 12.x?

CDK v1.152.0中,@aws-cdk/aws-s3模块的autoDeleteObjects功能,其内置的清理Lambda函数运行时是硬编码为Node.js 12.x的。虽然此时@aws-cdk/aws-lambda模块已经支持Node.js 14,但S3模块的这个内置功能还没同步更新默认运行时,所以即使全局支持高版本,自动生成的Lambda还是会沿用旧版本。

代码修改方法

你可以通过CDK的「逃生舱(Escape Hatch)」机制,定位到自动创建的Lambda函数,手动修改其运行时版本,具体操作如下:

1. 定位自动生成的Lambda资源

当你给S3 Bucket设置autoDeleteObjects: true后,CDK会自动创建一个命名类似BucketAutoDeleteObjectsXXX的Lambda函数。通过Bucket节点的node.findChild方法就能找到它:

import * as cdk from '@aws-cdk/core';
import * as s3 from '@aws-cdk/aws-s3';
import * as lambda from '@aws-cdk/aws-lambda';

const app = new cdk.App();
const stack = new cdk.Stack(app, 'MyStack');

const bucket = new s3.Bucket(stack, 'MyBucket', {
  autoDeleteObjects: true,
  removalPolicy: cdk.RemovalPolicy.DESTROY,
});

// 找到自动创建的清理Lambda
const autoDeleteLambda = bucket.node.findChild('AutoDeleteObjects') as lambda.Function;

2. 修改运行时版本

找到Lambda后,直接修改其runtime属性为Node.js 14即可:

autoDeleteLambda.runtime = lambda.Runtime.NODEJS_14_X;

完整示例代码

import * as cdk from '@aws-cdk/core';
import * as s3 from '@aws-cdk/aws-s3';
import * as lambda from '@aws-cdk/aws-lambda';

export class MyStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const bucket = new s3.Bucket(this, 'MyBucket', {
      autoDeleteObjects: true,
      removalPolicy: cdk.RemovalPolicy.DESTROY,
    });

    // 定位并修改自动删除Lambda的运行时
    const autoDeleteLambda = bucket.node.findChild('AutoDeleteObjects') as lambda.Function;
    autoDeleteLambda.runtime = lambda.Runtime.NODEJS_14_X;
  }
}

const app = new cdk.App();
new MyStack(app, 'MyStack');

验证修改

部署前可以执行cdk synth命令查看生成的CloudFormation模板,确认Lambda的Runtime字段已变为nodejs14.x。


内容的提问来源于stack exchange,提问作者TechQuestion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 02:05:26