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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:52:43