Обработка Terraform AMI, возвращающего пустой список

Есть ли лучший способ, чем следующий, для обработки ресурса данных Terraform aws_ami_ids, возвращающего пустой список?

Всегда нужно, чтобы модуль возвращал последний идентификатор AMI, если он найден.

Если список был пуст, я получал «список» data.aws_ami_ids.full_unencrypted_ami.ids «не имеет никаких элементов, поэтому не могу определить тип». ошибка, так что это был обходной путь.

       data "aws_ami_ids" "full_unencrypted_ami" {
          name_regex  = "${var.ami_unencrypted_regex}"
          owners = ["123456789","self"]
       }

       locals {
         notfound = "${list("AMI Not Found")}"
         unencrypted_ami = "${concat(data.aws_ami_ids.full_unencrypted_ami.ids,local.notfound)}"
       }

       output "full_ami_unencrypted_id" {
         description = "Full Unencrypted AMI ID"
         value       = "${local.full_unencrypted_ami[0]}"
       }

person Alastair Montgomery    schedule 27.11.2018    source источник
comment
Что вы делаете, если AMI не найден? Вам нужно как-то с этим справиться или вы можете просто допустить ошибку Terraform?   -  person ydaetskcoR    schedule 27.11.2018
comment
@ydaetskcoR изначально использовал ресурс aws_ami_id, но ошибки при пустом результате, aws_ami_ids возвращают пустой список, но вызывающий код ожидает идентификатор AMI, поэтому потребуется рефакторинг для обработки списка, если он пуст или нет. Я ожидал, что терраформа потерпит неудачу позже, когда AMI Not Found Id будет использоваться в ASG и т. Д.   -  person Alastair Montgomery    schedule 27.11.2018
comment
А что делает вызывающий модуль с пустым списком? По умолчанию используется какой-то случайный AMI? Если он не может разумно справиться с этим, то почему вы пытаетесь сделать это вместо того, чтобы просто использовать источник данных aws_ami_id?   -  person ydaetskcoR    schedule 27.11.2018


Ответы (1)


1) Используйте aws_ami_id вместо aws_ami_ids, чтобы terraform apply не сработал, если AMI исчез, что вынудило вас обновить решение Terraform.

OR

2) Создайте два aws_ami_ids источника данных (второй является резервным), объедините результаты и возьмите первый элемент. Но, как намекнул ydaetskcoR, зачем вам этот неявный (возможно, необнаруженный) откат?

person Tiemen    schedule 03.12.2018