处理Terraform AMI返回空列表

处理Terraform AMI返回空列表,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,有没有比下面更好的方法来处理返回空列表的地形数据资源aws\u ami\u ID 始终希望模块返回最新的AMI ID(如果找到) 如果列表为空,我将获得一个“列表”数据。aws\u ami\u ids.full\u unencrypted\u ami.ids“没有任何元素,因此无法确定类型。”错误,因此这是解决方法 data "aws_ami_ids" "full_unencrypted_ami" { name_regex = "${var.ami_unenc

有没有比下面更好的方法来处理返回空列表的地形数据资源aws\u ami\u ID

始终希望模块返回最新的AMI ID(如果找到)

如果列表为空,我将获得一个“列表”数据。aws\u ami\u ids.full\u unencrypted\u 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]}"
       }
1) 使用
aws\u-ami\u id
而不是
aws\u-ami\u id
,以便
terraform apply
在ami消失时失败,迫使您更新terraform解决方案

2) 创建两个
aws\u ami\u id
数据源(第二个是备用数据源),收集结果并获取第一项。但是,正如所暗示的,为什么您希望这种隐式(可能未被检测到的)回退?

1)使用
aws\u ami\u id
而不是
aws\u ami\u id
,以便
terraform apply
在ami消失时失败,迫使您更新terraform解决方案


2) 创建两个
aws\u ami\u id
数据源(第二个是备用数据源),收集结果并获取第一项。但是,正如所暗示的,为什么您希望这种隐式(可能未被检测到)回退?

如果没有找到AMI,您会怎么做?您是否需要以某种方式处理该问题,或者您可以让Terraform出错?@ydaetskcoR最初使用的是aws_ami_id资源,但如果出现空结果错误,aws_ami_id将返回一个空列表,但调用代码需要一个ami id,因此需要重构来处理列表,以及列表是否为空。我希望terraform稍后会失败,因为“AMI Not Found”Id将用于ASG等。调用模块如何处理空列表?它是否默认为一些随机AMI?如果它不能合理地处理它,那么为什么你要尝试这样做而不是仅仅使用
aws\u ami\u id
数据源呢?如果没有找到ami,你会怎么做?您是否需要以某种方式处理该问题,或者您可以让Terraform出错?@ydaetskcoR最初使用的是aws_ami_id资源,但如果出现空结果错误,aws_ami_id将返回一个空列表,但调用代码需要一个ami id,因此需要重构来处理列表,以及列表是否为空。我希望terraform稍后会失败,因为“AMI Not Found”Id将用于ASG等。调用模块如何处理空列表?它是否默认为一些随机AMI?如果它不能合理地处理它,那么为什么您要尝试这样做,而不是仅仅使用
aws\u ami\u id
数据源?