在AWS Lambda中使用aws-sdk遇导入错误,求助解决
AWS Lambda中使用AWS SDK报错的原因及解决办法
报错原因拆解
第一个错误「require is not defined in ES module scope」:
你的代码采用了ES模块规范(比如文件后缀是.mjs,或者项目package.json里设置了"type": "module"),而AWS官方教程用的是CommonJS规范的require语法,ES模块环境不兼容CommonJS的require,所以触发报错。第二个错误「Cannot find package 'aws-sdk'」:
当前Lambda运行环境默认预装的是AWS SDK v3版本,而你尝试导入的aws-sdk是v2版本的包名。v3版本采用了模块化拆分设计,不再提供整体的AWS对象导入,且Lambda环境不再预装v2的aws-sdk包,所以找不到对应的模块。
解决办法
方案1:沿用CommonJS规范(匹配官方教程写法)
- 将代码文件后缀改为
.js,如果项目根目录有package.json,删除其中的"type": "module"配置 - 直接使用官方教程的
require语法:
Lambda的CommonJS环境默认预装了AWS SDK v2,可直接调用。var aws = require("aws-sdk");
方案2:使用ES模块规范(适配Lambda当前默认SDK版本)
- 采用AWS SDK v3的模块化导入语法,比如调用SES服务:
Lambda的ES模块环境默认预装了v3版本的各服务客户端包,无需额外打包部署。import { SESClient, SendEmailCommand } from "@aws-sdk/client-ses";
内容的提问来源于stack exchange,提问作者dil12321
相关产品推荐
相关产品推荐

