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)
额外验证点
- 确认所有资源ID(存储账户、目标资源组)的格式和大小写完全正确
- 确保RecoveryServicesBackupClient使用的订阅和权限与CLI一致
- 检查恢复点ID是否有效(可通过CLI命令
az backup recoverypoint show验证)
内容的提问来源于stack exchange,提问作者user20744808
相关产品推荐
相关产品推荐

