Как передать диапазон CIDR для подсетей, использующих cidrsubnets, в модуль VPC в Terraform версии 0.14

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

}


Кто-нибудь может мне помочь с этим, пожалуйста?


person Jwary    schedule 02.05.2021    source источник


Ответы (1)


Вы можете использовать функцию slice поверх cidrsubnets один. Поскольку 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)
  ...
}

person Styszma    schedule 03.05.2021