Code Pipeline使用SAM模板部署Lambda时无法创建Layers问题
排查与解决步骤
1. 补充Lambda函数与层的关联配置
你当前SAM模板仅定义了层资源,未在Lambda函数的配置中添加Layers属性关联该层,部分场景下CloudFormation会默认跳过创建未被任何资源引用的独立层资源。修正后的Lambda资源配置如下:
awstransformedcurlambdafn: Type: 'AWS::Serverless::Function' Properties: FunctionName: lambda1 Handler: index.handler Runtime: nodejs12.x CodeUri: . MemorySize: 256 Timeout: 300 Role: 'arn:aws:iam::11111111:role/Role1' Tracing: Active # 新增以下配置关联层资源 Layers: - !Ref transformedcurNodeModulesLayer
2. 校验SAM构建打包流程
- 确认
sam build执行时的工作目录与SAM模板所在目录匹配,ContentUri配置的./layers/nodejs/是相对模板文件的路径,路径偏移会导致层内容打包为空,触发跳过创建逻辑 - 检查CodePipeline构建阶段的日志,确认层目录下的文件被正常打包,无路径不存在、权限异常类报错
- 验证打包后生成的最终模板中,层的
ContentUri已被替换为合法的S3对象地址,而非本地路径
3. 核对CloudFormation堆栈操作记录
进入CloudFormation控制台,找到对应部署堆栈的事件列表:
- 若存在层资源的创建失败记录,根据报错信息排查问题,常见原因包括层名称重复、运行时版本不受支持、CodePipeline服务角色无层资源的创建权限等
- 若完全没有该层资源的相关操作记录,先检查模板YAML的缩进是否正确,
AWS::Serverless::LayerVersion类型拼写是否无误,再确认部署使用的变更集是否包含该层的新增操作
4. 目录结构验证
你当前使用的layers -> nodejs -> node_modules目录结构符合Node.js层的规范,部署成功后Lambda代码可直接引入依赖,无需额外配置路径。
内容的提问来源于stack exchange,提问作者Rajarshi Das
相关产品推荐
相关产品推荐

