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

升级Node.js 12.x至18.x后,Lambda函数无法加载AWS SDK

解决方案:Node.js 18.x Lambda无法找到aws-sdk模块

问题原因

Node.js 12.x及更早的Lambda运行时内置了AWS SDK v2,但Node.js 18.x及以上版本的运行时移除了内置的AWS SDK v2,转而内置了AWS SDK v3。你的代码依然尝试引入v2,所以会出现Cannot find module 'aws-sdk'的错误。

可选解决方案

方案1:迁移到AWS SDK v3(推荐)

AWS SDK v3采用模块化设计,体积更小、性能更优,也是官方推荐的新版本。以S3操作为例,修改代码如下:

// 导入对应服务的客户端和命令
const { S3Client, GetObjectCommand } = require("@aws-sdk/client-s3");

// 初始化客户端(可指定区域,若不指定则使用Lambda的默认区域)
const s3Client = new S3Client({ region: "us-east-1" });

// 示例:执行GetObject操作
const getS3Object = async () => {
  try {
    const command = new GetObjectCommand({
      Bucket: "your-bucket-name",
      Key: "your-object-key"
    });
    const response = await s3Client.send(command);
    // 处理响应数据
    console.log("Object retrieved:", response);
  } catch (err) {
    console.error("Error retrieving object:", err);
  }
};

exports.handler = async (event) => {
  await getS3Object();
  return { statusCode: 200, body: "Success" };
};
  • 不同AWS服务对应不同的包,比如EC2对应@aws-sdk/client-ec2,DynamoDB对应@aws-sdk/client-dynamodb,按需导入即可。
  • 部署时需将这些依赖打包进部署包(执行npm install @aws-sdk/client-s3后,将代码和node_modules一起压缩上传)。

方案2:手动打包AWS SDK v2到部署包

如果不想修改现有代码,可将AWS SDK v2作为依赖打包进Lambda部署包:

  1. 在本地项目目录执行:
    npm install aws-sdk --save
    
  2. 将你的代码文件(如index.js)和node_modules目录一起压缩成ZIP文件(确保文件在ZIP根目录,而非嵌套文件夹)。
  3. 在Lambda控制台上传这个ZIP包作为函数代码。

方案3:使用Lambda层提供AWS SDK v2

通过Lambda层复用AWS SDK v2,避免每个函数都打包依赖:

  1. 创建一个本地目录nodejs,进入该目录执行:
    npm install aws-sdk --save
    
  2. 将nodejs目录压缩成ZIP文件(ZIP的根目录是nodejs,内部包含node_modules)。
  3. 在Lambda控制台创建新层,上传该ZIP包,运行时选择Node.js 18.x。
  4. 进入你的Lambda函数配置页面,将该层附加到函数上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:11:35