amazon-web-services - 在单个 terraform 资源中具有受控循环
问题描述
我正在尝试根据用户输入创建子网,比如说 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}"
}
}
如果特定的可用 az 为aws_region
3,则此代码将失败,它会尝试访问列表中的第 4 个元素,因为用户输入为 4。
无论如何,我可以在哪里创建 4 个子网来控制子网availability_zone
,从而使子网跨越所有可用区域?
解决方案
您可以使用模运算符( %
):
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 对此问题的评论。
推荐阅读
- react-native - 对已打开的键盘做出反应的本机 KeyboardAvoidingView 无法正常工作
- python - 提高限制后将用户重定向到索引
- python - Python程序将学生的数据及其分数输入到一个文本文件和另一个包含百分比递减学生的文件中
- vba - VBA - 查找最后一列
- r - 有没有办法在 gtsummary 中将两列折叠成一列?
- c - 不使用 cairo_surface_set_device_scale 调整图像大小
- sql - Is Not Null 参数在 CASE 中给出错误
- javascript - 如何在 JavaScript 中将 mouseover 和 mouseout 事件转换为触摸事件?
- c# - BricsCAD 环境中的设置保存在哪里?
- reactjs - NextJS 文件夹结构