Amazon web services 在Terraform中创建循环子网

Amazon web services 在Terraform中创建循环子网,amazon-web-services,terraform,amazon-vpc,terraform-provider-aws,Amazon Web Services,Terraform,Amazon Vpc,Terraform Provider Aws,我对地形是新手。 我试图创建一个代码,在其中我可以在循环中创建子网,但cidrsubnet函数不起作用,因为我不想更改子网掩码。 例如:我想用这些IP创建子网:子网1:10.90.46.0/27,子网2:10.90.46.32/27子网3:10.90.46.64/27,依此类推,直到子网8:10.90.46.224/27 谢谢应用一个计数,它将乘以资源的数量 variable "vpc_id" { default = "vpc-123" } #Here add all your 8 CID

我对地形是新手。 我试图创建一个代码,在其中我可以在循环中创建子网,但cidrsubnet函数不起作用,因为我不想更改子网掩码。 例如:我想用这些IP创建子网:子网1:10.90.46.0/27,子网2:10.90.46.32/27子网3:10.90.46.64/27,依此类推,直到子网8:10.90.46.224/27
谢谢

应用一个计数,它将乘以资源的数量

variable "vpc_id" {
  default = "vpc-123"
}

#Here add all your 8 CIDR's to the list in "subnet_cidr" and for each one add one entry in "subnet_azs". You can repeat values in "subnet_azs" but not in subnet_cidr"

variable "subnet_cidr" {
  default = ["10.90.46.0/27", "10.90.46.32/27", "10.90.46.64/27", "10.90.46.224/27"]
}

variable "subnet_azs" {
  default = ["us-east-1a", "us-east-1b", "us-east-1c", "us-east-1c"]
}

resource "aws_subnet" "my_subnets" {
  count             = 8
  vpc_id            = "${var.vpc_id}"
  cidr_block        = "${element(var.subnet_cidr, count.index)}"
  availability_zone = "${element(var.subnet_azs, count.index)}"
}

应用一个计数,它将乘以资源的数量

variable "vpc_id" {
  default = "vpc-123"
}

#Here add all your 8 CIDR's to the list in "subnet_cidr" and for each one add one entry in "subnet_azs". You can repeat values in "subnet_azs" but not in subnet_cidr"

variable "subnet_cidr" {
  default = ["10.90.46.0/27", "10.90.46.32/27", "10.90.46.64/27", "10.90.46.224/27"]
}

variable "subnet_azs" {
  default = ["us-east-1a", "us-east-1b", "us-east-1c", "us-east-1c"]
}

resource "aws_subnet" "my_subnets" {
  count             = 8
  vpc_id            = "${var.vpc_id}"
  cidr_block        = "${element(var.subnet_cidr, count.index)}"
  availability_zone = "${element(var.subnet_azs, count.index)}"
}

自动分配IP地址范围序列的一种方法是使用Terraform注册表:

module "subnet_addrs" {
  source  = "hashicorp/subnets/cidr"
  version = "1.0.0"

  base_cidr_block = "10.90.46.0/24"
  networks = [
    { name = "us-east-1a", new_bits = 3 },
    { name = "us-east-1b", new_bits = 3 },
    { name = "us-east-1c", new_bits = 3 },
    { name = "us-east-1d", new_bits = 3 },
    { name = "us-east-1e", new_bits = 3 },
    { name = "us-east-1f", new_bits = 3 },
    { name = "us-east-1g", new_bits = 3 },
    { name = "us-east-1h", new_bits = 3 },
  ]
}
在上面的示例中,
module.subnet\u addrs.network\u cidr\u blocks
将是如下所示的映射:

{
  "us-east-1a" = "10.90.46.0/27"
  "us-east-1b" = "10.90.46.32/27"
  "us-east-1c" = "10.90.46.64/27"
  "us-east-1d" = "10.90.46.96/27"
  "us-east-1e" = "10.90.46.128/27"
  "us-east-1f" = "10.90.46.160/27"
  "us-east-1g" = "10.90.46.192/27"
  "us-east-1h" = "10.90.46.224/27"
}
这样的映射可以直接用作资源的每个的
,因此我们可以使用AWS作为示例来声明这样的子网(因为您没有说明您使用的是哪个云供应商):

本模块自述中有一些关于[如果您打算这样做,请记住一些事项,以确保所做的更改与现有的对象兼容。我建议您在选择此路径之前,先查看这些文档,以确保您能够将将来可能做出的任何更改应用于您的网络拓扑


例如,上面示例中的分配已经覆盖了整个寻址空间
“10.90.46.0/24”
,因此,如果您想在将来添加一个新的子网而不引入任何新的寻址空间,您需要将其中一个现有子网替换为一对替换子网,这两个子网都具有
新的\u位=4
,因此前缀长度为
/28
,而不是
/27
,这样您就可以有一个额外的可用位e表示网络编号。

自动分配IP地址范围序列的一种方法是使用Terraform注册表:

module "subnet_addrs" {
  source  = "hashicorp/subnets/cidr"
  version = "1.0.0"

  base_cidr_block = "10.90.46.0/24"
  networks = [
    { name = "us-east-1a", new_bits = 3 },
    { name = "us-east-1b", new_bits = 3 },
    { name = "us-east-1c", new_bits = 3 },
    { name = "us-east-1d", new_bits = 3 },
    { name = "us-east-1e", new_bits = 3 },
    { name = "us-east-1f", new_bits = 3 },
    { name = "us-east-1g", new_bits = 3 },
    { name = "us-east-1h", new_bits = 3 },
  ]
}
在上面的示例中,
module.subnet\u addrs.network\u cidr\u blocks
将是如下所示的映射:

{
  "us-east-1a" = "10.90.46.0/27"
  "us-east-1b" = "10.90.46.32/27"
  "us-east-1c" = "10.90.46.64/27"
  "us-east-1d" = "10.90.46.96/27"
  "us-east-1e" = "10.90.46.128/27"
  "us-east-1f" = "10.90.46.160/27"
  "us-east-1g" = "10.90.46.192/27"
  "us-east-1h" = "10.90.46.224/27"
}
这样的映射可以直接用作资源的每个
,因此我们可以使用AWS作为示例来声明这样的子网(因为您没有说明您使用的是哪个云供应商):

本模块自述中有一些关于[如果您打算这样做,请记住一些事项,以确保所做的更改与现有的对象兼容。我建议您在选择此路径之前,先查看这些文档,以确保您能够将将来可能做出的任何更改应用于您的网络拓扑


例如,上面示例中的分配已经覆盖了整个寻址空间
“10.90.46.0/24”
,因此,如果您想在将来添加一个新的子网而不引入任何新的寻址空间,您需要将其中一个现有子网替换为一对替换子网,这两个子网都具有
新的\u位=4
,因此前缀长度为
/28
,而不是
/27
,这样您就可以有一个额外的可用位e表示网络编号。

您能提供一个代码示例,以及收到的错误消息吗?您能提供一个代码示例,以及收到的错误消息吗?这太棒了,但是否存在这样的情况?我可以给第一个子网10.90.46.0/27,然后它可以自动创建rest 8子网,而无需提及所有子网CIDR。我是我的另一个要求是创建16个子网,我不想手动放置该子网。在我的回答中添加以下内容:)如果这解决了您的问题,请标记为答案!@Rohitsinghat太棒了,但无论如何,我可以将第一个子网设置为10.90.46.0/27,然后它可以自动创建rest 8子网而无需任何修改启用所有子网CIDR。我要求的另一个要求是创建16个子网,我不想手动放置子网。在我的答案中添加以下内容:)如果这解决了您的问题,请标记为答案!@RohitSingh