我可以为 terraform 中的资源设置命名空间或层次结构吗?或者以其他方式将资源组合在一起?

Can I have a namespace or hierarchy for resources in terraform? Or otherwise group resources together?

举个具体的例子,我有一组子网,它们都用于同一件事,但分布在多个可用区。

我希望能够将它们全部引用为一个列表,这样我就可以执行类似 aws_subnet.myname[*].id 的操作来获取该组子网的所有子网 ID。

有什么办法可以做到这一点吗?

没有专门的资源分组功能,但您可以使用命名的本地值自行完成:

locals {
  subnets = flatten([aws_subnet.a, aws_subnet.b, aws_subnet.c])
}

此处的 flatten 调用是在设置和未设置 count 的资源之间进行规范化,因为没有 count 资源表达式 returns 只是一个对象,而带有 count它是一个实例序列。

然后在配置的其他地方,如果你需要所有这些 id,你可以写 local.subnets[*].id.