首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terraform从TG路由表和TG附件vpns创建映射/dict,以便在资源aws_ec2_transit_gateway_route_table_association中引用

Terraform从TG路由表和TG附件vpns创建映射/dict,以便在资源aws_ec2_transit_gateway_route_table_association中引用
EN

Stack Overflow用户
提问于 2021-02-19 17:27:27
回答 1查看 103关注 0票数 1

添加类似于Python的psuedo代码来解释我想通过Terraform实现什么。

我有6个传输网关路由表,10个传输网关VPN附件,我需要这个作为tansit网关路由表的关联和传播。

试图创建一个可以在资源函数aws_ec2_transit_gateway_route_table_association中引用的本地 "map/dict“资源函数需要transit_gateway_attachment_id和transit_gateway_route_table_id

代码语言:javascript
复制
tg_rt = [
  {
    "name" = "A"
    "tg_rt_id" = "tgw-rtb-aa"
  },
  {
    "name" = "B"
    "tg_rt_id" = "tgw-rtb-bb"
  },
  {
    "name" = "C"
    "tg_rt_id" = "tgw-rtb-cc"
  },
  {
    "name" = "D"
    "tg_rt_id" = "tgw-rtb-dd"
  },
  {
    "name" = "E"
    "tg_rt_id" = "tgw-rtb-ee"
  },
{
    "name" = "F"
    "tg_rt_id" = "tgw-rtb-ff"
  },
]
tga_vpn = [
  {
    "name" = "1"
    "tga_id" = "tgw-attach-11"
  },
  {
    "name" = "2"
    "tga_id" = "tgw-attach-22"
  },
  {
    "name" = "3"
    "tga_id" = "tgw-attach-33"
  },
  {
    "name" = "4"
    "tga_id" = "tgw-attach-44"
  },
  {
    "name" = "5"
    "tga_id" = "tgw-attach-55"
  },
  {
    "name" = "6"
    "tga_id" = "tgw-attach-66"
  },
  {
    "name" = "7"
    "tga_id" = "tgw-attach-77"
  },
  {
    "name" = "8"
    "tga_id" = "tgw-attach-88"
  },
]
代码语言:javascript
复制
  for tgw_rt in tgw_rts:  # list of dicts with id and name 
    for tga_vpn in tga_vpns: # # list of dict with id and name 
      if tgw_rt.name == "PROD" and tga_vpn.name in [1, 2, 3, 4]:
        rt_id = tgw_rt.id
        vpn_attachment_id = tga_vpn.id
      elif tgw_rt.name == "DEV" and tga_vpn.name in [5, 6, 7, 8]:
        rt_id = tgw_rt.id
        vpn_attachment_id = tga_vpn.id
      elif tgw_rt.name == "STAGING" and tga_vpn.name in [9, 10, 11, 12]:
        rt_id = tgw_rt.id
        vpn_attachment_id = tga_vpn.id
代码语言:javascript
复制
resource "aws_ec2_transit_gateway_route_table_association" "TGW-RT-VPN-ASSOCIATION" {
  
  for_each = {
    for tg_vpn_attach, tg_vpn_attach_details in local.above_map : tg_vpn_attach => tg_vpn_attach_details
  }
  transit_gateway_route_table_id      = each.rt_id # for reference
  transit_gateway_attachment_id     = each.vpn_attachment_id # for reference 
}

同样,我已经部署了一个TGW,它有6个路由表/路由,有几个VPC和VPN附件类型,并希望根据上面的逻辑格式创建正确的关联/传播。

如果有任何问题和帮助,请告诉我。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-20 00:38:12

您的[9, 10, 11, 12]中没有tga_vpn,所以我将只关注proddev

假设我正确地理解了您想要的结果,您应该能够构造您的数据结构,如下所示:

代码语言:javascript
复制
variable "tg_rt" {

  default = [
    {
      "name" = "A"
      "tg_rt_id" = "tgw-rtb-aa"
    },
    {
      "name" = "B"
      "tg_rt_id" = "tgw-rtb-bb"
    },
    {
      "name" = "C"
      "tg_rt_id" = "tgw-rtb-cc"
    },
    {
      "name" = "D"
      "tg_rt_id" = "tgw-rtb-dd"
    },
    {
      "name" = "E"
      "tg_rt_id" = "tgw-rtb-ee"
    },
  {
      "name" = "F"
      "tg_rt_id" = "tgw-rtb-ff"
    },
  ]

}
variable "tga_vpn" {

  default =  [
    {
      "name" = "1"
      "tga_id" = "tgw-attach-11"
    },
    {
      "name" = "2"
      "tga_id" = "tgw-attach-22"
    },
    {
      "name" = "3"
      "tga_id" = "tgw-attach-33"
    },
    {
      "name" = "4"
      "tga_id" = "tgw-attach-44"
    },
    {
      "name" = "5"
      "tga_id" = "tgw-attach-55"
    },
    {
      "name" = "6"
      "tga_id" = "tgw-attach-66"
    },
    {
      "name" = "7"
      "tga_id" = "tgw-attach-77"
    },
    {
      "name" = "8"
      "tga_id" = "tgw-attach-88"
    },
  ]  
}

locals {

  prod = merge(flatten([ for idx1, tgw_rt in var.tg_rt:
           {
              for idx2, tga_vpn in var.tga_vpn:
               "${tgw_rt.tg_rt_id}-${ tga_vpn.tga_id}" => 
                      { rt_id = tgw_rt.tg_rt_id
                        vpn_attachment_id = tga_vpn.tga_id
                      } if contains(["1", "2", "3", "4"], tga_vpn.name)
                         
            }    
      ])...)
      
   dev = merge(flatten([ for idx1, tgw_rt in var.tg_rt:
           {
              for idx2, tga_vpn in var.tga_vpn:
               "${tgw_rt.tg_rt_id}-${ tga_vpn.tga_id}" => 
                      { rt_id = tgw_rt.tg_rt_id
                        vpn_attachment_id = tga_vpn.tga_id
                      } if contains(["5", "6", "7", "8"], tga_vpn.name)
                         
            }    
      ])...) 
      
   prod_dev_map = {
     prod = local.prod
     dev  = local.dev
   }
       
}

output "prod" {
  value = local.prod_dev_map
}

这将导致prod_dev_map为:

代码语言:javascript
复制
{
  "dev" = {
    "tgw-rtb-aa-tgw-attach-55" = {
      "rt_id" = "tgw-rtb-aa"
      "vpn_attachment_id" = "tgw-attach-55"
    }
    "tgw-rtb-aa-tgw-attach-66" = {
      "rt_id" = "tgw-rtb-aa"
      "vpn_attachment_id" = "tgw-attach-66"
    }
    "tgw-rtb-aa-tgw-attach-77" = {
      "rt_id" = "tgw-rtb-aa"
      "vpn_attachment_id" = "tgw-attach-77"
    }
    "tgw-rtb-aa-tgw-attach-88" = {
      "rt_id" = "tgw-rtb-aa"
      "vpn_attachment_id" = "tgw-attach-88"
    }
    "tgw-rtb-bb-tgw-attach-55" = {
      "rt_id" = "tgw-rtb-bb"
      "vpn_attachment_id" = "tgw-attach-55"
    }
    "tgw-rtb-bb-tgw-attach-66" = {
      "rt_id" = "tgw-rtb-bb"
      "vpn_attachment_id" = "tgw-attach-66"
    }
    "tgw-rtb-bb-tgw-attach-77" = {
      "rt_id" = "tgw-rtb-bb"
      "vpn_attachment_id" = "tgw-attach-77"
    }
    "tgw-rtb-bb-tgw-attach-88" = {
      "rt_id" = "tgw-rtb-bb"
      "vpn_attachment_id" = "tgw-attach-88"
    }
    "tgw-rtb-cc-tgw-attach-55" = {
      "rt_id" = "tgw-rtb-cc"
      "vpn_attachment_id" = "tgw-attach-55"
    }
    "tgw-rtb-cc-tgw-attach-66" = {
      "rt_id" = "tgw-rtb-cc"
      "vpn_attachment_id" = "tgw-attach-66"
    }
    "tgw-rtb-cc-tgw-attach-77" = {
      "rt_id" = "tgw-rtb-cc"
      "vpn_attachment_id" = "tgw-attach-77"
    }
    "tgw-rtb-cc-tgw-attach-88" = {
      "rt_id" = "tgw-rtb-cc"
      "vpn_attachment_id" = "tgw-attach-88"
    }
    "tgw-rtb-dd-tgw-attach-55" = {
      "rt_id" = "tgw-rtb-dd"
      "vpn_attachment_id" = "tgw-attach-55"
    }
    "tgw-rtb-dd-tgw-attach-66" = {
      "rt_id" = "tgw-rtb-dd"
      "vpn_attachment_id" = "tgw-attach-66"
    }
    "tgw-rtb-dd-tgw-attach-77" = {
      "rt_id" = "tgw-rtb-dd"
      "vpn_attachment_id" = "tgw-attach-77"
    }
    "tgw-rtb-dd-tgw-attach-88" = {
      "rt_id" = "tgw-rtb-dd"
      "vpn_attachment_id" = "tgw-attach-88"
    }
    "tgw-rtb-ee-tgw-attach-55" = {
      "rt_id" = "tgw-rtb-ee"
      "vpn_attachment_id" = "tgw-attach-55"
    }
    "tgw-rtb-ee-tgw-attach-66" = {
      "rt_id" = "tgw-rtb-ee"
      "vpn_attachment_id" = "tgw-attach-66"
    }
    "tgw-rtb-ee-tgw-attach-77" = {
      "rt_id" = "tgw-rtb-ee"
      "vpn_attachment_id" = "tgw-attach-77"
    }
    "tgw-rtb-ee-tgw-attach-88" = {
      "rt_id" = "tgw-rtb-ee"
      "vpn_attachment_id" = "tgw-attach-88"
    }
    "tgw-rtb-ff-tgw-attach-55" = {
      "rt_id" = "tgw-rtb-ff"
      "vpn_attachment_id" = "tgw-attach-55"
    }
    "tgw-rtb-ff-tgw-attach-66" = {
      "rt_id" = "tgw-rtb-ff"
      "vpn_attachment_id" = "tgw-attach-66"
    }
    "tgw-rtb-ff-tgw-attach-77" = {
      "rt_id" = "tgw-rtb-ff"
      "vpn_attachment_id" = "tgw-attach-77"
    }
    "tgw-rtb-ff-tgw-attach-88" = {
      "rt_id" = "tgw-rtb-ff"
      "vpn_attachment_id" = "tgw-attach-88"
    }
  }
  "prod" = {
    "tgw-rtb-aa-tgw-attach-11" = {
      "rt_id" = "tgw-rtb-aa"
      "vpn_attachment_id" = "tgw-attach-11"
    }
    "tgw-rtb-aa-tgw-attach-22" = {
      "rt_id" = "tgw-rtb-aa"
      "vpn_attachment_id" = "tgw-attach-22"
    }
    "tgw-rtb-aa-tgw-attach-33" = {
      "rt_id" = "tgw-rtb-aa"
      "vpn_attachment_id" = "tgw-attach-33"
    }
    "tgw-rtb-aa-tgw-attach-44" = {
      "rt_id" = "tgw-rtb-aa"
      "vpn_attachment_id" = "tgw-attach-44"
    }
    "tgw-rtb-bb-tgw-attach-11" = {
      "rt_id" = "tgw-rtb-bb"
      "vpn_attachment_id" = "tgw-attach-11"
    }
    "tgw-rtb-bb-tgw-attach-22" = {
      "rt_id" = "tgw-rtb-bb"
      "vpn_attachment_id" = "tgw-attach-22"
    }
    "tgw-rtb-bb-tgw-attach-33" = {
      "rt_id" = "tgw-rtb-bb"
      "vpn_attachment_id" = "tgw-attach-33"
    }
    "tgw-rtb-bb-tgw-attach-44" = {
      "rt_id" = "tgw-rtb-bb"
      "vpn_attachment_id" = "tgw-attach-44"
    }
    "tgw-rtb-cc-tgw-attach-11" = {
      "rt_id" = "tgw-rtb-cc"
      "vpn_attachment_id" = "tgw-attach-11"
    }
    "tgw-rtb-cc-tgw-attach-22" = {
      "rt_id" = "tgw-rtb-cc"
      "vpn_attachment_id" = "tgw-attach-22"
    }
    "tgw-rtb-cc-tgw-attach-33" = {
      "rt_id" = "tgw-rtb-cc"
      "vpn_attachment_id" = "tgw-attach-33"
    }
    "tgw-rtb-cc-tgw-attach-44" = {
      "rt_id" = "tgw-rtb-cc"
      "vpn_attachment_id" = "tgw-attach-44"
    }
    "tgw-rtb-dd-tgw-attach-11" = {
      "rt_id" = "tgw-rtb-dd"
      "vpn_attachment_id" = "tgw-attach-11"
    }
    "tgw-rtb-dd-tgw-attach-22" = {
      "rt_id" = "tgw-rtb-dd"
      "vpn_attachment_id" = "tgw-attach-22"
    }
    "tgw-rtb-dd-tgw-attach-33" = {
      "rt_id" = "tgw-rtb-dd"
      "vpn_attachment_id" = "tgw-attach-33"
    }
    "tgw-rtb-dd-tgw-attach-44" = {
      "rt_id" = "tgw-rtb-dd"
      "vpn_attachment_id" = "tgw-attach-44"
    }
    "tgw-rtb-ee-tgw-attach-11" = {
      "rt_id" = "tgw-rtb-ee"
      "vpn_attachment_id" = "tgw-attach-11"
    }
    "tgw-rtb-ee-tgw-attach-22" = {
      "rt_id" = "tgw-rtb-ee"
      "vpn_attachment_id" = "tgw-attach-22"
    }
    "tgw-rtb-ee-tgw-attach-33" = {
      "rt_id" = "tgw-rtb-ee"
      "vpn_attachment_id" = "tgw-attach-33"
    }
    "tgw-rtb-ee-tgw-attach-44" = {
      "rt_id" = "tgw-rtb-ee"
      "vpn_attachment_id" = "tgw-attach-44"
    }
    "tgw-rtb-ff-tgw-attach-11" = {
      "rt_id" = "tgw-rtb-ff"
      "vpn_attachment_id" = "tgw-attach-11"
    }
    "tgw-rtb-ff-tgw-attach-22" = {
      "rt_id" = "tgw-rtb-ff"
      "vpn_attachment_id" = "tgw-attach-22"
    }
    "tgw-rtb-ff-tgw-attach-33" = {
      "rt_id" = "tgw-rtb-ff"
      "vpn_attachment_id" = "tgw-attach-33"
    }
    "tgw-rtb-ff-tgw-attach-44" = {
      "rt_id" = "tgw-rtb-ff"
      "vpn_attachment_id" = "tgw-attach-44"
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66282257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档