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

Terraform如何遍历多CIDR为每个路由表批量创建aws_route资源

Terraform 多路由表+多CIDR批量创建路由实现方案

你需要通过setproduct函数对路由表ID列表和CIDR列表求笛卡尔积,生成所有路由表+CIDR的组合,再将组合转换为for_each支持的map结构即可实现需求,具体步骤如下:

步骤1:调整变量定义

首先把tgw_destination_cidr_block变量的类型调整为字符串列表,示例:

variable "tgw_destination_cidr_block" {
  type        = list(string)
  description = "List of destination CIDR blocks for TGW routes"
  default     = []
}

步骤2:重写aws_route资源逻辑

使用setproduct生成所有组合,再转换为带唯一键的map供for_each使用:

resource "aws_route" "private_route" {
  # 生成 路由表ID * CIDR 的所有组合,转换为唯一键的map
  for_each = {
    for combo in setproduct(data.aws_route_tables.private_route_tables.ids, var.tgw_destination_cidr_block) :
    "${combo[0]}_${replace(combo[1], "/", "_")}" => {
      route_table_id         = combo[0]
      destination_cidr_block = combo[1]
    }
  }

  route_table_id          = each.value.route_table_id
  destination_cidr_block  = each.value.destination_cidr_block
  transit_gateway_id      = module.tgw.ec2_transit_gateway_id
}

逻辑说明

  • setproduct(A, B)会返回两个列表的笛卡尔积,比如路由表有2个、CIDR有2个时,会生成4个组合:[rtb-xxx1, cidr1]、[rtb-xxx1, cidr2]、[rtb-xxx2, cidr1]、[rtb-xxx2, cidr2]
  • 生成的键采用路由表ID_替换了/的CIDR格式,保证每个资源实例的键唯一且稳定,新增/删除路由表或CIDR时不会触发无关资源的重建
  • 每个实例会自动取对应组合的路由表ID和CIDR创建路由,完全匹配需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:39:03