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

CDK部署Lambda时无法识别AWS SDK for JavaScript v3问题咨询

问题原因

AWS Lambda 官方提供的 Node.js 运行环境默认仅预装了 AWS SDK for JavaScript v2 版本,v3 的所有包都没有内置,需要自行打包上传到 Lambda 执行环境。
你在Web控制台直接粘贴代码能正常运行,通常是因为测试用的Lambda已经提前配置了包含AWS SDK v3的Lambda层,或者你在控制台内置的代码编辑器中执行过依赖安装操作,控制台会自动把依赖存到执行环境中,而CDK部署时是全新的干净执行环境,没有这些额外配置因此触发找不到模块的报错。

解决方案

根据你使用的CDK Lambda构造类型,可以选择两种处理方式:

方案1:使用 @aws-cdk/aws-lambda-nodejs 模块的 NodejsFunction 构造(推荐)

这是CDK专门为Node.js生态的Lambda提供的优化构造,会自动调用esbuild工具把你的代码和所有依赖打包成单个执行文件,不需要手动处理依赖安装、打包流程:

  • 首先在CDK项目根目录安装对应的依赖包:
    npm install @aws-cdk/aws-lambda-nodejs
  • 替换原有Lambda构造的声明,示例代码如下:
import { NodejsFunction } from '@aws-cdk/aws-lambda-nodejs';
import { Runtime } from 'aws-cdk-lib/aws-lambda';

const hitcounterLambda = new NodejsFunction(this, 'HitcounterLambda', {
  // 填写你的Lambda源码本地路径,支持.ts和.js格式
  entry: './lambda/hitcounter.ts',
  // 建议选择Node.js 18.x及以上版本,兼容v3 SDK的所有特性
  runtime: Runtime.NODEJS_18_X,
  // 你的代码中导出的处理函数名
  handler: 'handler',
});

配置完成后正常执行cdk deploy即可,CDK会自动把你代码中引入的@aws-sdk/client-dynamodb等v3依赖打包到部署包中。

方案2:使用原生 lambda.Function 构造,手动打包依赖

如果你需要沿用原生的Function构造,需要自行提前安装Lambda的所有依赖再让CDK打包上传:

  • 进入你存放Lambda业务代码的本地目录(即hitcounter.js所在的文件夹)
  • 执行以下命令初始化包配置并安装生产依赖:
npm init -y
npm install --production @aws-sdk/client-dynamodb @aws-sdk/util-dynamodb
# 其他你用到的v3 SDK包也在这里一起安装
  • 修改CDK中Lambda构造的声明,将code参数指向整个业务代码目录,而非单独的js文件:
import { Function, Runtime, Code } from 'aws-cdk-lib/aws-lambda';

const hitcounterLambda = new Function(this, 'HitcounterLambda', {
  // 指向存放Lambda代码和node_modules的整个目录
  code: Code.fromAsset('./lambda'),
  runtime: Runtime.NODEJS_18_X,
  // 格式为「文件名.导出函数名」
  handler: 'hitcounter.handler',
});

可选优化

如果有多个Lambda需要用到AWS SDK v3,可以单独制作一个包含所有v3依赖的Lambda层,在CDK中给所有需要的Lambda绑定该层即可,避免重复打包依赖、减小每个Lambda的部署包体积。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:06:03