问题描述
#########################
# 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_assocication
和route_table
会被修改,从而破坏先前的映射路由,关联。
如何创建新子网而又不破坏先前与route_tables,关联相关的映射。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)