Terraform — aws_route_tables

#amazon-web-services #terraform #datasource

Вопрос:

Надеюсь, кто-нибудь сможет мне помочь, пожалуйста. В основном я пытаюсь использовать ресурс источника данных для aws_route_tables, а затем выполнить поиск по нему с помощью ресурса aws_route. Поэтому я пытаюсь здесь создать маршрут к транзитному шлюзу для каждой таблицы маршрутов, связанной с конкретным VPC. Однако я продолжаю получать эту ошибку:

 Error reading config for aws_route[rt_tgw]: parse error at 1:40: expected "}" but found "["
 

Это документация, которой я следовал:
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/route_tables

Кстати, я использую Terraform версии 11.15, и это код, который у меня есть:

 variable "environment_group" {
  description = "Name given to the resource"
  default = "test"
}

variable "create_tgw_route" {
  description = "Toggle to create the transit gateway route within the VPC route table"
  default = true
}

variable "tgw_route_cidr" {
  description = "Specify the destination cidr block for the transit gateway route within the VPC route table"
  default = "10.0.0.0/8"
}

variable "transit_gateway_id" {
  default = ""
  description = "Temporary variable that should be replaced by a data lookup in due time"
}

data "aws_vpc" "vpc_id" {
  count = "${var.create_tgw_route ? 1 : 0}"

  filter {
    name   = "tag:Name"
    values = ["vpc-${var.environment_group}"]
  }
}

data "aws_route_tables" "rtb" {
  count = "${var.create_tgw_route ? 1 : 0}"

  vpc_id = "${data.aws_vpc.vpc_id.id}"

  filter {
    name   = "tag:Name"
    values = ["rt-${var.environment_group}-*"]
  }
}

resource "aws_route" "rt_tgw" {
  count = "${var.create_tgw_route ? 1 : 0}"

  route_table_id            = "${tolist(data.aws_route_tables.rtb.ids)[count.index]}"
  destination_cidr_block    = "${var.tgw_route_cidr}"
  transit_gateway_id        = "${var.transit_gateway_id}"
}
 

Любая помощь будет очень признательна, пожалуйста. Заранее спасибо.

Комментарии:

1. Я не думаю, что это сработает. Для того чтобы использовать источник данных, вам сначала необходимо создать ресурс. Если только я чего-то не упустил из вашего вопроса.

2. таблицы маршрутов уже созданы из другого репозитория

3. Ах, прости, я виноват. Может быть, не хватает еще одного фрагмента кода? Кажется, что там не все. И публикация немного большего объема результатов на этапе планирования/применения, я думаю, поможет.

4. Коды, которые просто отсутствуют, являются переменными, т. е. transit_gateway_id, tgw_route_cidr и environment_group. Который, как я думал, не обязательно вставлять в вопрос, так как он в значительной степени прямолинейен с теми, вывод плана-это код ошибки, который я вставил в вопрос

5. К вашему сведению, вывод плана (ошибка) жалуется на значение route_table_id ресурса «aws_route», т. е. «${список(данные.aws_route_tables.rtb.ids)[счетчик.индекс]}»

Ответ №1:

Ладно, мне удалось это исправить. Я изменил блок ресурсов на этот:

 resource "aws_route" "rt_tgw" {
  count = "${var.create_tgw_route ? length(data.aws_route_tables.rtb.ids) : 0}"

  route_table_id            = "${data.aws_route_tables.rtb.ids[count.index]}"
  destination_cidr_block    = "${var.tgw_route_cidr}"
  transit_gateway_id        = "${var.transit_gateway_id}"
}
 

Итак, в основном я изменил 2 вещи.

  1. Изменение значения count для обеспечения того, чтобы в источнике данных отображалась таблица маршрутов, в которой будет указано количество созданных маршрутов. В этом случае 3 таблицы маршрутов = 3 созданных маршрута
  2. Изменение значения «route_table_id», так как по какой-то причине версии 11 не нравится, как это показано в документации.