Terraform同一模块内如何引用同资源块的其他字段值
Terraform 同模块内字段值复用实现方法
你示例中直接在同资源块内通过参数名ami引用对应值的写法Terraform并不原生支持,针对你不想创建外部变量、需要一处修改多处生效的需求,有以下两种实现方案:
方案1:使用模块局部值(locals,最推荐)
locals是Terraform提供的模块内部私有变量,不会暴露给模块调用方,专门用于处理模块内需要重复复用的固定值:
# 仅当前模块内部可访问的局部值定义 locals { server_ami = "ami-a1b2c3d4" } resource "aws_instance" "server" { ami = local.server_ami instance_type = "t2.micro" subnet_id = var.subnet_ids tags = { Name = format("ami:%s", local.server_ami) } }
该方案后续只需修改local.server_ami一处即可全模块同步生效,完全符合你的需求。
方案2:使用self引用资源属性(特殊场景使用)
如果需要引用资源创建后才生成的运行时属性,可以在provisioner、connection等特殊块中使用self关键字引用当前资源的属性,注意该语法不能用在资源的常规参数配置中:
resource "aws_instance" "server" { ami = "ami-a1b2c3d4" instance_type = "t2.micro" subnet_id = var.subnet_ids provisioner "local-exec" { command = "echo 实例AMI为${self.ami}" } }
内容的提问来源于stack exchange,提问作者user971741
相关产品推荐
相关产品推荐

