You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确引用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_ids map对象上

验证示例

你可以添加以下输出块验证引用是否正确:

output "app_01_vm_id" {
  description = "app_01对应的虚拟机ID"
  value = module.vm_ADDS01.vm_ids["app_01"]
}

执行terraform plan就能看到对应的值会被正确解析,不会再抛出报错。

内容的提问来源于stack exchange,提问作者David Sampson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:36:04