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

AWS Lambda Layer报错Runtime.ImportModuleError:找不到aws-sdk模块

解决AWS Lambda Layer引发的Runtime.ImportModuleError(找不到aws-sdk)问题

核心排查与修复方案

1. 修正Layer文件结构(Windows打包易出错点)

AWS Lambda对Layer的目录结构有强制要求:Node.js依赖必须放在nodejs/node_modules层级下。Windows手动打包时很容易出现路径错误,检查你的Layer压缩包结构是否符合标准:

layer.zip/
└── nodejs/
    └── node_modules/
        └── aws-sdk/

如果直接将node_modules放在压缩包根目录,Lambda肯定找不到模块。

2. 对齐运行时版本

确保Lambda函数的运行时版本(如Node.js 18.x)与安装aws-sdk时使用的Node.js版本一致。Windows环境下不同npm版本安装的依赖可能存在兼容性问题,重新安装时指定对应版本并生成正确目录结构:

npm install aws-sdk@2.x --prefix ./nodejs

--prefix ./nodejs参数会自动生成nodejs/node_modules的层级结构,避免手动整理路径的麻烦。

3. 检查CDK部署配置

确认CDK代码中Layer的创建和关联逻辑正确,重点关注资产路径和兼容运行时的配置:

// 正确创建Layer
const awsSdkLayer = new lambda.LayerVersion(this, 'AwsSdkLayer', {
  code: lambda.Code.fromAsset('./layer-source'), // 指向包含nodejs目录的文件夹
  compatibleRuntimes: [lambda.Runtime.NODEJS_18_X],
  description: 'Layer with aws-sdk dependency'
});

// 关联Layer到Lambda函数
const targetLambda = new lambda.Function(this, 'TargetFunction', {
  runtime: lambda.Runtime.NODEJS_18_X,
  code: lambda.Code.fromAsset('./lambda-code'),
  handler: 'index.handler',
  layers: [awsSdkLayer]
});

如果fromAsset直接指向node_modules目录,会导致结构错误,必须指向包含nodejs目录的父文件夹。

4. 解决Windows打包路径问题

Windows自带的压缩工具可能会生成冗余路径前缀(如C:\xxx\),导致Lambda无法识别依赖。建议用PowerShell执行标准打包命令:

cd ./layer-source
Compress-Archive -Path nodejs -DestinationPath layer.zip -Force

确保只打包nodejs目录,不要包含上层文件夹。

验证环节

  1. 解压上传到AWS的Layer压缩包,确认内部层级为nodejs/node_modules/aws-sdk
  2. 在Lambda控制台确认函数已正确关联目标Layer
  3. 测试函数后查看CloudWatch日志,确认错误提示的模块路径与实际结构匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:12:13