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

如何使用Azure SDK为带现有OS盘和数据盘的多VM启用复制

使用Azure SDK为多台带现有磁盘的VM启用Site Recovery复制

前置准备

  1. 安装必要的Azure SDK包:
pip install azure-mgmt-recoveryservices azure-mgmt-recoveryservices-siterecovery azure-identity
  1. 确保已配置好Recovery Services保管库、复制策略,以及目标区域的缓存/目标存储资源。

核心实现代码

以下示例用Python SDK实现批量为VM启用复制,包含现有OS盘和数据盘的配置:

初始化客户端

from azure.identity import DefaultAzureCredential
from azure.mgmt.recoveryservices.siterecovery import RecoveryServicesSiteRecoveryClient

# 替换为你的订阅ID
SUBSCRIPTION_ID = "your-subscription-id"

credential = DefaultAzureCredential()
sr_client = RecoveryServicesSiteRecoveryClient(credential, SUBSCRIPTION_ID)

单VM复制启用函数

def enable_replication_for_vm(vm_name, source_rg, vault_name, vault_rg, replication_policy, target_rg, target_region, cache_storage_id):
    # 构建磁盘配置列表,包含OS盘和数据盘
    disk_configs = [
        # OS磁盘配置:替换为实际OS磁盘ID
        {
            "diskId": f"/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{source_rg}/providers/Microsoft.Compute/disks/your-os-disk-name",
            "isOsDisk": True,
            "recoveryAzureStorageAccountId": cache_storage_id
        },
        # 数据磁盘配置:可添加多个数据磁盘条目
        {
            "diskId": f"/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{source_rg}/providers/Microsoft.Compute/disks/your-data-disk-1-name",
            "isOsDisk": False,
            "recoveryAzureStorageAccountId": cache_storage_id
        }
    ]

    replication_input = {
        "properties": {
            "providerSpecificDetails": {
                "instanceType": "AzureVirtualMachine",
                "virtualMachineId": f"/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{source_rg}/providers/Microsoft.Compute/virtualMachines/{vm_name}",
                "recoveryAzureResourceGroupId": f"/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{target_rg}",
                "recoveryAzureRegion": target_region,
                "diskDetails": disk_configs,
                "policyId": f"/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{vault_rg}/providers/Microsoft.RecoveryServices/vaults/{vault_name}/replicationPolicies/{replication_policy}"
            }
        }
    }

    # 发起异步复制启用请求
    poller = sr_client.replication_protected_items.begin_create(
        resource_group_name=vault_rg,
        vault_name=vault_name,
        replication_protected_item_name=vm_name,
        input=replication_input
    )
    # 等待操作完成
    poller.result()
    print(f"VM {vm_name} 复制已成功启用")

批量处理多台VM

# 定义需要启用复制的VM列表
vm_batch = [
    {"name": "vm-prod-01", "source_rg": "rg-prod-eastus"},
    {"name": "vm-prod-02", "source_rg": "rg-prod-eastus"},
    {"name": "vm-dev-01", "source_rg": "rg-dev-eastus"}
]

# 替换为你的实际资源信息
VAULT_NAME = "your-recovery-vault"
VAULT_RG = "rg-vault-eastus"
REPLICATION_POLICY = "policy-daily-replication"
TARGET_RG = "rg-prod-westus"
TARGET_REGION = "westus"
CACHE_STORAGE_ID = f"/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{VAULT_RG}/providers/Microsoft.Storage/storageAccounts/your-cache-storage"

# 循环处理批量VM
for vm in vm_batch:
    try:
        enable_replication_for_vm(
            vm_name=vm["name"],
            source_rg=vm["source_rg"],
            vault_name=VAULT_NAME,
            vault_rg=VAULT_RG,
            replication_policy=REPLICATION_POLICY,
            target_rg=TARGET_RG,
            target_region=TARGET_REGION,
            cache_storage_id=CACHE_STORAGE_ID
        )
    except Exception as e:
        print(f"VM {vm['name']} 复制启用失败: {str(e)}")

关键注意事项

  • 所有磁盘必须处于未锁定状态,且无正在进行的磁盘操作
  • 目标区域的存储账户需支持磁盘复制(如标准/高级存储,与源磁盘类型匹配)
  • 若使用托管磁盘,无需指定目标存储账户,Azure会自动在目标资源组创建对应托管磁盘
  • 批量处理时建议添加异常捕获,避免单台VM失败中断整个流程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:50:13