AWS VPC 模块公有和私有子网 - Terraform
Posted
技术标签:
【中文标题】AWS VPC 模块公有和私有子网 - Terraform【英文标题】:AWS VPC module public and private subnets - Terraform 【发布时间】:2020-08-02 18:08:15 【问题描述】:我正在尝试使用使用“template_file”创建的公共子网和私有子网创建 AWS vpc 环境,但是,我在 VPC 模块中定义公共子网和私有子网时遇到了问题。
我使用以下方法生成了子网:
data "template_file" "cidrsubnets"
count = var.subnet_count[terraform.workspace]
template = "$$cidrsubnet(vpc_cidr,8,current_count)"
vars =
vpc_cidr = var.network_address_space[terraform.workspace]
current_count = count.index
在 VPC 模块中,上面的代码将我所有的子网添加到公共子网中(有效):
module "vpc"
source = "terraform-aws-modules/vpc/aws"
name = "$local.prefix-vpc"
cidr = var.network_address_space[terraform.workspace]
azs = slice(data.aws_availability_zones.available.names, 0, var.subnet_count[terraform.workspace])
public_subnets = data.template_file.cidrsubnets[*].rendered
private_subnets = []
create_database_subnet_group = false
enable_dns_hostnames = true
enable_nat_gateway = true
enable_s3_endpoint = true
enable_dynamodb_endpoint = true
tags = local.common_tags
但是,我想将列表中的偶数子网添加到公共子网,将列表中的奇数子网添加到私有子网。 我仍然没有自动将子网拆分为私有和公共(这是我需要的),但尝试在列表中添加特定元素并得到上面的错误:
你能帮忙吗?感谢您的回复。
【问题讨论】:
请用您尝试过的内容和错误消息更新您的问题。 完成。我添加了手动将子网拆分为公共子网和私有子网时遇到的错误。然而,通过将子网列表中的偶数和奇数位置拆分为私有子网和公共子网,还没有成功地做到这一点。 【参考方案1】:在这里使用template_file
数据源似乎过于复杂。我猜你想要达到的效果类似于以下内容(使用locals
以获得更好的可读性)[未经测试]:
locals
cidr = var.network_address_space[terraform.workspace]
netnums = range(var.subnet_count[terraform.workspace])
module "vpc"
source = "terraform-aws-modules/vpc/aws"
....
cidr = local.cidr
public_subnets = [for i in local.netnums : cidrsubnet(local.cidr, 8, i)]
....
netnums
将是一个从0
开始的数字数组。请参阅range() terraform 函数了解如何从不同的数字开始。
【讨论】:
以上是关于AWS VPC 模块公有和私有子网 - Terraform的主要内容,如果未能解决你的问题,请参考以下文章
关于AWS-VPC中的公有子网与私有子网-Public and private subnets
AWS VPC:将 NAT 和 Internet 网关与负载均衡器和私有子网一起使用时的奇怪行为
如何使用 mySQL 工作台连接到 AWS 私有子网 VPC 中的 RDS