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自定义构建流程:- 在Layer目录下创建
Makefile:build-MyLayer: mkdir -p $(ARTIFACTS_DIR)/nodejs cp -r nodejs/node_modules $(ARTIFACTS_DIR)/nodejs/ - 修改
template.yaml中的Layer Metadata:Metadata: BuildMethod: makefile
这样构建时会严格按照你定义的规则复制文件,确保
node_modules直接位于nodejs目录下。- 在Layer目录下创建
回退SAM CLI版本
若近期更新过SAM CLI,可能是新版本的bug导致目录处理异常。先查看当前版本:sam --version回退到之前能正常工作的版本(例如替换为你之前使用的版本号):
pip install aws-sam-cli==1.97.0重新执行
sam build验证问题是否解决。
内容的提问来源于stack exchange,提问作者TomK
相关产品推荐
相关产品推荐

