问题描述
terraform cidrsubnets 为我提供了以下我想要的子网。
我使用的 terraform 版本:terraform v0.14.9
> cidrsubnets("172.16.0.0/18",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
}
有人可以帮我吗?
解决方法
您可以在 slice 函数之上使用 cidrsubnets 函数。由于 cidrsubnets
将返回一个列表,根据索引对其进行切片,您将获得 2 个包含公共和私有 IP 的列表:
module "vpc" {
...
private_subnets = slice(cidrsubnets(var.vpc_cidr,6,6),2)
public_subnets = slice(cidrsubnets(var.vpc_cidr,2,4)
...
}