我在地形输出中有这个结构:
"eks_private_subnets_in_zones": {
"value": {
"us-east-1a": [
"subnet-11111111111111111",
"subnet-22222222222222222"
],
"us-east-1b": [
"subnet-33333333333333333",
"subnet-44444444444444444"
],
"us-east-1c": [
"subnet-55555555555555555",
"subnet-66666666666666666"
]
},
如何生成子网列表,这些子网是每个可用区的子网之一(例如第一个子网)?明确地说,我想要:
["subnet-111111111111111111", "subnet-33333333333333333", "subnet-55555555555555555"]
我试过了
{for az in eks_private_subnets_in_zones: subnet.id => az[0]}
但我完全迷失在这里
根据您的结构,您可以使用
values()函数迭代地图
eks_private_subnets_in_zones.value
,并为每个 AZ 选择列表的第一个元素。
您可以这样做:
output "first_eks_private_subnet_in_each_zone" {
value = [for az_subnets in values(eks_private_subnets_in_zones.value) : az_subnets[0]]
}
基本上,
values(eks_private_subnets_in_zones.value)
获取列表列表(每个可用区中的子网),[for az_subnets in values(...) : az_subnets[0]]
迭代每个列表(代表可用区的子网)并选择第一个子网。
此 Terraform 输出应生成一个列表,其中包含每个可用区域(us-east-1a、us-east-1b、us-east-1c)的第一个子网 ID。