terraform-provider-aws - 如何为 terraform 中的有限索引运行 count.index
问题描述
有什么方法可以为某些索引值而不是列表中的所有值运行 count.index。我有一个列表变量
variable "subnets_cidr" {
type = list
default = ["172.17.1.0/24", "172.17.2.0/24", "172.17.3.0/24","172.17.10.0/24","172.17.11.0/24","172.17.12.0/24"]
}
和一个子网
# Subnets : Public
resource "aws_subnet" "public" {
count = length(var.subnets_cidr)
vpc_id = aws_vpc.terra_vpc.id
cidr_block = element(var.subnets_cidr,count.index)
availability_zone = element(var.azs,count.index)
map_public_ip_on_launch = true
tags = {
Name = element(var.pub_sub_names, count.index)
}
}
使用上面的代码正在创建 6 个子网,但我不希望这样,我想限制只创建 3 个子网。我正在考虑像 count.index[1:3] 一样对 count.index 变量进行切片,但它不起作用。
还使用以下用于路由表关联的代码,它关联了所有子网,但在这里我也想限制子网的数量。例如说前 3 个子网。
# Route table association with public subnets
resource "aws_route_table_association" "a" {
count = length(var.subnets_cidr)
subnet_id = element(aws_subnet.public.*.id,count.index)
route_table_id = aws_route_table.public_rt.id
}
解决方案
除了使用计数,您可以将本地变量用于不同的子网,将子网用于一个子网范围,将子网二用于其他子网范围
locals {
teams = {
"subnetone" = {
subnet1 = "172.17.1.0/24"
subnet2 = "172.17.2.0/24"
subnet3 = "172.17.3.0/24"
},
"subnettwo" = {
subnet4 = "172.17.10.0/24"
subnet5 = "172.17.11.0/24"
subnet6 = "172.17.12.0/24"
}
}
}
resource "aws_subnet" "public" {
for_each = local.teams.subnetone
cidr_block = each.value
vpc_id = "vpc-09c37360e8b599296"
}
推荐阅读
- javascript - 我无法在 javascript 中跨越类我的 × 警报(引导程序)
- django - 为什么表单在 FormView 中无效?
- spring-data - 没有显式类型的 Spring 数据注入存储库
- c# - 过滤mongodb数据采集过滤器
- python - 无法修补/模拟从我正在编写单元测试用例的实例函数之一调用的实例函数
- c++ - 树的后序遍历
- django - 在后端选择之前更新 Django 中的模型
- python - 如何从另一个 sql 表中获取一个值并在 jinja 中显示它?
- python - 用卖空计算投资组合对数回报
- matlab - 具有正值和负值的堆积条形图中的排序和颜色(Matlab)