PowerShell と Azure Resource Manager を使用して Azure に対する Hyper-V VM のディザスター リカバリーを設定する

Azure Site Recovery は、Azure 仮想マシン (VM)、オンプレミスの VM、および物理サーバーのレプリケーション、フェールオーバー、復旧を調整して、ビジネス継続性とディザスター リカバリー (BCDR) 戦略に貢献します。

この記事では、Windows PowerShell と Azure Resource Manager を使って、Hyper-V VM を Azure にレプリケートする方法を説明します。 この記事で使用している例では、Hyper-V ホストで実行されている 1 つの VM を Azure にレプリケートする方法を示します。

Note

Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を開始するには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

Azure PowerShell

Azure PowerShell は、Windows PowerShell を使用して Azure を管理するためのコマンドレットを提供します。 Azure 内のサーバーに対する保護と復旧は、Azure PowerShell 用 Azure Resource Manager に用意されている Site Recovery の PowerShell コマンドレットを使って行うことができます。

この記事の内容を使用するには PowerShell の専門家である必要はありませんが、モジュール、コマンドレット、セッションなどの基本的な概念を理解していることを前提としています。 詳細については、「PowerShell ドキュメント」と Azure Resource Manager での Azure PowerShell の使用に関する記事を参照してください。

Note

クラウド ソリューション プロバイダー (CSP) プログラムに参加しているマイクロソフト パートナーは、顧客のサーバーの保護を、それぞれの CSP サブスクリプション (テナント サブスクリプション) に対して構成および管理することができます。

開始する前に

次の前提条件を満たしていることを確認してください。

また、この記事で説明されている特定の例には、次の前提条件があります。

  • 1 つ以上の VM を含む Windows Server 2012 R2 または Microsoft Hyper-V Server 2012 R2 を実行する Hyper-V ホスト。 Hyper-V サーバーは、直接、またはプロキシを経由して、インターネットに接続されている必要があります。
  • レプリケートする VM は、こちらの前提条件に従う必要があります。

手順 1. Azure アカウントにログインする

  1. PowerShell コンソールを開いて次のコマンドを実行し、Azure アカウントにログインします。 Connect-AzAccount コマンドレットを実行すると、アカウントの資格情報の入力を求める Web ページが表示されます。

    • または、Credential パラメーターを使用して、Connect-AzAccount コマンドレットにパラメーターとしてアカウント資格情報を組み込むこともできます。
    • CSP パートナーがテナントの代理として活動している場合は、tenantID またはテナントのプライマリ ドメイン名を使用して顧客をテナントとして指定します。 例: Connect-AzAccount -Tenant "fabrikam.com"
  2. 1 つのアカウントが複数のサブスクリプションを持つことができるため、使用するサブスクリプションをアカウントに関連付けます。

    Set-AzContext -Subscription $SubscriptionName
    
  3. 次のコマンドを使用して、該当するサブスクリプションに対して Recovery Services 用と Site Recovery 用の Azure プロバイダーが登録され、使用できる状態になっていることを確認します。

    Get-AzResourceProvider -ProviderNamespace  Microsoft.RecoveryServices
    
  4. コマンド出力で RegistrationStateRegistered に設定されていることを確認し、手順 2. に進みます。 設定されていない場合は、次のコマンドを実行して、登録されていないプロバイダーを該当するサブスクリプションに登録する必要があります。

    Register-AzResourceProvider -ProviderNamespace Microsoft.RecoveryServices
    
  5. 次のコマンドを使用して、プロバイダーが正しく登録されたことを確認します。

    Get-AzResourceProvider -ProviderNamespace  Microsoft.RecoveryServices
    

手順 2: コンテナーを設定する

  1. 資格情報コンテナーの作成先となる Azure Resource Manager リソース グループを作成するか、既存のリソース グループを使用します。 次のように、新しいリソース グループを作成します。 $ResourceGroupName 変数には、作成するリソース グループの名前が含まれ、$Geo 変数には、リソース グループを作成する Azure リージョン (たとえば、"Brazil South") が含まれます。

    New-AzResourceGroup -Name $ResourceGroupName -Location $Geo
    
  2. サブスクリプション内のリソース グループの一覧を取得するには、Get-AzResourceGroup コマンドレットを実行します。

  3. 次のコマンドを使用して、Azure Recovery Services の新しい資格情報コンテナーを作成します。

    $vault = New-AzRecoveryServicesVault -Name <string> -ResourceGroupName <string> -Location <string>
    

Get-AzRecoveryServicesVault コマンドレットを使用して、既存のコンテナーの一覧を取得できます。

手順 3. Recovery Services 資格情報コンテナーのコンテキストを設定する

次のように、コンテナーのコンテキストを設定します。

Set-AzRecoveryServicesAsrVaultContext -Vault $vault

手順 4: Hyper-V サイトを作成する

  1. 次のコマンドを使用して、新しい Hyper-V サイトを作成します。

    $sitename = "MySite"                #Specify site friendly name
    New-AzRecoveryServicesAsrFabric -Type HyperVSite -Name $sitename
    
  2. このコマンドレットは Site Recovery ジョブを起動してサイトを作成し、Site Recovery ジョブ オブジェクトを返します。 ジョブの完了を待って、ジョブが正常に完了したことを確認します。

  3. Get-AzRecoveryServicesAsrJob コマンドレットを使用してジョブ オブジェクトを取得し、ジョブの現在の状態を確認します。

  4. 次のように、サイトの登録キーを生成してダウンロードします。

    $SiteIdentifier = Get-AzRecoveryServicesAsrFabric -Name $sitename | Select-Object -ExpandProperty SiteIdentifier
    $path = Get-AzRecoveryServicesVaultSettingsFile -Vault $vault -SiteIdentifier $SiteIdentifier -SiteFriendlyName $sitename
    
  5. ダウンロードしたキーを Hyper-V ホストにコピーします。 このキーは、Hyper-V ホストをサイトに登録するときに必要になります。

手順 5: プロバイダーとエージェントをインストールする

  1. 最新版のプロバイダーのインストーラーをマイクロソフトからダウンロードします。

  2. Hyper-V ホストでインストーラーを実行します。

  3. インストールが完了したら、そのまま登録手順に進みます。

  4. メッセージに従って、ダウンロードしたキーを入力し、Hyper-V ホストの登録を完了します。

  5. 次のように、Hyper-V ホストがサイトに登録されたことを確認します。

    $server = Get-AzRecoveryServicesAsrFabric -Name $siteName | Get-AzRecoveryServicesAsrServicesProvider -FriendlyName $server-friendlyname
    

Hyper-V コア サーバーを実行している場合は、セットアップ ファイルをダウンロードして、これらの手順に従います。

  1. 次のコマンドを実行して、AzureSiteRecoveryProvider.exe からローカル ディレクトリにファイルを抽出します。

    AzureSiteRecoveryProvider.exe /x:. /q
    
  2. 次のコマンドを実行します。

    .\setupdr.exe /i
    

    結果は、 %ProgramData%\ASRLogs\DRASetupWizard.log に記録されます。

  3. このコマンドを実行してサーバーを登録します。

    cd  C:\Program Files\Microsoft Azure Site Recovery Provider\DRConfigurator.exe" /r /Friendlyname "FriendlyName of the Server" /Credentials "path to where the credential file is saved"
    

手順 6: レプリケーション ポリシーを作成する

開始する前に、指定したストレージ アカウントがコンテナーと同じ Azure リージョンに存在しており、geo レプリケーションが有効になっている必要があります。

  1. 次のように、レプリケーション ポリシーを作成します。

    $ReplicationFrequencyInSeconds = "300";        #options are 30,300,900
    $PolicyName = “replicapolicy”
    $Recoverypoints = 6                    #specify the number of recovery points
    $storageaccountID = Get-AzStorageAccount -Name "mystorea" -ResourceGroupName "MyRG" | Select-Object -ExpandProperty Id
    
    $PolicyResult = New-AzRecoveryServicesAsrPolicy -Name $PolicyName -ReplicationProvider “HyperVReplicaAzure” -ReplicationFrequencyInSeconds $ReplicationFrequencyInSeconds -NumberOfRecoveryPointsToRetain $Recoverypoints -ApplicationConsistentSnapshotFrequencyInHours 1 -RecoveryAzureStorageAccountId $storageaccountID
    
  2. 返されたジョブをチェックし、レプリケーション ポリシーが正常に作成されたことを確認します。

  3. 次のように、サイトに対応する保護コンテナーを取得します。

    $protectionContainer = Get-AzRecoveryServicesAsrProtectionContainer
    
  4. 次のように、保護コンテナーをレプリケーション ポリシーに関連付けます。

    $Policy = Get-AzRecoveryServicesAsrPolicy -FriendlyName $PolicyName
    $associationJob = New-AzRecoveryServicesAsrProtectionContainerMapping -Name $mappingName -Policy $Policy -PrimaryProtectionContainer $protectionContainer[0]
    
  5. 関連付けが正常に完了するのを待ちます。

  6. 保護コンテナー マッピングを取得します。

    $ProtectionContainerMapping = Get-AzRecoveryServicesAsrProtectionContainerMapping -ProtectionContainer $protectionContainer
    

手順 7: VM 保護を有効にする

  1. 次のように、保護する VM に対応する保護可能な項目を取得します。

    $VMFriendlyName = "Fabrikam-app"          #Name of the VM
    $ProtectableItem = Get-AzRecoveryServicesAsrProtectableItem -ProtectionContainer $protectionContainer -FriendlyName $VMFriendlyName
    
  2. VM を保護します。 保護対象の VM に複数のディスクが接続されている場合は、OSDiskName パラメーターを使用してオペレーティング システム ディスクを指定します。

    $OSType = "Windows"          # "Windows" or "Linux"
    $DRjob = New-AzRecoveryServicesAsrReplicationProtectedItem -ProtectableItem $VM -Name $VM.Name -ProtectionContainerMapping $ProtectionContainerMapping -RecoveryAzureStorageAccountId $StorageAccountID -OSDiskName $OSDiskNameList[$i] -OS $OSType -RecoveryResourceGroupId $ResourceGroupID
    
  3. 初回レプリケーション後、VM が保護された状態になるまで待ちます。 これには、レプリケートされるデータ量と Azure で使用できるアップストリーム帯域幅などの要因に応じて、しばらく時間がかかることがあります。 保護された状態になると、ジョブの State および StateDescription は次のように更新されます。

    PS C:\> $DRjob = Get-AzRecoveryServicesAsrJob -Job $DRjob
    
    PS C:\> $DRjob | Select-Object -ExpandProperty State
    Succeeded
    
    PS C:\> $DRjob | Select-Object -ExpandProperty StateDescription
    Completed
    
  4. 復旧のプロパティ (VM ロール サイズなど)、およびフェールオーバー後に VM NIC を接続する Azure ネットワークを更新します。

    PS C:\> $nw1 = Get-AzVirtualNetwork -Name "FailoverNw" -ResourceGroupName "MyRG"
    
    PS C:\> $VMFriendlyName = "Fabrikam-App"
    
    PS C:\> $rpi = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $protectionContainer -FriendlyName $VMFriendlyName
    
    PS C:\> $UpdateJob = Set-AzRecoveryServicesAsrReplicationProtectedItem -InputObject $rpi -PrimaryNic $VM.NicDetailsList[0].NicId -RecoveryNetworkId $nw1.Id -RecoveryNicSubnetName $nw1.Subnets[0].Name
    
    PS C:\> $UpdateJob = Get-AzRecoveryServicesAsrJob -Job $UpdateJob
    
    PS C:\> $UpdateJob | Select-Object -ExpandProperty state
    
    PS C:\> Get-AzRecoveryServicesAsrJob -Job $job | Select-Object -ExpandProperty state
    
    Succeeded
    

Note

Azure で CMK が有効になっているマネージド ディスクにレプリケートする場合は、Az PowerShell 3.3.0 以降を使用して次の手順を実行します。

  1. VM のプロパティを更新して、マネージド ディスクへのフェールオーバーを有効にします
  2. Get-AzRecoveryServicesAsrReplicationProtectedItem コマンドレットを使用して、保護された項目の各ディスクのディスク ID を取得します
  3. New-Object "System.Collections.Generic.Dictionary``2[System.String,System.String]" コマンドレットを使用して、ディスク暗号化セットに対するディスク ID のマッピングを含めるディクショナリ オブジェクトを作成します。 これらのディスク暗号化セットは、ターゲット リージョンで事前に作成されている必要があります。
  4. ディクショナリ オブジェクトを DiskIdToDiskEncryptionSetMap パラメーターで渡すことにより、Set-AzRecoveryServicesAsrReplicationProtectedItem コマンドレットを使用して VM のプロパティを更新します。

手順 8:テスト フェールオーバーの実行

  1. 次のように、テスト フェールオーバーを実行します。

    $nw = Get-AzVirtualNetwork -Name "TestFailoverNw" -ResourceGroupName "MyRG" #Specify Azure vnet name and resource group
    
    $rpi = Get-AzRecoveryServicesAsrReplicationProtectedItem -ProtectionContainer $protectionContainer -FriendlyName $VMFriendlyName
    
    $TFjob = Start-AzRecoveryServicesAsrTestFailoverJob -ReplicationProtectedItem $VM -Direction PrimaryToRecovery -AzureVMNetworkId $nw.Id
    
  2. Azure でテスト VM が作成されていることを確認します。 テスト フェールオーバー ジョブは、Azure にテスト VM を作成した後に中断されます。

  3. クリーンアップして、テスト フェールオーバーを完了するには、次を実行します。

    $TFjob = Start-AzRecoveryServicesAsrTestFailoverCleanupJob -ReplicationProtectedItem $rpi -Comment "TFO done"
    

次のステップ

Azure Site Recovery と Azure Resource Manager PowerShell コマンドレットの詳細を確認します。