AWS Lambda引入aws-sdk模块报错:找不到模块问题求助
解决Lambda Node.js 18.x中
aws-sdk模块找不到及index.mjs引用问题 问题根源
- Node.js 18.x的Lambda默认采用ES模块(
.mjs)规范,你将文件重命名为.js后,若未同步调整模块配置,运行时仍可能按ES模块逻辑处理,导致依赖加载异常。 - Node.js 18及以上版本的Lambda不再预装AWS SDK v2(即
aws-sdk包),仅内置AWS SDK v3,直接用require('aws-sdk')会触发模块找不到的错误。 - 日志中出现
/var/runtime/index.mjs,大概率是旧的.mjs文件仍存在于部署包中,或Lambda处理程序配置未更新。
具体解决步骤
1. 修正Lambda处理程序与模块配置
- 进入Lambda函数的配置页面,找到「运行时设置」并点击编辑。
- 将「处理程序」设置为
index.handler(确保指向你的.js文件及导出的处理函数)。 - 在Lambda的在线IDE中,创建
package.json文件,添加以下内容以明确使用CommonJS模块规范:
{ "type": "commonjs" }
2. 解决aws-sdk模块缺失问题
方案一:改用内置的AWS SDK v3(推荐)
AWS SDK v3已预装在Node.js 18.x的Lambda环境中,无需额外安装,直接按模块化方式引用。例如调用S3服务:
const { S3Client, ListBucketsCommand } = require("@aws-sdk/client-s3"); exports.handler = async (event) => { const s3Client = new S3Client({ region: "你的区域" }); const response = await s3Client.send(new ListBucketsCommand({})); return { statusCode: 200, body: JSON.stringify(response) }; };
方案二:打包AWS SDK v2到部署包
若必须使用AWS SDK v2,需手动将依赖打包进部署包:
- 在在线IDE的
package.json中添加依赖:
{ "type": "commonjs", "dependencies": { "aws-sdk": "^2.1400.0" } }
- 运行
npm install安装依赖,然后重新部署Lambda函数。
3. 清理旧部署文件
- 检查在线IDE的文件列表,确认是否存在残留的
index.mjs文件,若有则删除。 - 重新部署Lambda函数,确保部署包中仅包含
index.js、package.json及node_modules(若用方案二)。
内容的提问来源于stack exchange,提问作者RobertB
相关产品推荐
相关产品推荐

