Amazon web services Terraform:如何从一个资源块创建多个aws子网?

Amazon web services Terraform:如何从一个资源块创建多个aws子网?,amazon-web-services,terraform,Amazon Web Services,Terraform,我试图从一个资源块创建多个子网,但出现以下错误 错误:aws_subnet.private:cidr_块必须是单个值,而不是列表 main.tf resource "aws_subnet" "private" { vpc_id = "${aws_vpc.vpcname.id}" cidr_block = "${var.private_subnet}" availability_zone = "${data.aws

我试图从一个资源块创建多个子网,但出现以下错误

错误:aws_subnet.private:cidr_块必须是单个值,而不是列表

main.tf

resource "aws_subnet" "private" {
  vpc_id                  = "${aws_vpc.vpcname.id}"
  cidr_block              = "${var.private_subnet}"
  availability_zone       = "${data.aws_availability_zones.available.names[count.index]}"
  map_public_ip_on_launch = false

  tags {
    Name        = "${var.private}"
    Environment = "${terraform.workspace}"
  }
}
variable "private_subnet" {
  type    = "list"
  default = []
}
变量。tf

resource "aws_subnet" "private" {
  vpc_id                  = "${aws_vpc.vpcname.id}"
  cidr_block              = "${var.private_subnet}"
  availability_zone       = "${data.aws_availability_zones.available.names[count.index]}"
  map_public_ip_on_launch = false

  tags {
    Name        = "${var.private}"
    Environment = "${terraform.workspace}"
  }
}
variable "private_subnet" {
  type    = "list"
  default = []
}
dev.tfvars

private_subnet = ["10.0.2.0/24", "10.0.3.0/24"]

private\u subnet
是一个列表,因此您应该选择单个元素,例如


cidr\u block=“${element(var.private\u subnet,count.index)}”
private\u subnet
是一个列表,因此您应该选择单个元素,例如


cidr\u block=“${element(var.private\u subnet,count.index)}”
您必须通过利用
count
参数为
var.private\u subnet
列表中的每个条目创建一个资源来创建多个
aws\u子网
资源:

resource "aws_subnet" "private" {
  count                   = "${length(var.private_subnet)}"
  vpc_id                  = "${aws_vpc.vpcname.id}"
  cidr_block              = "${var.private_subnet[count.index]}"
  availability_zone       = "${data.aws_availability_zones.available.names[count.index]}"
  map_public_ip_on_launch = false
}

这将单个aws_子网资源扩展为两个,当terraform对每个资源块进行评估时,每个资源块的值根据
count
的枚举略有不同。

您必须通过利用
count
参数为
var.private\u子网
列表中的每个条目创建一个资源来创建多个
aws\u子网
资源:

resource "aws_subnet" "private" {
  count                   = "${length(var.private_subnet)}"
  vpc_id                  = "${aws_vpc.vpcname.id}"
  cidr_block              = "${var.private_subnet[count.index]}"
  availability_zone       = "${data.aws_availability_zones.available.names[count.index]}"
  map_public_ip_on_launch = false
}

这将单个
aws_子网
资源扩展为两个,当每个资源块由terraform评估时,每个资源块的值根据
count
的枚举略有不同。

这起作用,但依赖于下面列出的私有子网的另一个资源块代码不起作用<代码>资源“aws_nat_gateway”“nat”{allocation_id=“${aws_eip.eipname.id}”subnet_id=“${aws_subnet.private.id}”依赖于=[“aws_internet_gateway.gw”]标记{Name=“${var.natgateway}”环境=“${terraform workspace}”此操作有效,但依赖于下面列出的专用子网的其他资源块代码无效<代码>资源“aws_nat_gateway”“nat”{allocation_id=“${aws_eip.eipname.id}”subnet_id=“${aws_subnet.private.id}”依赖于=[“aws_internet_gateway.gw”]标记{Name=“${var.natgateway}”环境=“${terraform workspace}}