*.id在地形中是什么意思

  • 本文关键字:是什么 id terraform
  • 更新时间 :
  • 英文 :


我是Terraform的新手。我很难理解地形在这里做什么:

output "subnet_ids" {
value = aws_subnet.private.*.id
}

在aws_subnet资源块中,我们有

resource "aws_subnet" "private" {
vpc_id            = var.vpc_id
cidr_block        = element(split(",", var.cidrs), count.index)
availability_zone = element(split(",", var.azs), count.index)
count             = length(split(",", var.cidrs))
tags = {
Name = "${var.name}-${count.index == 0 ? "a" : "b"}"
}
lifecycle {
ignore_changes = [availability_zone]
}
}

aws_subnet.private.*.id引用了什么?

您正在使用count元参数[1]创建子网。这将导致具有aws_subnet资源的列表。要访问列表中的单个元素,通常必须用任何其他编程语言指定索引。这同样适用于地形,因此例如,您可以使用aws_subnet.private[0].id访问单个元素。Terraform为您提供了一个通配符(*),也称为splat表达式[2],因此您可以获取列表的所有元素,而不是使用索引逐个获取。我还认为这是旧语法,aws_subnet.private[*].id应该也能工作。基本上,splat表达式只是for循环的一个简短版本,否则您必须使用它来获取列表的所有元素。

.id部分获取子网的ID属性。您可以对该资源的任何其他属性执行同样的操作。简而言之:splat表达式可以帮助您从使用count元参数创建的所有私有子网中获取所有.id属性。


[1]https://developer.hashicorp.com/terraform/language/meta-arguments/count

[2]https://developer.hashicorp.com/terraform/language/expressions/splat

最新更新