Terraform 地形变量和计数=0

Terraform 地形变量和计数=0,terraform,Terraform,我们在所有环境中使用相同的地形定义。到目前为止效果不错,但现在我面临着一个无法解决的问题。我有一个RDS和ElastiCache,用于我现在正在设置的演示环境中不需要的服务,因此我将计数设置为0。对于其他环境,我需要通过输出变量公开它们: resource "aws_elasticache_cluster" "cc_redis" { cluster_id = "cc-${var.env}" engine = "redis" node_type = "cache.t2.small"

我们在所有环境中使用相同的地形定义。到目前为止效果不错,但现在我面临着一个无法解决的问题。我有一个RDS和ElastiCache,用于我现在正在设置的演示环境中不需要的服务,因此我将
计数设置为
0
。对于其他环境,我需要通过输出变量公开它们:

resource "aws_elasticache_cluster" "cc_redis" {
  cluster_id = "cc-${var.env}"
  engine = "redis"
  node_type = "cache.t2.small"
  security_group_ids = ["..."]
  count = "${var.env == "demo" ? 0 : 1}"
}

output "cc_redis_host" {
  value = "${aws_elasticache_cluster.cc_redis.cache_nodes.0.address}"
}
现在我得到了这个错误:

output.cc_redis_host: Resource 'aws_elasticache_cluster.cc_redis' not found
for variable 'aws_elasticache_cluster.cc_redis.cache_nodes.0.address'

我不介意(非常)有一个无用的变量集,但我一开始就不能让它工作。一个简单的条件不能解决这个问题,因为terraform计算条件的错误方面,即使它没有被使用。我找到了,但也无法使其工作。

将输出更改为以下内容:

output "cc_redis_host" {
  value = "${element(concat(aws_elasticache_cluster.cc_redis.cache_nodes.*. address, list("")), 0)}"
}
它被记录在terraform网站的某个地方。

试试这个:

output "cc_redis" {
  value = "${element(concat(aws_elasticache_cluster.cc_redis.*.cache_nodes.0.address, list("")), 0)}"
}
TF似乎并不关心如果在链的更高层使用通配符,则计数可能为0


这可能会输出比您想要的更多的内容,但您可以从中解析出您需要的内容。

谢谢,但这不起作用。使用
address
I获取
Error reading config for output cc_redis_host:parse Error at 1:86:expected“)但找到了“address”
如果没有空间,我仍然会得到
output.cc_redis_host:Resource'aws_elasticache_cluster.cc_redis'变量'aws_elasticache_cluster.cc_redis.cache_nodes.*.address'
尝试:输出“cc_redis_host”{value=“${元素(concat(aws_elasticache_cluster.cc_redis.*.cache_节点,列表(“”),0)}我会接受这个答案,因为它会引导我找到正确的解决方案,谢谢。我想要的值是“${element(concat(aws_elasticache_cluster.cc_redis.*.cache_nodes.0.address,list(“”),0)}”