首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输出的Terraform插值

输出的Terraform插值
EN

Stack Overflow用户
提问于 2017-07-19 14:06:34
回答 1查看 663关注 0票数 2

我使用不同的KMS CMK创建一个AWS RDS实例,具体取决于环境是生产还是非生产。因此,我有两个资源使用地形计数,如果:

代码语言:javascript
复制
count = "${var.bluegreen == "nonprod" ? 1 : 0}"

这将使用具有不同地址的不同KMS键的RDS实例。我需要捕获那个端点(在构建完成之后,我会用Terraform显示),那么为什么terraform中不工作呢?

代码语言:javascript
复制
output "rds_endpoint" {
    value = "${var.bluegreen == "nonprod" ? aws_db_instance.rds_nonprod.address : aws_db_instance.rds_prod.address}"
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-20 16:19:52

访问具有count = 0的资源的属性是一个错误,不幸的是Terraform目前在其检查步骤中检查条件的“两边”,这样的表达式可能会失败。此外,当前的一种行为是,输出中的错误没有显式显示,因为在状态尚未完成时(例如,由于使用了-target),可以填充输出。在这种情况下,这些烦恼都归结为很大的混乱。

与在本例中使用条件表达式不同,使用"splat表达式“更好,在count = 0的情况下,该表达式计算为空列表。以下内容如下所示:

代码语言:javascript
复制
output "rds_endpoint" {
    value = "${element(concat(aws_db_instance.rds_nonprod.*.address, aws_db_instance.rds_prod.*.address), 0)}"
}

这是通过将所有非prod地址和所有prod地址连接在一起创建的列表的第一个元素。由于您如何在这些资源块上配置count,因此生成的列表将只包含一个元素,因此它将只接受该元素。

通常,要调试输出中的问题,可以在terraform console或配置中的其他地方计算表达式,以避免错误在输出上被忽略的限制。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45193048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档