Создавайте снимки нескольких томов EBS с помощью Terraform

Я пытаюсь создать снимки определенных томов EBS на основе тегов в определенном регионе AWS с помощью Terraform. Я пробовал фильтровать тома EBS на основе тегов. Я могу получить четкий вывод идентификатора тома EBS, когда в атрибуте фильтра указано только одно значение тега, но для нескольких значений я получаю следующую ошибку:

data.aws_ebs_volume.ebs_volume: data.aws_ebs_volume.ebs_volume: Ваш запрос вернул более одного результата. Попробуйте использовать более конкретные критерии поиска или установите для атрибута most_recent значение true.

Ниже мой шаблон терраформы:

data "aws_ebs_volume" "ebs_volume" {
  filter {
    name   = "tag:Name"
    values = ["EBS1","EBS2","EBS3"]
  }
}
output "ebs_volume_id" {
  value = "${data.aws_ebs_volume.ebs_volume.id}"
}

resource "aws_ebs_snapshot" "ebs_volume" {
  volume_id = "${data.aws_ebs_volume.ebs_volume.id}"
}

Есть ли четкий способ создания моментальных снимков нескольких томов EBS с использованием любого оператора цикла в terraform?


person Deependra Dangal    schedule 02.11.2018    source источник


Ответы (1)


Для перебора списков, создавая несколько ресурсы или источники данных.

В вашем случае вы можете сделать что-то вроде этого:

variable "ebs_volumes" {
  default = [
    "EBS1",
    "EBS2",
    "EBS3",
  ]
}

data "aws_ebs_volume" "ebs_volume" {
  count = "${length(var.ebs_volumes)}"

  filter {
    name   = "tag:Name"
    values = ["${var.ebs_volumes[count.index]}"]
  }
}

output "ebs_volume_ids" {
  value = ["${data.aws_ebs_volume.ebs_volume.*.id}"]
}

resource "aws_ebs_snapshot" "ebs_volume" {
  count     = "${length(var.ebs_volumes)}"
  volume_id = "${data.aws_ebs_volume.ebs_volume.*.id[count.index]}"
}
person ydaetskcoR    schedule 02.11.2018
comment
Вы забыли поставить кавычки в атрибуте значений фильтра ?? [$ {var.ebs_volumes [count.index]}]. В остальном это сработало как шарм. Спасибо!! - person Manoj Acharya; 04.11.2018