如何通过Python自动化Runbook配置Azure Site Recovery的VM复制
使用Python在Azure Runbook中启用Azure Site Recovery VM复制
前提准备
- 确保Runbook已配置Azure自动化账户的Run As账户,拥有Azure Site Recovery和VM的相关权限(比如
Microsoft.RecoveryServices/vaults/replicationFabrics/replicationProtectionContainers/replicationProtectedItems/write等) - 在自动化账户的模块库中添加
azure-mgmt-recoveryservices和azure-mgmt-recoveryservices-siterecovery两个Python包
核心实现代码
以下是对应Azure到Azure场景的Python实现示例,可直接在Runbook中使用:
from azure.identity import DefaultAzureCredential from azure.mgmt.recoveryservices import RecoveryServicesClient from azure.mgmt.recoveryservices.siterecovery import SiteRecoveryManagementClient from azure.mgmt.recoveryservices.siterecovery.models import ( EnableProtectionInput, EnableProtectionInputProperties, AzureToAzureEnableProtectionInput, AzureToAzureDiskInputDetails ) # 替换为你的实际资源参数 SUBSCRIPTION_ID = "<订阅ID>" VAULT_NAME = "<Recovery Services Vault名称>" RESOURCE_GROUP_NAME = "<Vault所在资源组>" SOURCE_VM_ID = "<源VM资源ID>" TARGET_REGION = "<目标区域,如'westus2'>" TARGET_RESOURCE_GROUP = "<目标资源组ID>" TARGET_VM_SIZE = "<目标VM大小,如'Standard_D2s_v3'>" REPLICATION_POLICY_NAME = "<预先创建的复制策略名称>" SOURCE_REGION = "<源VM所在区域,如'southeastasia'>" SOURCE_OS_DISK_ID = "<源VM的OS磁盘ID>" LOG_STORAGE_ACCOUNT_ID = "<用于复制日志存储的账户ID>" # 初始化Azure客户端 credential = DefaultAzureCredential() rs_client = RecoveryServicesClient(credential, SUBSCRIPTION_ID) sr_client = SiteRecoveryManagementClient(credential, SUBSCRIPTION_ID) # 获取Vault资源ID vault = rs_client.vaults.get(RESOURCE_GROUP_NAME, VAULT_NAME) vault_id = vault.id # 获取源区域的复制Fabric和保护容器 source_fabric = sr_client.replication_fabrics.get( resource_group_name=RESOURCE_GROUP_NAME, vault_name=VAULT_NAME, fabric_name=SOURCE_REGION ) protection_container = sr_client.replication_protection_containers.get( resource_group_name=RESOURCE_GROUP_NAME, vault_name=VAULT_NAME, fabric_name=source_fabric.name, protection_container_name=source_fabric.name ) # 构建磁盘复制配置(可扩展添加数据磁盘) disk_details = [ AzureToAzureDiskInputDetails( disk_id=SOURCE_OS_DISK_ID, log_storage_account_id=LOG_STORAGE_ACCOUNT_ID, disk_type="Standard_LRS" ) ] # 构建启用复制的核心参数 azure_replication_input = AzureToAzureEnableProtectionInput( target_resource_group_id=TARGET_RESOURCE_GROUP, target_vm_size=TARGET_VM_SIZE, target_region=TARGET_REGION, disks_to_include=disk_details ) enable_protection_params = EnableProtectionInput( properties=EnableProtectionInputProperties( protection_profile_id=f"{vault_id}/replicationPolicies/{REPLICATION_POLICY_NAME}", source_recovery_protection_container_id=protection_container.id, provider_specific_details=azure_replication_input ) ) # 触发启用复制操作 operation = sr_client.replication_protected_items.begin_create_or_update( resource_group_name=RESOURCE_GROUP_NAME, vault_name=VAULT_NAME, fabric_name=source_fabric.name, protection_container_name=protection_container.name, replicated_protected_item_name="<自定义复制项名称,建议用源VM名>", enable_protection_input=enable_protection_params ) # 等待操作完成 operation.wait() print("VM复制已成功启用")
关键注意事项
- 参数替换:所有
<>包裹的内容必须替换为你的实际Azure资源信息 - 磁盘扩展:若需复制数据磁盘,可通过
azure-mgmt-compute客户端获取源VM的所有磁盘ID,批量添加到disk_details列表中 - 权限验证:Run As账户需拥有目标资源组的写入权限、Recovery Services Vault的管理权限,以及源VM的读取权限
- 复制策略:需提前在Recovery Services Vault中创建好对应区域的Azure到Azure复制策略
内容的提问来源于stack exchange,提问作者satish B
相关产品推荐
相关产品推荐

