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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:05:21