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

Node.js 14环境下AWS Lambda无法找到Layer路径的问题排查

解决Node.js 14 Lambda Layer模块找不到的问题

核心问题分析

你的问题出在Layer文件夹结构不符合Node.js Lambda的模块解析规则,以及模块访问方式错误:

  • 多余的node14目录会导致模块不在Node.js的默认搜索路径中
  • 直接将hey.js放在nodejs根目录而非node_modules下,Node.js无法自动识别该模块
  • 使用绝对路径访问模块不符合规范,且容易因为结构变动导致报错

正确的Layer文件夹结构(Node.js 14)

Lambda会自动将Layer中的nodejs/node_modules目录加入Node.js的模块搜索路径,必须遵循以下结构:

src/lambda-layers/layer1/
  nodejs/
    node_modules/
      hey/          # 以模块文件夹形式存放(推荐规范写法)
        index.js    # 原hey.js的代码内容
        package.json# 可选但建议添加,内容:{"name": "hey", "main": "index.js"}

如果是简单的单文件模块,也可以直接放在node_modules下(仅临时场景推荐):

src/lambda-layers/layer1/
  nodejs/
    node_modules/
      hey.js

利用SAM自动构建Layer(更高效)

既然你使用SAM部署,可以让SAM自动处理依赖安装:

  1. 在layer1/nodejs目录下创建package.json:
{
  "dependencies": {
    "hey": "file:./local-path-to-hey-module"  # 本地模块填路径,npm包直接写包名+版本
  }
}
  1. SAM的BuildMethod: nodejs14.x会自动执行npm install,将依赖安装到node_modules,无需手动整理结构。

Lambda中正确访问模块的方式

无需使用绝对/相对路径,直接通过模块名require即可:

const hey = require('hey');

exports.handler = async (event) => {
  // 调用hey模块的方法,比如 hey.someFunction()
  return {
    statusCode: 200,
    body: JSON.stringify('Success')
  };
};

验证与部署

  1. 执行sam build,确认Layer构建成功
  2. 执行sam deploy重新部署应用
  3. 在AWS控制台确认Layer已正确附加到Lambda函数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:31:02