如何正确引用Terraform模块输出的map类型vm_ids的单个条目
Terraform模块map输出的正确引用方法
错误核心原因
你遇到的报错本质是因为引用字符串类型的map键时没有添加引号,Terraform会将未加引号的app_01识别为资源标识符或者变量名,找不到对应声明就会抛出你看到的报错。同时你的vm_ids输出的每个值本身就是虚拟机ID字符串,不需要额外追加.id属性。
正确引用写法
固定字符串键的场景
直接给键名添加双引号即可:
module.vm_ADDS01.vm_ids["app_01"]
动态变量键的场景
如果键值存储在变量、本地值或者其他资源属性中,直接引用对应变量即可,不需要加引号:
# 示例:键存储在变量中 variable "target_vm_key" { type = string default = "app_01" } # 引用写法 module.vm_ADDS01.vm_ids[var.target_vm_key]
原有错误写法说明
module.vm_ADDS01.vm_ids[app_01]:键名app_01未加引号,被Terraform识别为未声明的资源/变量module.vm_ADDS01.vm_ids[app_01].id:除了键名未加引号的问题外,vm_ids的每个值本身就是虚拟机ID字符串,不存在id属性,追加属性会进一步报错module.vm_ADDS01[app_01].vm_ids:模块本身不是map结构,不能在模块名后直接加索引,索引需要作用在模块输出的vm_idsmap对象上
验证示例
你可以添加以下输出块验证引用是否正确:
output "app_01_vm_id" { description = "app_01对应的虚拟机ID" value = module.vm_ADDS01.vm_ids["app_01"] }
执行terraform plan就能看到对应的值会被正确解析,不会再抛出报错。
内容的提问来源于stack exchange,提问作者David Sampson
相关产品推荐
相关产品推荐

