Значение 'count' не может быть вычислено в Terraform - PullRequest
0 голосов
/ 20 декабря 2018

Здесь я пытаюсь создать по одному subnet для каждой зоны доступности, а затем связать route table с каждой из них.

locals {
  aws_region = "${var.aws_regions[var.profile]}"
  base_name = "${var.product}-${local.aws_region}"
  aws_avzones = {
    pro = ["eu-west-1a", "eu-west-1b", "eu-west-1c"]
    dev = ["eu-west-2a", "eu-west-2b", "eu-west-2c"]
  }
}

# ---

# Create VPC
resource "aws_vpc" "default" {
  cidr_block = "${var.vpc_cidr_block}"

  tags = {
    Name = "${local.base_name}-vpc"
  }
}

# ---

# Create public subnets - each in a different AZ
resource "aws_subnet" "public" {
  count                   = "${length(local.aws_avzones[var.profile])}"
  vpc_id                  = "${aws_vpc.default.id}"
  cidr_block              = "${cidrsubnet(var.vpc_cidr_block, 8, count.index)}"
  availability_zone       = "${element(local.aws_avzones[var.profile], count.index)}"
  map_public_ip_on_launch = 1

  tags = {
    "Name" = "Public subnet - ${element(local.aws_avzones[var.profile], count.index)}"
  }
}

# ---

# Create Internet gateway for inbound-outbound connections
resource "aws_internet_gateway" "default" {
  vpc_id = "${aws_vpc.default.id}"

  tags = {
    "Name" = "${local.base_name}-igw"
  }
}

# ---

# Create Internet gateway routes table
resource "aws_route_table" "pub" {
  vpc_id = "${aws_vpc.default.id}"

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = "${aws_internet_gateway.default.id}"
  }

  tags = {
    Name = "${local.base_name}-rtb-igw"
  }
}

# ---

# Associate public subnets with the public route table
resource "aws_route_table_association" "pub" {
  count          = "${length(aws_subnet.public.*.id)}"
  subnet_id      = "${element(aws_subnet.public.*.id, count.index)}"
  route_table_id = "${aws_route_table.pub.id}"
}

К сожалению terraform plan выдает ошибку:

  • aws_route_table_association.pub: aws_route_table_association.pub: значение 'count' не может быть вычислено

Почему его нельзя вычислить?Terraform не жаловался на это, когда инфра.все было в порядке, я обнаружил эту ошибку только после уничтожения при попытке воссоздать инфраструктуру.

В настоящее время мой обходной путь - закомментировать все блоки aws_route_table_association, затем terraform apply, раскомментировать, а затемзакончить работуОчевидно, что это очень далеко от идеала.

Кстати, я также попробовал явное объявление зависимости следующим образом:

resource "aws_route_table_association" "pub" {
  count          = "${length(aws_subnet.public.*.id)}"
  subnet_id      = "${element(aws_subnet.public.*.id, count.index)}"
  route_table_id = "${aws_route_table.pub.id}"

  depends_on = ["aws_subnet.public"]
}

Но это не помогло.

$ terraform --version
Terraform v0.11.11
+ provider.aws v1.52.0
...