【问题标题】:AWS VPC module public and private subnets - TerraformAWS VPC 模块公有和私有子网 - Terraform
【发布时间】:2020-08-02 18:08:15
【问题描述】:

我正在尝试使用使用“template_file”创建的公共子网和私有子网创建 AWS 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
}

但是,我想将列表中的偶数子网添加到公共子网,将列表中的奇数子网添加到私有子网。 我仍然没有自动将子网拆分为私有和公共(这是我需要的),但尝试在列表中添加特定元素并得到上面的错误:

你能帮忙吗?感谢您的回复。

【问题讨论】:

  • 请用您尝试过的内容和错误消息更新您的问题。
  • 完成。我添加了手动将子网拆分为公共子网和私有子网时遇到的错误。然而,通过将子网列表中的偶数和奇数位置拆分为私有子网和公共子网,还没有成功地做到这一点。

标签: amazon-web-services terraform amazon-vpc terraform-provider-aws


【解决方案1】:

在这里使用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 函数了解如何从不同的数字开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 2021-04-19
    • 2019-07-04
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    相关资源
    最近更新 更多