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

AWS Lambda迁移至eu-central-1后require未定义错误求助

问题原因分析及解决方案

核心原因

  1. 模块解析模式冲突
    报错「require is not defined in ES module scope」表明代码被Node.js识别为ES模块(ECMAScript Module),而ES模块环境不支持CommonJS的require()语法。相同代码在us-east-1正常运行,大概率是eu-central-1区域的Lambda代码包中意外包含了package.json且配置了"type": "module",或是代码文件后缀被改为.mjs,导致环境解析规则变更。

  2. AWS SDK预装版本差异

  • Node.js 16的Lambda runtime默认预装AWS SDK v2(包名aws-sdk),覆盖所有AWS服务客户端,因此无需手动安装即可通过require('aws-sdk')调用DynamoDB。
  • Node.js 18的Lambda runtime默认预装AWS SDK v3(模块化独立客户端,如@aws-sdk/client-dynamodb),不再提供统一的aws-sdk包。你之前修改的require("@aws-sdk/client-s3")是S3的专属客户端,与DynamoDB场景不匹配;直接使用import时因未指定正确的v3模块路径,导致文件找不到。

解决方案

场景1:沿用Node.js 16(与原环境一致)

  • 检查eu-central-1区域Lambda的代码包,确保无额外的package.json文件;若存在,删除其中的"type": "module"配置。
  • 保留原代码的const AWS = require('aws-sdk')语句,Node.js 16的Lambda预装了v2 SDK,无需额外安装即可直接运行。

场景2:切换至Node.js 18(适配新版Runtime)

方式1:使用预装的v3 SDK(推荐)

无需手动安装依赖,直接用ES模块语法导入DynamoDB相关组件:

import { DynamoDBClient, BatchWriteItemCommand } from "@aws-sdk/client-dynamodb";
import { marshall } from "@aws-sdk/util-dynamodb"; // 用于将JS对象转换为DynamoDB格式

// 初始化客户端
const client = new DynamoDBClient({ region: "eu-central-1" });

// 批量写入示例
const batchParams = {
  RequestItems: {
    "YourTargetTableName": [
      {
        PutRequest: {
          Item: marshall({ id: "item-1", content: "sample data" })
        }
      }
    ]
  }
};

const command = new BatchWriteItemCommand(batchParams);
const response = await client.send(command);

方式2:坚持使用CommonJS语法

在代码包中添加package.json,配置"type": "commonjs"以强制使用CommonJS解析模式,然后用require导入v3模块:

const { DynamoDBClient, BatchWriteItemCommand } = require("@aws-sdk/client-dynamodb");
const { marshall } = require("@aws-sdk/util-dynamodb");

Node.js 18的Lambda已预装这些v3模块,无需执行npm install再打包。

通用排查步骤

  • 对比原区域与新区域的Lambda代码包,确保内容完全一致(无额外配置文件或后缀变更)。
  • 在Lambda控制台确认运行时版本选择与代码语法匹配。

补充说明:原区域无需安装SDK的原因

AWS Lambda的Node.js Runtime会默认预装对应版本的AWS SDK:

  • Node.js 10/12/14/16版本:预装统一的AWS SDK v2(aws-sdk包),涵盖所有服务的客户端实现,因此可直接调用。
  • Node.js 18及以上版本:预装模块化的AWS SDK v3,仅包含各服务的独立客户端包,需按需导入对应服务的模块。

内容的提问来源于stack exchange,提问作者Jasper Tavernier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:07:43