如何解决在单个terraform资源中具有受控的循环
我正在尝试根据用户输入创建子网,比如说4(var.number_of_private_subnets)。我希望它们位于不同的可用区(Az)中。我观察到terraform有时会利用所有可用的Az,有时却没有。因此,出于这个原因,我不想将其留给地形来选择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关于该问题的评论。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。