Terraform如何获取ElastiCache集群cache_nodes的address属性?
解答
你给出的两种写法都无法正确获取到节点的address属性,核心原因是aws_elasticache_cluster资源导出的cache_nodes字段是对象列表类型,而非单个对象、也不是键值对map类型。
两种错误写法的问题说明
aws_elasticache_cluster.api.cache_nodes["address"]:列表类型仅支持整数索引,不支持字符串作为键取值,该写法会直接触发类型校验错误。aws_elasticache_cluster.api.cache_nodes.address:列表本身不存在address属性,只有列表内存储的每个节点对象才包含address字段,该写法同样会报类型不匹配错误。
正确用法
你配置的是单节点集群(num_cache_nodes = 1),cache_nodes列表长度固定为1,直接取列表下标为0的元素,再读取其address属性即可:
output "redis_host" { value = aws_elasticache_cluster.api.cache_nodes[0].address }
如果后续调整为多节点集群,需要获取所有节点地址时,可以使用splat表达式快速拿到所有节点的address列表:
output "redis_all_hosts" { value = aws_elasticache_cluster.api.cache_nodes[*].address }
注:资源创建过程中
cache_nodes会是未知值,上述写法不需要额外加显式依赖,Terraform会在集群部署完成、属性值可用后自动解析输出结果。
内容的提问来源于stack exchange,提问作者Christian Townsend
相关产品推荐
相关产品推荐

