我使用不同的KMS CMK创建一个AWS RDS实例,具体取决于环境是生产还是非生产。因此,我有两个资源使用地形计数,如果:
count = "${var.bluegreen == "nonprod" ? 1 : 0}"这将使用具有不同地址的不同KMS键的RDS实例。我需要捕获那个端点(在构建完成之后,我会用Terraform显示),那么为什么terraform中不工作呢?
output "rds_endpoint" {
value = "${var.bluegreen == "nonprod" ? aws_db_instance.rds_nonprod.address : aws_db_instance.rds_prod.address}"
}发布于 2017-07-20 16:19:52
访问具有count = 0的资源的属性是一个错误,不幸的是Terraform目前在其检查步骤中检查条件的“两边”,这样的表达式可能会失败。此外,当前的一种行为是,输出中的错误没有显式显示,因为在状态尚未完成时(例如,由于使用了-target),可以填充输出。在这种情况下,这些烦恼都归结为很大的混乱。
与在本例中使用条件表达式不同,使用"splat表达式“更好,在count = 0的情况下,该表达式计算为空列表。以下内容如下所示:
output "rds_endpoint" {
value = "${element(concat(aws_db_instance.rds_nonprod.*.address, aws_db_instance.rds_prod.*.address), 0)}"
}这是通过将所有非prod地址和所有prod地址连接在一起创建的列表的第一个元素。由于您如何在这些资源块上配置count,因此生成的列表将只包含一个元素,因此它将只接受该元素。
通常,要调试输出中的问题,可以在terraform console或配置中的其他地方计算表达式,以避免错误在输出上被忽略的限制。
https://stackoverflow.com/questions/45193048
复制相似问题