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

AWS Lambda Layer压缩包现双重nodejs目录致模块找不到问题求助

解决方案:SAM Build后Lambda Layer双重nodejs目录问题

以下是针对该问题的具体排查和解决步骤:

  • 检查Layer的SAM模板配置
    打开你的template.yaml,找到Layer对应的资源定义,查看Metadata字段:

    MyLayer:
      Type: AWS::Serverless::LayerVersion
      Properties:
        ContentUri: ./my-layer
      Metadata:
        BuildMethod: nodejs18.x
        # 若存在BuildProperties,检查SourceDir是否配置正确
        # BuildProperties:
        #   SourceDir: nodejs
    

    如果SourceDir设置为nodejs,而你的ContentUri目录下已经有nodejs文件夹(即./my-layer/nodejs/node_modules),SAM build时会将SourceDir下的内容打包,最终形成nodejs/nodejs/node_modules的嵌套结构。此时需将SourceDir改为./,或者调整本地目录结构,让node_modules直接放在ContentUri指定的目录下。

  • 清理本地构建残留
    执行sam build时可能会复用之前的构建产物,导致目录嵌套问题。先清理旧构建文件:

    sam build --clean
    

    之后重新执行sam build,检查生成的Layer包目录结构是否正常。

  • 自定义构建脚本控制目录结构
    如果默认的Node.js构建方法不符合需求,改用Makefile自定义构建流程:

    1. 在Layer目录下创建Makefile:
      build-MyLayer:
          mkdir -p $(ARTIFACTS_DIR)/nodejs
          cp -r nodejs/node_modules $(ARTIFACTS_DIR)/nodejs/
      
    2. 修改template.yaml中的Layer Metadata:
      Metadata:
        BuildMethod: makefile
      

    这样构建时会严格按照你定义的规则复制文件,确保node_modules直接位于nodejs目录下。

  • 回退SAM CLI版本
    若近期更新过SAM CLI,可能是新版本的bug导致目录处理异常。先查看当前版本:

    sam --version
    

    回退到之前能正常工作的版本(例如替换为你之前使用的版本号):

    pip install aws-sam-cli==1.97.0
    

    重新执行sam build验证问题是否解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:10:21