Lambda升级Node.js 18x后出现Cannot find module 'aws-sdk'错误求助
Lambda Node.js 18x升级后"Cannot find module 'aws-sdk'"问题解决
问题根源
你安装的是AWS SDK for JavaScript v3的包(@aws-sdk/client-s3等),但代码里依然使用v2的写法const AWS = require('aws-sdk')——v3没有顶层的aws-sdk模块,所以会触发找不到模块的错误。
两种解决方案
方案1:迁移到AWS SDK v3(推荐)
v3采用模块化设计,按需导入客户端,更轻量化且符合新版本运行时的最佳实践。针对你的代码调整如下:
- 保留现有v3依赖,修改
index.js中的AWS SDK相关代码:
const https = require('https'); const { S3Client } = require("@aws-sdk/client-s3"); const proxy = require('proxy-agent'); // 创建S3客户端并配置代理和区域 const s3Client = new S3Client({ region: process.env.AWS_REGION, requestHandler: new https.Agent({ agent: proxy(process.env.PROXY_URL) }) }); // 后续调用S3 API示例(按需调整): // const { GetObjectCommand } = require("@aws-sdk/client-s3"); // await s3Client.send(new GetObjectCommand({ Bucket: '你的存储桶名', Key: '对象键' }));
- 执行
npm install确保依赖安装完成 - 重新打包部署Lambda
方案2:继续使用AWS SDK v2(快速临时修复)
如果暂时不想调整代码结构,可以直接安装v2的aws-sdk包:
- 在项目根目录执行命令:
npm install aws-sdk --save
- 此时
package.json的dependencies会新增"aws-sdk": "^2.x.x"条目 - 执行
npm install后重新打包部署Lambda
额外注意事项
- 确认打包时
node_modules目录被包含在zip包中(你的zip脚本zip ../service-now-api.zip -r .已覆盖此需求) - Lambda Node.js 16x及以上运行时不再内置AWS SDK v2,必须手动引入依赖,无论选择v2还是v3版本
内容的提问来源于stack exchange,提问作者FrontPageRob
相关产品推荐
相关产品推荐

