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

在AWS SAM本地环境中从Lambda Layer导入ES6 Node模块的问题

解决AWS SAM本地环境从Lambda Layer导入ES6模块问题

1. 修正Lambda Layer的文件结构

Lambda Layer的模块必须放在指定路径,SAM本地会将Layer挂载到/opt目录,Node.js才能识别。正确结构如下:

layers/
  my-utils-layer/
    nodejs/
      node_modules/
        uid/  # 你的ES6模块
      package.json  # 必须添加这个文件声明模块类型

在layers/my-utils-layer/nodejs/package.json中添加:

{
  "type": "module"
}

2. 配置SAM模板(template.yaml)

确保Layer定义正确,且Lambda函数关联该Layer:

Resources:
  MyUtilsLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      LayerName: MyUtilsLayer
      ContentUri: layers/my-utils-layer/
      CompatibleRuntimes:
        - nodejs18.x  # 匹配你的Node.js运行时版本
      RetentionPolicy: Retain

  MyLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: src/
      Handler: index.handler
      Runtime: nodejs18.x
      Layers:
        - !Ref MyUtilsLayer
      Environment:
        Variables:
          NODE_PATH: /opt/nodejs/node_modules  # 让Node能找到Layer中的模块

3. 配置Lambda函数目录的package.json

在你的Lambda处理程序所在的src/目录下创建package.json,声明模块类型:

{
  "type": "module"
}

4. 本地测试命令

使用以下命令启动本地API或直接调用函数,确保Layer被正确加载:

# 启动本地API网关
sam local start-api

# 直接调用Lambda函数(需准备event.json测试事件)
sam local invoke MyLambdaFunction -e event.json

5. 常见排查点

  • 确保本地Node.js版本与SAM模板中指定的Runtime版本一致,避免模块兼容性问题
  • 修改Layer内容后,可添加--skip-pull-image参数重启本地服务,跳过镜像缓存重新加载Layer
  • 检查ContentUri路径是否正确,必须指向包含nodejs目录的Layer根文件夹

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:25:46