Terraform部署AWS Lambda Layer时source_path为null的错误解决
解决Terraform部署AWS Lambda Layer的source_path null错误
问题定位
你遇到的Could not locate source_path "null"错误,核心是模块对source_path参数的解析异常,同时伴随IAM角色命名无效问题,源于模块默认行为与你的配置不匹配。
具体修复步骤
1. 修正source_path配置格式
模块的source_path数组中path字段为纯字符串,无需用jsonencode()包裹。结合你的执行目录terraform/environments/dev,使用Terraform内置的path.module变量生成可靠相对路径,确保解析正确:
module "lambda_layer_pip_requirements" { source = "terraform-aws-modules/lambda/aws" # 指定稳定版本,规避版本兼容问题 version = "~> 5.0" create_function = false create_layer = true # 禁用默认角色创建,解决IAM角色命名无效错误 create_role = false layer_name = "test" compatible_runtimes = ["python3.9"] runtime = "python3.9" source_path = [ { path = "${path.module}/../../../aws/lambda" pip_requirements = true prefix_in_zip = "python" } ] }
2. 禁用默认IAM角色创建
由于你仅创建Layer而非Lambda函数,模块默认会尝试生成Lambda执行角色,引发命名无效错误。添加create_role = false即可阻止模块创建不必要的角色。
3. 指定模块稳定版本
未指定模块版本可能导致使用存在路径解析bug的旧版代码,添加version = "~> 5.0"(可根据模块最新稳定版调整),确保使用兼容代码。
4. 验证路径有效性
在terraform/environments/dev目录下执行以下命令,确认路径指向包含requirements.txt的正确目录:
ls ${PWD}/../../../aws/lambda/requirements.txt
若命令能输出文件信息,说明路径配置正确。
5. 清理缓存重新初始化
若之前的错误导致缓存异常,执行以下命令重置环境:
terraform destroy -auto-approve rm -rf .terraform/ .terraform.lock.hcl terraform init
验证部署
完成上述修改后,重新执行terraform apply,模块将正确读取requirements.txt、安装依赖并打包上传Lambda Layer至AWS。
内容的提问来源于stack exchange,提问作者Shadowtrooper
相关产品推荐
相关产品推荐

