AWS CDK部署报错:已安装aws-sdk但提示找不到模块
Lambda运行时找不到aws-sdk模块的解决办法
核心原因
AWS Lambda的Node.js运行时自带v2版aws-sdk,但如果你装了v3版(@aws-sdk/*)、本地依赖配置不对,或者CDK打包时没正确处理依赖,就会触发这个报错。
具体解决步骤
1. 如果你用的是v2版aws-sdk:直接删掉本地依赖
Lambda已经内置了v2的aws-sdk,完全不需要手动安装。执行:
npm uninstall aws-sdk
代码里直接导入使用就行,不用额外打包这个模块。
2. 如果你用的是v3版(@aws-sdk/*):确保CDK正确打包依赖
v3是模块化的,Lambda不会内置,必须打包进部署包:
- 确认
package.json里@aws-sdk/*包在dependencies下,不是devDependencies - 用
NodejsFunction的话,检查CDK配置里没把@aws-sdk/*加入externalModules(这会导致打包时排除它们):
import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; new NodejsFunction(this, 'MyLambda', { entry: './src/lambda/index.ts', bundling: { minify: true, sourceMap: true, externalModules: [], // 别加@aws-sdk相关的内容 }, });
- 要是用普通
Function,得手动打包代码(比如npm run build后把node_modules和编译后的代码一起zip),确保@aws-sdk目录在部署包里。
3. 检查CDK打包的排除规则
如果用NodejsFunction,默认会排除Lambda内置模块,但如果误把aws-sdk加到externalModules里,就会导致打包时不包含它。检查你的CDK代码,把externalModules里的'aws-sdk'删掉。
4. 清理缓存重新部署
有时候本地缓存会搞事情,按以下步骤来:
- 删除
node_modules:rm -rf node_modules - 删除
package-lock.json:rm package-lock.json - 重新装依赖:
npm install - 重新部署:
cdk deploy
验证方法
部署完去Lambda控制台的「代码」标签页,查看部署包内容:
- v2版:包里不该有
aws-sdk目录(用的是Lambda内置的) - v3版:包里
node_modules下必须有@aws-sdk相关目录
用户提供的报错日志:
Runtime.ImportModuleError: Error: Cannot find module 'aws-sdk'
Require stack:
- /var/task/index.js
- /var/runtime/index.js
内容的提问来源于stack exchange,提问作者JimF
相关产品推荐
相关产品推荐

