#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 вещи.
- Изменение значения count для обеспечения того, чтобы в источнике данных отображалась таблица маршрутов, в которой будет указано количество созданных маршрутов. В этом случае 3 таблицы маршрутов = 3 созданных маршрута
- Изменение значения «route_table_id», так как по какой-то причине версии 11 не нравится, как это показано в документации.