Терраформ не может ссылаться на ресурс по индексу - PullRequest
1 голос
/ 02 октября 2019

У меня есть экземпляр aws, игнорируемый следующим образом:

resource "aws_instance" "an_instance" {
  count                       = "${var.instance_count}"
......
}

, который прекрасно работает, НО, когда я добавляю этот фрагмент

resource "aws_ebs_volume" "on_host_1_1" {
  availability_zone = "${aws_instance.an_instance[1].availability_zone}"
  snapshot_id       = "snap-abcdca8ee59112345f"
  tags              = "${local.all_tags}"
}

Я получаю следующую ошибку:

Error reading config for aws_ebs_volume[on_host_1_1]: parse error at 1:31: expected "}" but found "."

Есть идеи, что не так?

Terraform v0.11.14
+ provider.aws v2.25.0

1 Ответ

0 голосов
/ 02 октября 2019

Вам необходимо использовать правильный синтаксис для ссылки на определенный элемент списка. С документацией можно ознакомиться здесь . Особо обратите внимание на упоминание раздела:

Для ссылки на конкретный экземпляр ресурса вы можете использовать resource.foo.*.id[#], где # - номер индекса экземпляра.

Следовательно, ваш ресурс с правильным синтаксисом будет:

resource "aws_ebs_volume" "on_host_1_1" {
  availability_zone = "${aws_instance.an_instance.*.availability_zone[1]}"
  snapshot_id       = "snap-abcdca8ee59112345f"
  tags              = "${local.all_tags}"
}

, который даст вам желаемое поведение. Это работает потому, что оператор splat * правильно показывает Terraform, что вывод ресурса представляет собой список, а не один тип элемента.

...