📝

Azure Site Recovery のネットワークマッピングの設定を Azure PowerShell で変更する

2023/05/09に公開

TL;DR

Azure Site Recovery の Azure から Azure へのシナリオで、フェールオーバー先の仮想マシンの所属する仮想ネットワーク、サブネットを PowerShell で変更する方法を紹介します。

動機

Azure Site Recovery では、仮想マシンの登録の段階で、フェールオーバー先の仮想ネットワーク、サブネットのマッピングが可能です。
さまざまな理由から登録の段階で設定したこのマッピングを後で変更したいことがあります。

マッピングの設定はあとで Recovery Service コンテナ単位で変更できるのですが、コンテナ単位で変更しても既存の仮想マシンの設定は変更されません。
既存の仮想マシンのマッピングを変更したい場合は、ポータルからぽちぽち1つずつ設定を変更していくか Azure PowerShell を使ってまとめて変更できます。

ポータルでは以下の画面から設定します。

スクリプト

以下 PowerShell のスクリプトです。

スクリプトを実行する前に Connect-AzAccount で Azure にログインしておいてください。
変数は適宜実際の環境に合わせて変更してください。

# Site Recover コンテナが展開されているリソースグループ名
$resourceGroupName = "vm-asr-jw-0308"
# Site Recover コンテナ名
$vaultName = "asr-0308-jw"
# ソースファブリックのフレンドリー名(Azure から Azure へのシナリオではリージョン名を表す)
$sourceFabricFriendlyName = "Japan East"
# フェールオーバー先の仮想ネットワークの ID
$recoveryVMNetworkId = "/subscriptions/<SubscriptionID>/resourcegroups/vm-asr-jw-0308/providers/microsoft.network/virtualnetworks/vnet-japaneast-asr"
# フェールオーバー用のサブネット名
$recoverySubnetName = "default"
# テストフェールオーバー用のサブネット名
$recoveryTestFOSubnetName = "default"

# Site Recovery コンテナのコンテキストを設定する
$vault = Get-AzRecoveryServicesVault -Name $vaultName -ResourceGroupName $resourceGroupName
Set-ASRVaultContext -Vault $vault

# 保護されている仮想マシンの一覧を取得する
$sourceFabric = Get-ASRFabric -FriendlyName $sourceFabricFriendlyName
$sourceContainer = Get-ASRProtectionContainer -Fabric $sourceFabric
$replicatedItems = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $sourceContainer

# 各 VM に対してターゲット仮想マシンのプロパティを設定する
# - New-Az*Config で設定を作成し、Set-AzRecoveryServicesAsrReplicationProtectedItem で設定を反映する
foreach ($replicatedItem in $replicatedItems) {
    "Start NIC configuration update: " + $replicatedItem.FriendlyName
    # 全ての NIC の設定を変更する
    $nics = @()
    foreach ($nic in $replicatedItem.NicDetailsList) {
        # NIC の IP 設定を変更する
        $ipconfigs = @()
        foreach ($ipconfig in $nic.IpConfigs){
            $ipConfigs += New-AzRecoveryServicesAsrVMNicIPConfig -IpConfigName $ipconfig.Name -RecoverySubnetName $recoverySubnetName -TfoSubnetName $recoveryTestFOSubnetName
        }
        $nics  += New-AzRecoveryServicesAsrVMNicConfig -NicId $nic.NicId -ReplicationProtectedItem $replicatedItem -RecoveryVMNetworkId $recoveryVMNetworkId -TfoVMNetworkId $recoveryVMNetworkId -IPConfig $ipconfigs
    }
    # 仮想マシンのプロパティを更新する
    Set-AzRecoveryServicesAsrReplicationProtectedItem -InputObject $replicatedItem -ASRVMNicConfiguration $nics
}

参照ドキュメント

https://learn.microsoft.com/ja-jp/azure/site-recovery/azure-to-azure-network-mapping
https://learn.microsoft.com/ja-jp/azure/site-recovery/azure-to-azure-powershell
https://learn.microsoft.com/ja-jp/azure/site-recovery/site-recovery-ipconfig-cmdlet-parameter-deprecation

Microsoft (有志)

Discussion