Amazon web services Terraform cidrsubnet功能故障排除

Amazon web services Terraform cidrsubnet功能故障排除,amazon-web-services,terraform,public,subnet,Amazon Web Services,Terraform,Public,Subnet,我有一种情况,我试图在Terraform中使用cidrsubnet函数动态创建一些子网。以下是我对它的定义: data "aws_availability_zones" "availability_zones" { exclude_names = [ "us-west-2c", "us-west-2d" ] } locals { availability_zone_names = &quo

我有一种情况,我试图在Terraform中使用cidrsubnet函数动态创建一些子网。以下是我对它的定义:

data "aws_availability_zones" "availability_zones" {
  exclude_names = [
    "us-west-2c",
    "us-west-2d"
  ]
}
locals {
  availability_zone_names = "${data.aws_availability_zones.availability_zones.names}"
}

resource "aws_subnet" "public_subnets" {
  count = "${length(local.availability_zone_names)}"
  vpc_id = "${aws_vpc.vpc.id}"
  cidr_block = "${cidrsubnet(aws_vpc.vpc.cidr_block, 11, count.index)}"
  availability_zone = "${local.availability_zone_names[count.index]}"
  map_public_ip_on_launch = true

  tags {
    Name = "${var.name}-public.${local.availability_zone_names[count.index]}"
  }
}
我只是尝试在该区域的两个可用区域中创建这些子网(因此,我排除了2个AZ。应用此代码后,我在试图创建的其中一个子网中得到了我想要的结果。但是,我试图获得另一个子网的cidr块地址10.32.2.0/27,但cidrsubnet函数正在生成10.32.0.32/27。任何我出错的建议都会有所帮助

计划产出

aws_subnet.public_subnets[1]
  id:                              <computed>
  arn:                             <computed>
  assign_ipv6_address_on_creation: "false"
  availability_zone:               "us-west-2b"
  availability_zone_id:            <computed>
  cidr_block:                      "10.32.0.32/27"
aws_子网.公共_子网[1]
身份证件:
arn:
在创建时分配ipv6地址:“false”
可用性分区:“us-west-2b”
可用性\区域\标识:
cidr_区块:“10.32.0.32/27”

如果要使用前缀
/27
并希望子网为:

10.32.0.0/27
10.32.2.0/27
10.32.4.0/27
依此类推,然后您必须将索引乘以16,因为这些CIDR范围不是连续的:

cidr_block = "${cidrsubnet(aws_vpc.vpc.cidr_block, 11, count.index * 16)}"

如果要使用前缀
/27
,并希望子网为:

10.32.0.0/27
10.32.2.0/27
10.32.4.0/27
依此类推,然后您必须将索引乘以16,因为这些CIDR范围不是连续的:

cidr_block = "${cidrsubnet(aws_vpc.vpc.cidr_block, 11, count.index * 16)}"

什么是
aws_-vpc.vpc.cidr_block
?vpc-cidr是10.32.0.0/16什么是
aws_-vpc.vpc.cidr_block
?vpc-cidr是10.32.0.0/16
cidrsubnet
函数文档有可能是有用的背景,如果不清楚为什么这里需要乘以16的话。使用您自己的bas处理该示例可能会很有用e CIDR块和前缀长度,以查看每个操作如何更改地址。谢谢Martin。我确实看到了该文档,但理解它时仍有点困惑。我有一个问题,希望得到您的解释。由于我的newbits值设置为11,这意味着我的vpc CIDR前缀的长度将为27。我如何解释t在计算netnum参数时分解27位?如果不清楚为什么这里需要乘以16,那么
cidrsubnet
函数文档有哪些可能是有用的背景。使用您自己的基本CIDR块和前缀长度查看每个操作是如何改变a的,这可能会提供一些信息地址。谢谢Martin。我确实看到了那个文档,但理解它时仍然有点困惑。我有一个问题,希望得到您的解释。因为我的newbits值设置为11,这意味着我的vpc cidr前缀的长度为27。在计算netnum参数时,我如何解释分解27位?