You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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环境。你需要通过以下方式引入:

  1. 准备依赖:将@aws-sdk/client-dynamodb和@aws-sdk/util-dynamodb打包进部署包,或者创建包含这些依赖的Lambda层并附加到函数上。
  2. 正确导入代码:
import { DynamoDBClient, PutItemCommand } from "@aws-sdk/client-dynamodb";
import { marshall } from "@aws-sdk/util-dynamodb";
  1. 示例写入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:

  1. 在Lambda函数的根目录创建package.json,添加:
{
  "type": "commonjs"
}
  1. 将aws-sdk包打包进部署包,或者创建对应Lambda层。
  2. 导入代码:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:47:20