如何在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变量进行切片,例如count.index [1:3],但它不起作用。

也使用下面的路由表关联代码,它关联了所有子网,但在这里我也想限制子网的数量。例如说前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
}

解决方法

除了使用count之外,还可以将Locals用于不同的子网 将subnetone用于一个子网范围,将subnettwo用于其他子网范围

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"
}