AWS VPC模块的公共和私有子网 - Terraform

问题描述 投票:0回答:1

我试图创建AWS vpc环境,用 "template_file "创建公共和私有子网,但是,我在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
}

但是,我想把列表中的偶数子网添加到公共子网中,而把列表中的奇数子网添加到私有子网中。我仍然没有把子网自动分割成私有和公共子网(这是我需要的),但试图在列表中添加特定的元素,并得到了上述错误。enter image description here

你能帮忙解决这个问题吗?谢谢你的回复。

amazon-web-services terraform amazon-vpc terraform-provider-aws
1个回答
0
投票

使用 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...见 范围() terraform功能,如何从不同的数字开始。

© www.soinside.com 2019 - 2024. All rights reserved.