AWS VP C модуль publi c и частные подсети - Terraform - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь создать AWS vp c среду с publi c и частным su bnet, которую я создаю с "template_file", однако у меня возникают проблемы с определением publi c и частные подсети внутри модуля VP C.

Я сгенерировал свои подсети с помощью:

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
  }
}

Внутри модуля VP C приведенный выше код добавляет все мои подсети в publi c подсети (работает):

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
}

Однако я хочу добавить четные подсети в списке в подсети publi c и нечетные подсети в списке в частные подсети. Я до сих пор не разбил подсети на частные и публичные c автоматически (это то, что мне нужно), но попытался добавить определенные c элементы в списки и получил ошибку выше: enter image description here

Можете ли вы помочь с этим? Спасибо за ответ.

1 Ответ

0 голосов
/ 25 апреля 2020

с использованием источника данных 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 о том, как начать с другого числа.

...