Terraform-多个专用子网-添加新子网会更改路由表和路由表关联

问题描述

#########################
# Private subnets       #
#########################

resource "aws_subnet" "private" {
  vpc_id            = var.vpc_id
  for_each = var.private_subnets
  cidr_block        = each.value.cidr_block
  availability_zone = each.value.availability_zone
  tags = merge(
   {
    "Name" = format(
        "%s",each.key
      )
   },each.value.tags
  )
}

以上部分按需工作,我可以轻松创建多个动态专用子网,并根据需要使用tag.Name和来自variable.tf的其他标签

resource "aws_route_table" "private" {
 count = length(var.private_subnets)
  vpc_id = var.vpc_id
 route {
        cidr_block     = "0.0.0.0/0"
        nat_gateway_id = element(values(aws_nat_gateway.main)[*].id,count.index)
  }
  tags = merge(
   element(values(aws_subnet.private)[*].tags,count.index),{
    "Name" = format(
     "rt_%s",element(values(aws_subnet.private)[*].tags["Name"],count.index)
      )
   }
  )
}

在以上部分中,我想创建与专用子网数相同数量的路由表,并将其与nat_gateway关联。如果我将for_each与公共子网一起使用,则会出现的问题是我要使用的标签将不起作用,并且与public相比,可能会有多个私有子网,这会给nat_gateway分配带来麻烦。

resource "aws_route_table_association" "private" {
  depends_on = [aws_subnet.private]
  count = length(var.private_subnets) 
  subnet_id = element(values(aws_subnet.private)[*].id,count.index)
  route_table_id = element(aws_route_table.private.*.id,count.index)
}

上面的代码工作正常,但是如果我引入一个新的私有子网,则route_table_associcationroute_table会被修改,从而破坏先前的映射路由,关联。

如何创建新子网而又不破坏先前与route_tables,关联相关的映射。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)