微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 cidrsubnets 将子网的 CIDR 范围传递到 Terraform 0.14 版中的 VPC 模块

如何解决如何使用 cidrsubnets 将子网的 CIDR 范围传递到 Terraform 0.14 版中的 VPC 模块

terraform cidrsubnets 为我提供了以下我想要的子网。

我使用的 terraform 版本:terraform v0.14.9

> cidrsubnets("172.16.0.0/18",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

}


有人可以帮我吗?

解决方法

您可以在 slice 函数之上使用 cidrsubnets 函数。由于 cidrsubnets 将返回一个列表,根据索引对其进行切片,您将获得 2 个包含公共和私有 IP 的列表:

module "vpc" {
  ...
  private_subnets      = slice(cidrsubnets(var.vpc_cidr,6,6),2)
  public_subnets       = slice(cidrsubnets(var.vpc_cidr,2,4)
  ...
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。