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

如何为字符串列表生成索引?能否结合Terraform flatten函数实现?

为Terraform扁平化后的子网列表生成索引

当然可以实现,根据需求可以选择两种常见的索引生成方式:

1. 基于原始层级的复合索引

如果需要保留子网所属的网络和子网原始标识,可以直接将network_key和subnet_key拼接成复合索引,适合需要追溯层级关系的场景:

locals {
  network_subnets = flatten([
    for network_key, network in var.networks : [
      for subnet_key, subnet in network.subnets : {
        network_key = network_key
        subnet_key  = subnet_key
        network_id  = aws_vpc.example[network_key].id
        cidr_block  = subnet.cidr_block
        new_key     = "${network_key}-${subnet_key}" # 字符串拼接的复合索引
        # 若key是数字类型,也可以用数字组合:new_key = network_key * 100 + subnet_key
      }
    ]
  ])
}

2. 全局连续数字索引

如果需要生成从0或1开始的连续唯一索引,由于嵌套for循环无法直接维护计数器,我们可以分两步实现:先生成扁平化的原始列表,再遍历该列表添加全局索引:

locals {
  # 第一步:生成不带全局索引的扁平化子网列表
  network_subnets_raw = flatten([
    for network_key, network in var.networks : [
      for subnet_key, subnet in network.subnets : {
        network_key = network_key
        subnet_key  = subnet_key
        network_id  = aws_vpc.example[network_key].id
        cidr_block  = subnet.cidr_block
      }
    ]
  ])

  # 第二步:遍历原始列表,添加全局连续索引(从1开始,若要从0开始直接用idx)
  network_subnets = [
    for idx, subnet in local.network_subnets_raw : merge(subnet, {
      new_key = idx + 1
    })
  ]
}

两种方式都完美结合了flatten函数的使用,你可以根据实际业务需求选择合适的索引形式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:23:09