【问题标题】:What does *.id mean in terraform?*.id 在 terraform 中是什么意思?
【发布时间】:2022-11-24 06:09:07
【问题描述】:

我对 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 指的是什么?

【问题讨论】:

    标签: terraform


    【解决方案1】:

    您正在使用 count 元参数 [1] 创建子网。这将产生一个 aws_subnet 资源列表。要访问单个元素,您通常必须在任何其他编程语言中指定一个索引。这同样适用于 terraform,例如,您可以使用 aws_subnet.private[0].id 访问单个元素。 Terraform 为您提供了一个通配符 (*),也称为 splat 表达式 [2],因此您可以获取列表的所有元素,而不是使用索引一个一个地获取。我还认为这是旧语法,aws_subnet.private[*].id 也应该有效。 .id 部分获取子网的 ID 属性。您可以对该资源的任何其他属性执行相同的操作。简而言之:splat 表达式可帮助您从使用 count 元参数创建的所有私有子网中获取所有 .id 属性。


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

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

    【讨论】:

      猜你喜欢
      • 2022-06-10
      • 1970-01-01
      • 2022-11-13
      • 2011-08-12
      • 2017-06-11
      • 2018-03-05
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多