在单个 terraform 资源中控制循环
Have controlled loops in a single terraform resource
我正在尝试根据用户输入创建子网,比方说 4(var.number_of_private_subnets)。我希望它们位于不同的可用区 (Az) 中。我观察到 Terraform 有时会使用所有可用的 Az,有时则不会。所以出于这个原因,我不想把它留给 terraform 来选择 AZ
data aws_availability_zones "azs"{
state = "available"
}
resource "aws_subnet" "private_subnet" {
count = var.number_of_private_subnets
cidr_block = cidrsubnet(aws_vpc.main_vpc.cidr_block,8, count.index )
vpc_id = aws_vpc.main_vpc.id
availability_zone = data.aws_availability_zones.azs.names[count.index]
tags = {
Name = "${var.env_name}-PrivateSubnet-${count.index+1}"
}
}
如果特定 aws_region
的可用 az 为 3,此代码将失败,它将尝试访问列表中的第 4 个元素,因为用户输入为 4。
我是否可以创建 4 个子网来控制 availability_zone
,使子网跨越所有可用区域?
您可以使用 modulo operator (%
):
availability_zone = data.aws_availability_zones.azs.names[count.index % 3]
或更好,
availability_zone = data.aws_availability_zones.azs.names[count.index % len(data.aws_availability_zones.azs.names)]
此外,对于直接跳到答案的任何人,请务必阅读 Martin Atkins 对该问题的评论。
我正在尝试根据用户输入创建子网,比方说 4(var.number_of_private_subnets)。我希望它们位于不同的可用区 (Az) 中。我观察到 Terraform 有时会使用所有可用的 Az,有时则不会。所以出于这个原因,我不想把它留给 terraform 来选择 AZ
data aws_availability_zones "azs"{
state = "available"
}
resource "aws_subnet" "private_subnet" {
count = var.number_of_private_subnets
cidr_block = cidrsubnet(aws_vpc.main_vpc.cidr_block,8, count.index )
vpc_id = aws_vpc.main_vpc.id
availability_zone = data.aws_availability_zones.azs.names[count.index]
tags = {
Name = "${var.env_name}-PrivateSubnet-${count.index+1}"
}
}
如果特定 aws_region
的可用 az 为 3,此代码将失败,它将尝试访问列表中的第 4 个元素,因为用户输入为 4。
我是否可以创建 4 个子网来控制 availability_zone
,使子网跨越所有可用区域?
您可以使用 modulo operator (%
):
availability_zone = data.aws_availability_zones.azs.names[count.index % 3]
或更好,
availability_zone = data.aws_availability_zones.azs.names[count.index % len(data.aws_availability_zones.azs.names)]
此外,对于直接跳到答案的任何人,请务必阅读 Martin Atkins 对该问题的评论。