You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Terraform的eks_private_subnets_in_zones结构提取指定子网列表?

Terraform提取各可用区首个子网的解决方案

问题场景

你的Terraform输出存在如下结构:

"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"
    ]
  }
}

需要生成一个包含每个可用区(AZ)中第一个子网的列表,期望结果如下:

["subnet-11111111111111111", "subnet-33333333333333333", "subnet-55555555555555555"]

你尝试过以下代码,但未得到预期结果:

{for az in eks_private_subnets_in_zones: subnet.id => az[0]}

解决方案

你需要调整for表达式的写法,因为当前输出是嵌套对象,且你需要的是列表而非映射,正确写法如下:

基础写法:直接提取生成列表

[for az_subnets in eks_private_subnets_in_zones.value : az_subnets[0]]

代码解释

  • eks_private_subnets_in_zones.value:先定位到可用区与子网映射的顶层对象
  • for az_subnets in ...:遍历每个可用区对应的子网列表
  • az_subnets[0]:取出每个子网列表的第一个元素
  • 外层用[]包裹,最终生成符合需求的列表类型结果

进阶写法:保证子网顺序一致

Terraform遍历映射时默认无序,若需要列表中子网顺序和可用区名称排序一致,可结合sort函数:

[for az in sort(keys(eks_private_subnets_in_zones.value)) : eks_private_subnets_in_zones.value[az][0]]

该写法会先对可用区名称排序(如us-east-1a→us-east-1b→us-east-1c),再按此顺序提取首个子网,避免列表顺序随机变化。


内容的提问来源于stack exchange,提问作者Jason Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 19:16:12