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

Terraform导入Azure VM备份异常求助:单台VM资源ID读取失败

Terraform导入Azure VM备份资源失败

尝试为多台Azure VM通过Terraform导入备份配置,其中一台VM的资源ID始终无法被正确识别。该VM是Terraform已管理的现有资源,且相同代码在其他VM的备份导入中可正常运行。已尝试在Azure门户删除该备份后让Terraform重新创建,但terraform plan仍抛出相同错误。

已尝试的导入命令

第一种:

terraform import module.backup_protected_vm.azurerm_backup_protected_vm.backup_protected_vm[\"arv-sandbox-canadacentral-vmtestifrsweb01\"] "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/rg-sandbox-abkup/providers/Microsoft.RecoveryServices/vaults/arv-sandbox-canadacentral/backupFabrics/Azure/protectionContainers/iaasvmcontainer;iaasvmcontainerv2;rg-sandbox-web;vmtestifrsweb01/protectedItems/VM;iaasvmcontainerv2;rg-sandbox-web;vmtestifrsweb01"

第二种(修改资源组大小写):

terraform import module.backup_protected_vm.azurerm_backup_protected_vm.backup_protected_vm[\"arv-sandbox-canadacentral-vmtestifrsweb01\"] "/subscriptions/xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx/resourceGroups/rg-sandbox-abkup/providers/Microsoft.RecoveryServices/vaults/arv-sandbox-canadacentral/backupFabrics/Azure/protectionContainers/iaasvmcontainer;iaasvmcontainerv2;RG-SANDBOX-WEB;vmtestifrsweb01/protectedItems/VM;iaasvmcontainerv2;RG-SANDBOX-WEB;vmtestifrsweb01"

模块定义

resource "azurerm_backup_protected_vm" "backup_protected_vm" {
  for_each            = var.backup_protected_vms
  resource_group_name = each.value["resource_group_name"]
  recovery_vault_name = each.value["recovery_vault_name"]
  source_vm_id        = lookup(var.virtual_machine_ids, each.value["virtual_machine_variable_name"], null)
  backup_policy_id    = lookup(var.backup_policy_vm_ids, each.value["backup_policy_vm_variable_name"], null)
  protection_state    = each.value["protection_state"]
}

变量定义

variable "backup_protected_vms" {
  type = map(object({
    resource_group_name            = string
    recovery_vault_name            = string
    virtual_machine_variable_name  = string
    backup_policy_vm_variable_name = string
    protection_state               = string
  }))
}

tfvars配置

backup_protected_vms = {
 arv-sandbox-canadacentral-vmtestifrsweb01 = {
     resource_group_name            = "rg-sandbox-abkup"                  
     recovery_vault_name            = "arv-sandbox-canadacentral" 
     virtual_machine_variable_name  = "vmtestifrsweb01" 
     backup_policy_vm_variable_name = "arv-sandbox-canadacentral-SixtyDayBackupPolicy"        
     protection_state               = "Protected"                  
   }
}

排查建议

  • 核对资源ID大小写:Azure资源组名称在备份资源ID路径中区分大小写,用az group show -n rg-sandbox-web确认实际资源组名称的大小写,确保与导入ID中的完全一致。
  • 验证导入实例键匹配:导入命令中的实例键arv-sandbox-canadacentral-vmtestifrsweb01必须与backup_protected_vms映射中的键完全一致,检查是否有拼写、空格或大小写差异。
  • 确认备份资源彻底清理:删除Azure门户中的备份后,检查Recovery Services Vault的"备份项"页面,确保该VM的备份记录已完全移除,避免残留资源干扰导入。
  • 生成精准的备份资源ID:按照模板/subscriptions/{subId}/resourceGroups/{rgName}/providers/Microsoft.RecoveryServices/vaults/{vaultName}/backupFabrics/Azure/protectionContainers/iaasvmcontainer;iaasvmcontainerv2;{vmRgName};{vmName}/protectedItems/VM;iaasvmcontainerv2;{vmRgName};{vmName},从VM的资源ID中提取准确的资源组和VM名称,替换后生成导入ID。
  • 检查Terraform状态残留:执行terraform state list | grep arv-sandbox-canadacentral-vmtestifrsweb01,若存在残留记录,用terraform state rm <资源路径>删除后再重新导入。
  • 验证变量引用正确性:确认var.virtual_machine_ids中存在vmtestifrsweb01对应的正确VM ID,与Azure门户中VM的资源ID对比一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:04:57