如何将使用 cidrsubnets 的子网的 CIDR 范围传递给 Terraform 版本 0.14 中的 VPC 模块
Posted
技术标签:
【中文标题】如何将使用 cidrsubnets 的子网的 CIDR 范围传递给 Terraform 版本 0.14 中的 VPC 模块【英文标题】:How to pass CIDR range for subnets using cidrsubnets to VPC module in Terraform Version 0.14 【发布时间】:2021-07-25 08:10:37 【问题描述】:Terraform cidrsubnets 为我提供了我想要的以下子网。
我正在使用的 Terraform 版本:Terraform v0.14.9
> cidrsubnets("172.16.0.0/18", 6, 6, 6, 6)
tolist([
"172.16.0.0/24",
"172.16.1.0/24",
"172.16.2.0/24",
"172.16.3.0/24",
])
Requirement
==========
Main CIDR range = 172.16.0.0/18
Public Subnets = [172.16.0.0/24, 172.16.1.0/24]
Private Subents = [172.16.2.0/24, 172.16.3.0/24]
如何使用上述 CIDR 范围为公共子网和私有子网传递 Terraform cidrsubnets 函数到下面的 VPC 模块。
variable "vpc_cidr"
default = "172.16.0.0/18"
data "aws_availability_zones" "azs"
state = "available"
module "vpc"
source = "terraform-aws-modules/vpc/aws"
version = "2.77.0"
name = "my-vpc"
cidr = var.vpc_cidr
azs = data.aws_availability_zones.azs.names
private_subnets = ["172.16.1.0/24", "172.16.2.0/24"] <= I want to pass these subnets from cidrsubnets function
public_subnets = ["172.16.3.0/24", "172.16.4.0/24"] <= I want to pass these subnets from cidrsubnets function
enable_nat_gateway = true
single_nat_gateway = true
enable_dns_hostnames = true
有人可以帮我解决这个问题吗?
【问题讨论】:
【参考方案1】:您可以在cidrsubnets 之上使用slice 函数。由于cidrsubnets
将返回一个列表,因此根据索引对其进行切片,您将获得 2 个包含公共和私有 IP 的列表:
module "vpc"
...
private_subnets = slice(cidrsubnets(var.vpc_cidr, 6, 6, 6, 6),0,2)
public_subnets = slice(cidrsubnets(var.vpc_cidr, 6, 6, 6, 6),2,4)
...
【讨论】:
以上是关于如何将使用 cidrsubnets 的子网的 CIDR 范围传递给 Terraform 版本 0.14 中的 VPC 模块的主要内容,如果未能解决你的问题,请参考以下文章