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

Terraform中Azure VM扩展引用VM ID报错问题求助

解决Terraform中Azure VM扩展引用对应VM ID的属性不存在错误

问题场景

使用Terraform创建Azure Windows VM模块,VM通过for_each循环批量创建。在配置azurerm_virtual_machine_extension资源时,尝试引用对应VM的ID,执行代码时报错:

virtual_machine_id   = azurerm_windows_virtual_machine.windowsvm[each.value.virtual_machines_name].id

each.value is object with 4 attributes

This object does not have an attribute named "virtual_machines_name"

错误原因

当前var.vm-ext变量的每个对象中,并未定义virtual_machines_name这个属性,导致Terraform无法找到该字段来关联对应的VM资源。

解决方案

1. 修正变量定义

确保var.vm-ext的变量结构包含用于关联VM的字段(比如vm_name,对应VM资源azurerm_windows_virtual_machine.windowsvm的for_each键或VM名称)。示例变量定义:

variable "vm-ext" {
  type = map(object({
    name                  = string
    vm_name               = string  # 新增:关联的VM名称/for_each键
    publisher             = string
    type                  = string
    type_handler_version  = string
  }))
  description = "Azure VM扩展配置"
}

2. 修正VM扩展资源的引用

将virtual_machine_id中的属性名改为变量中实际存在的字段(比如上面的vm_name),同时确保azurerm_windows_virtual_machine.windowsvm的for_each键与vm_name匹配。修正后的扩展资源代码:

resource "azurerm_windows_virtual_machine" "windowsvm" {
  for_each = var.virtual_machines
  name                = each.value.name
  resource_group_name = data.azurerm_resource_group.LBS_rg.name
  location            = data.azurerm_resource_group.LBS_rg.location
  size                = each.value.size
  admin_username      = each.value.admin_username
  admin_password      = each.value.admin_password

  # 补充VM资源的其他必填配置(比如network_interface_ids等,原代码缺失)
}

resource "azurerm_virtual_machine_extension" "vm-extensions" {
  for_each = var.vm-ext
  name                 = each.value.name
  virtual_machine_id   = azurerm_windows_virtual_machine.windowsvm[each.value.vm_name].id
  publisher            = each.value.publisher
  type                 = each.value.type
  type_handler_version = each.value.type_handler_version

  # 补充扩展资源的其他必填配置(比如settings等,原代码缺失)
}

额外注意事项

  • 确保var.virtual_machines的for_each键与var.vm-ext中vm_name的值一致,否则会出现找不到VM的错误。
  • 检查原代码中VM资源和扩展资源是否闭合了大括号(原代码中azurerm_windows_virtual_machine未闭合,会导致语法错误)。

内容的提问来源于stack exchange,提问作者Sarah Potrick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:15:15