Node.js 18 Lambda函数导入AWS库失败问题求助
Node.js 18 Lambda 导入AWS SDK操作DynamoDB的正确方法
问题根源
Node.js 18版本的Lambda默认启用ES模块(ESM)环境,因此require语法会报错;同时Lambda不再预装旧版AWS SDK v2,新版SDK v3(@aws-sdk/*系列包)需要自行通过部署包或Lambda层引入。
可行解决方案
方案1:使用AWS SDK v3(推荐)
AWS SDK v3是模块化设计,更轻量化,适合Lambda环境。你需要通过以下方式引入:
- 准备依赖:将
@aws-sdk/client-dynamodb和@aws-sdk/util-dynamodb打包进部署包,或者创建包含这些依赖的Lambda层并附加到函数上。 - 正确导入代码:
import { DynamoDBClient, PutItemCommand } from "@aws-sdk/client-dynamodb"; import { marshall } from "@aws-sdk/util-dynamodb";
- 示例写入DynamoDB代码:
const client = new DynamoDBClient({ region: "你的AWS区域" }); export const handler = async (event) => { // 要写入的数据 const newItem = { id: "user_001", username: "test_user" }; // 构造写入命令 const command = new PutItemCommand({ TableName: "你的表名", Item: marshall(newItem) // 将JS对象转换为DynamoDB格式 }); try { await client.send(command); return { statusCode: 200, body: "数据添加成功" }; } catch (err) { return { statusCode: 500, body: JSON.stringify(err) }; } };
方案2:切换到CommonJS环境使用SDK v2
如果你坚持使用旧版SDK v2,需要修改环境为CommonJS:
- 在Lambda函数的根目录创建
package.json,添加:
{ "type": "commonjs" }
- 将
aws-sdk包打包进部署包,或者创建对应Lambda层。 - 导入代码:
const AWS = require('aws-sdk'); const dynamodb = new AWS.DynamoDB({ region: "你的AWS区域" });
常见错误说明
Cannot find package:对应SDK包未被包含在部署包或Lambda层中,Node.js找不到依赖。require is not defined:当前是ESM默认环境,需切换到CommonJS或改用import语法。
内容的提问来源于stack exchange,提问作者alexareintrebari
相关产品推荐
相关产品推荐

