【问题标题】:How to pass CIDR range for subnets using cidrsubnets to VPC module in Terraform Version 0.14如何将使用 cidrsubnets 的子网的 CIDR 范围传递给 Terraform 版本 0.14 中的 VPC 模块
【发布时间】:2021-07-25 08:10:37
【问题描述】:

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

}


有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: terraform vpc terraform0.14.7


    【解决方案1】:

    您可以在cidrsubnets 之上使用slice 函数。由于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)
      ...
    }
    
    

    【讨论】:

      猜你喜欢
      • 2021-03-14
      • 1970-01-01
      • 2020-11-09
      • 2019-05-20
      • 1970-01-01
      • 2018-09-07
      • 2022-11-14
      • 2016-09-28
      • 2021-08-15
      相关资源
      最近更新 更多