NodeJS AWS Lambda函数报错:Cannot find module 'aws-sdk' 求助
解决AWS Lambda中找不到
aws-sdk模块的问题 核心原因
你的Lambda运行时版本大概率是Node.js 18.x或更高版本——从Node.js 18.x开始,AWS Lambda不再预安装AWS SDK v2(即aws-sdk包),转而默认提供AWS SDK v3(@aws-sdk/*系列包),这就是报错的根本原因。官方文档中提到的“运行时始终可用”针对的是对应版本适配的SDK版本,并非所有SDK版本都预安装。
解决方案(三选一)
1. 切换到Node.js 16.x或更低版本运行时
Node.js 16.x及以下版本的Lambda运行时仍预安装了AWS SDK v2,无需修改代码,只需在CDK配置中指定对应运行时:
// 示例CDK代码(TypeScript) import { NodejsFunction, Runtime } from 'aws-cdk-lib/aws-lambda-nodejs'; new NodejsFunction(this, 'MyLambda', { runtime: Runtime.NODEJS_16_X, // 指定16.x版本 // 其他配置... });
重新执行cdk deploy即可。
2. 迁移到AWS SDK v3
AWS SDK v3是官方推荐的新版本,体积更小、支持树摇,适配Node.js 18+运行时。修改你的代码如下:
import { S3Client, ListObjectsCommand } from "@aws-sdk/client-s3"; const s3Client = new S3Client({}); const command = new ListObjectsCommand({ Bucket: process.env.DOCUMENTS_BUCKET_NAME! }); const response = await s3Client.send(command); const results = response.Contents;
同时在项目的package.json中添加依赖:
npm install @aws-sdk/client-s3
CDK的NodejsFunction会自动打包该依赖到部署包中,重新部署即可。
3. 手动打包AWS SDK v2到部署包
如果坚持使用AWS SDK v2,需要将其作为项目依赖安装并打包:
- 安装依赖:
npm install aws-sdk
- 确保CDK配置中包含该依赖。使用
NodejsFunction时默认会打包所有生产依赖,无需额外配置;如果是自定义打包方式,需确保aws-sdk被包含在node_modules中并一起上传。
内容的提问来源于stack exchange,提问作者daydreamer
相关产品推荐
相关产品推荐

