Terraform创建lambda layer报未声明资源引用错误如何解决
Terraform "Reference to undeclared resource" 报错解决方案
问题根因
Terraform 中每个模块的资源作用域是完全隔离的,你在lambda-layer模块内部定义的aws_lambda_layer_version.mm_layer属于模块内部资源,父级目录或者其他模块不能直接通过资源地址访问,必须通过模块输出(output)暴露后才能引用。
解决步骤
- 在lambda-layer模块中添加output输出
打开./modules/lambda-layer/lambda-layer.tf文件,在文件末尾添加如下输出定义,将layer的ARN暴露到模块外部:
output "mm_layer_arn" { description = "ARN of the mm lambda layer" value = aws_lambda_layer_version.mm_layer.arn }
- 修改src目录main.tf中的引用方式
将直接引用内部资源的写法,调整为引用lambda-layer模块的输出值,修改后代码如下:
module "name" { ... layer_arns = [module.lambda-layer.mm_layer_arn] ... }
补充注意事项
- 如果需要暴露layer的其他属性(比如层名称、兼容运行时等),可以按照同样的逻辑在lambda-layer模块中添加对应的output输出,再在外部通过
module.lambda-layer.输出名引用即可 - 修改完成后可先执行
terraform plan验证报错是否消失,如有依赖调整可额外执行terraform init刷新模块配置
内容的提问来源于stack exchange,提问作者John Baltimore
相关产品推荐
相关产品推荐

