如何使用Azure SDK为带现有OS盘和数据盘的多VM启用复制
使用Azure SDK为多台带现有磁盘的VM启用Site Recovery复制
前置准备
- 安装必要的Azure SDK包:
pip install azure-mgmt-recoveryservices azure-mgmt-recoveryservices-siterecovery azure-identity
- 确保已配置好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
相关产品推荐
相关产品推荐

