使用Azure Python SDK的start_copy_from_url API复制快照到磁盘遇错求助
解决Azure磁盘快照通过SAS URI复制到磁盘的错误
你用BlobClient来操作Azure托管磁盘的SAS URI是错误的——BlobClient仅适用于Azure Blob存储服务,而托管磁盘(Managed Disk)属于Compute服务范畴,两者的API协议不兼容,这是报错的核心原因。
下面是正确的解决步骤和代码示例:
1. 安装正确的SDK依赖
你需要使用Azure Compute管理SDK,而非Blob存储SDK来操作磁盘复制:
pip install azure-mgmt-compute azure-identity
2. 使用Compute SDK实现磁盘快照复制
通过azure-mgmt-compute提供的ComputeManagementClient,可以直接基于快照的SAS URI创建新磁盘(本质是完成复制):
from azure.mgmt.compute import ComputeManagementClient from azure.identity import DefaultAzureCredential # 初始化Compute管理客户端 subscription_id = "你的订阅ID" credential = DefaultAzureCredential() compute_client = ComputeManagementClient(credential, subscription_id) # 配置目标磁盘信息 resource_group_name = "你的资源组名称" target_disk_name = "目标磁盘名称" target_location = "目标磁盘所在区域(如eastus)" source_sas_uri = "快照的可读SAS URI" # 发起磁盘复制请求 copy_operation = compute_client.disks.begin_create_or_update( resource_group_name=resource_group_name, disk_name=target_disk_name, disk={ "location": target_location, "creation_data": { "create_option": "Copy", "source_uri": source_sas_uri }, # 根据需求配置磁盘规格 "disk_size_gb": 128, "sku": {"name": "Standard_LRS"} # 可选:Standard_LRS/Premium_LRS等 } ) # 等待复制完成(异步操作,result()会阻塞直到完成) copy_operation.result() print("磁盘复制完成")
3. 关键注意事项
- SAS权限检查:确保快照的SAS URI包含
读(r)权限,且SAS未过期;如果是跨区域复制,必须使用SAS URI,同区域复制可以直接使用快照的资源ID替代SAS URI。 - 磁盘规格匹配:目标磁盘的大小不能小于源快照的大小,否则会复制失败。
- 认证方式:示例中使用
DefaultAzureCredential,你也可以根据场景使用服务主体认证等方式。
内容的提问来源于stack exchange,提问作者user21402330
相关产品推荐
相关产品推荐

