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

Azure Python SDK触发备份磁盘恢复时出现ResourceNotFoundError求助

Azure RecoveryServicesBackupClient 恢复磁盘时出现ResourceNotFoundError(CLI操作成功)

问题描述

尝试从备份保管库恢复点将VM磁盘恢复至不同资源组和存储账户,Azure CLI操作可成功创建磁盘,但使用Azure RecoveryServicesBackupClient的begin_trigger方法时触发ResourceNotFoundError,异常未提供未找到资源的详细信息。

成功的Azure CLI操作

执行后磁盘成功创建,后续已删除以便Python复用同一恢复点:

az backup restore restore-disks --vault-name <MASKED VAULT NAME> --item-name "VM;iaasvmcontainerv2;<MASKED RGNAME>;lvmarctest01" --resource-group "<MASKED RGNAME>" --rp-name 933115606147395682 --storage-account stscn0equdevscn --storage-account-resource-group <MASKED TARGET RG> --container-name "IaasVMContainer;iaasvmcontainerv2;<MASKED RGNAME>;lvmarctest01" —target-resource-group <MASKED TARGET RG>

失败的Python SDK代码

trigger_restore_properties = IaasVMRestoreRequest(
    recovery_type = "RestoreDisks",
    restore_with_managed_disks = True,
    recovery_point_id = '/subscriptions/<MASKED SUBSCRIPTION##########>/resourceGroups/<MASKED RGNAME>/providers/Microsoft.RecoveryServices/vaults/<MASKED VAULT NAME>/backupFabrics/Azure/protectionContainers/IaasVMContainer;iaasvmcontainerv2;<MASKED RGNAME>;lvmarctest01/protectedItems/VM;iaasvmcontainerv2;<MASKED RGNAME>;lvmarctest01/recoveryPoints/933115606147395682',
    storage_account_id = "/subscriptions/<MASKED SUBSCRIPTION##########>/resourceGroups/<MASKED TARGET RG>/providers/Microsoft.Storage/storageAccounts/stscn0equdevscn",
    target_resource_group_id = "/subscriptions/<MASKED SUBSCRIPTION##########>/resourceGroups/<MASKED TARGET RG>")
trigger_restore_request = RestoreRequestResource(properties=trigger_restore_properties)
poller=rsbc.restores.begin_trigger(
    vault_name = "<MASKED VAULT NAME>",
    resource_group_name = "<MASKED RGNAME>",
    fabric_name = "Azure",
    container_name = "iaasVMContainer;iaasvmcontainerv2;<MASKED RGNAME>;lvmarctest01",
    protected_item_name = "VM;iaasvmcontainerv2;<MASKED RGNAME>;lvmarctest01",
    recovery_point_id = '/subscriptions/<MASKED SUBSCRIPTION##########>/resourceGroups/<MASKED RGNAME>/providers/Microsoft.RecoveryServices/vaults/<MASKED VAULT NAME>/backupFabrics/Azure/protectionContainers/IaasVMContainer;iaasvmcontainerv2;<MASKED RGNAME>;lvmarctest01/protectedItems/VM;iaasvmcontainerv2;<MASKED RGNAME>;lvmarctest01/recoveryPoints/933115606147395682',
    parameters=trigger_restore_request,
    polling = False)

报错堆栈

File "<stdin>", line 1, in <module>
  File "/Users/suibin/Desktop/Projects/DXC/BunkerProject/venv/lib/python3.10/site-packages/azure/core/tracing/decorator.py", line 78, in wrapper_use_tracer
    return func(*args, **kwargs)
  File "/Users/suibin/Desktop/Projects/DXC/BunkerProject/venv/lib/python3.10/site-packages/azure/mgmt/recoveryservicesbackup/activestamp/operations/_restores_operations.py", line 212, in begin_trigger
    raw_result = self._trigger_initial(
  File "/Users/suibin/Desktop/Projects/DXC/BunkerProject/venv/lib/python3.10/site-packages/azure/mgmt/recoveryservicesbackup/activestamp/operations/_restores_operations.py", line 150, in _trigger_initial
    map_error(status_code=response.status_code, response=response, error_map=error_map)
  File "/Users/suibin/Desktop/Projects/DXC/BunkerProject/venv/lib/python3.10/site-packages/azure/core/exceptions.py", line 107, in map_error
    raise error
azure.core.exceptions.ResourceNotFoundError: Operation returned an invalid status 'Not Found

问题排查与修正方案

核心问题:资源名称大小写不匹配

对比CLI和Python代码的参数,发现container_name参数存在大小写差异:

  • CLI中使用的是IaasVMContainer(首字母I大写)
  • Python代码中使用的是iaasVMContainer(首字母i小写)

Azure资源标识符是大小写敏感的,这会导致服务无法找到对应的保护容器,从而触发ResourceNotFoundError。

修正后的Python代码

将container_name修正为与CLI一致的大小写格式,同时可移除begin_trigger中重复传递的recovery_point_id(该参数已包含在IaasVMRestoreRequest中):

trigger_restore_properties = IaasVMRestoreRequest(
    recovery_type = "RestoreDisks",
    restore_with_managed_disks = True,
    recovery_point_id = '/subscriptions/<MASKED SUBSCRIPTION##########>/resourceGroups/<MASKED RGNAME>/providers/Microsoft.RecoveryServices/vaults/<MASKED VAULT NAME>/backupFabrics/Azure/protectionContainers/IaasVMContainer;iaasvmcontainerv2;<MASKED RGNAME>;lvmarctest01/protectedItems/VM;iaasvmcontainerv2;<MASKED RGNAME>;lvmarctest01/recoveryPoints/933115606147395682',
    storage_account_id = "/subscriptions/<MASKED SUBSCRIPTION##########>/resourceGroups/<MASKED TARGET RG>/providers/Microsoft.Storage/storageAccounts/stscn0equdevscn",
    target_resource_group_id = "/subscriptions/<MASKED SUBSCRIPTION##########>/resourceGroups/<MASKED TARGET RG>")
trigger_restore_request = RestoreRequestResource(properties=trigger_restore_properties)
poller=rsbc.restores.begin_trigger(
    vault_name = "<MASKED VAULT NAME>",
    resource_group_name = "<MASKED RGNAME>",
    fabric_name = "Azure",
    container_name = "IaasVMContainer;iaasvmcontainerv2;<MASKED RGNAME>;lvmarctest01",  # 修正大小写
    protected_item_name = "VM;iaasvmcontainerv2;<MASKED RGNAME>;lvmarctest01",
    parameters=trigger_restore_request,
    polling = False)

额外验证点

  1. 确认所有资源ID(存储账户、目标资源组)的格式和大小写完全正确
  2. 确保RecoveryServicesBackupClient使用的订阅和权限与CLI一致
  3. 检查恢复点ID是否有效(可通过CLI命令az backup recoverypoint show验证)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:20:28