<p><!--META
{
"title": "Azure Site RecoveryによるDR計画とフェイルオーバー",
"primary_category": "クラウド>Azure",
"secondary_categories": ["DR","BCP","Site Recovery"],
"tags": ["Azure Site Recovery", "ASR", "災害復旧", "フェイルオーバー", "Recovery Services Vault", "PowerShell"],
"summary": "Azure Site Recovery (ASR) を用いた災害復旧 (DR) 計画の策定とフェイルオーバー戦略について、アーキテクチャ、設定、運用、セキュリティ、コスト、落とし穴を解説します。",
"mermaid": true,
"verify_level": "L0",
"tweet_hint": {"text":"Azure Site Recovery (ASR) を活用したDR計画とフェイルオーバーについて徹底解説。アーキテクチャから設定、セキュリティ、コスト、運用まで網羅。クラウドアーキテクト必見のガイドです。","hashtags":["#Azure","#DR","#SiteRecovery"]},
"link_hints": ["https://learn.microsoft.com/ja-jp/azure/site-recovery/site-recovery-overview"]
}
-->
本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">Azure Site RecoveryによるDR計画とフェイルオーバー</h1>
<h2 class="wp-block-heading">はじめに</h2>
<p>クラウド環境における事業継続性 (BC) および災害復旧 (DR) は、ビジネスの中断を最小限に抑える上で不可欠な要素です。Microsoft Azureが提供するAzure Site Recovery (ASR) は、オンプレミス環境や異なるAzureリージョン間での仮想マシン (VM) のレプリケーションとオーケストレーションされたフェイルオーバーを可能にする堅牢なDRソリューションです。本記事では、クラウドアーキテクトの視点から、ASRを用いたDR計画の策定、実装、運用、セキュリティ、コスト最適化、そして潜在的な落とし穴について解説します。</p>
<h2 class="wp-block-heading">アーキテクチャの概要</h2>
<p>Azure Site Recoveryは、プライマリリージョンのVMからセカンダリリージョンへと継続的にデータをレプリケートし、障害発生時にはセカンダリリージョンにVMを起動して事業継続を図るサービスです。これにより、データ損失とサービス停止時間を最小限に抑えることが可能です。</p>
<p>主な構成要素は以下の通りです[1]:</p>
<ul class="wp-block-list">
<li><p><strong>Recovery Services Vault</strong>: ASRの構成、レプリケーション、リカバリープラン、監視を一元管理するハブです。</p></li>
<li><p><strong>ソースリソース</strong>: 保護対象となるAzure VM。</p></li>
<li><p><strong>ターゲットリソース</strong>: フェイルオーバー先のAzureリージョンに事前に準備されるリソース(ストレージアカウント、仮想ネットワーク、サブネットなど)。</p></li>
<li><p><strong>レプリケーションポリシー</strong>: RPO (目標復旧時点) やレプリケーション頻度、保持期間などを定義します。</p></li>
<li><p><strong>リカバリープラン</strong>: 複数のVMをグループ化し、フェイルオーバー時の起動順序やスクリプト実行、手動アクションを定義する自動化された手順書です。</p></li>
</ul>
<p>以下に、Azure VMからAzure VMへのASRレプリケーションおよびフェイルオーバーの基本的なアーキテクチャフローを示します。</p>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
flowchart TD
subgraph プライマリリージョン
A["ソースVNet"] --> B["ソースVM(\"エージェント\")"]
B --|レプリケーション| C("ストレージアカウント")
end
subgraph Recovery Services Vault (RSV)
C --|レプリケーションデータ| D("ASRサービス")
D --|レプリケーションポリシー| E["リカバリープラン"]
end
subgraph セカンダリリージョン (DRサイト)
F["ターゲットVNet"] --> G["ターゲットサブネット"]
H("ターゲットストレージアカウント") --|データ復元| I["フェイルオーバーVMディスク"]
E --|フェイルオーバー指示| J("フェイルオーバー処理")
J --|VM作成| K["フェイルオーバーVM"]
K --|ネットワーク接続| F
end
B --|継続的レプリケーション| C
C --|データ保存| H
D --|構成管理| A
D --|構成管理| F
J --|起動順序と設定| K
</pre></div>
<p><em>出典: Microsoft Learnを基に作成 [1]</em></p>
<h2 class="wp-block-heading">設定手順</h2>
<p>ここでは、Azure VMからAzure VMへのASRを設定する際のPowerShellコマンドレットの例を示します。</p>
<div class="codehilite">
<pre data-enlighter-language="generic"># 前提:
# - Azureサブスクリプションにログイン済み
# - ソースとターゲットのAzureリージョン、VNet、サブネットが準備済み
# - 適切な権限 (例: Recovery Services Contributor) を持つアカウントで実行
# - Azure Az PowerShellモジュールがインストール済み
# --- 1. Recovery Services Vault の作成 ---
# ASRの構成と管理を行うVaultを作成します。
$resourceGroupName = "asr-dr-rg"
$vaultName = "asr-dr-vault"
$location = "japaneast" # プライマリリージョンと同じか近いリージョン
Write-Host "Recovery Services Vaultを作成中..."
New-AzResourceGroup -Name $resourceGroupName -Location $location | Out-Null
$vault = New-AzRecoveryServicesVault -Name $vaultName -ResourceGroupName $resourceGroupName -Location $location
Write-Host "Recovery Services Vault '$vaultName' が作成されました。"
# Vaultのコンテキストを設定
Set-AzRecoveryServicesAsrVaultContext -Vault $vault
# --- 2. レプリケーションポリシーの作成 ---
# RPO目標やデータ保持期間などを定義します。
$policyName = "default-replication-policy"
$recoveryPointRetentionInHours = 24 # 24時間分の復旧ポイントを保持
$applicationConsistentFrequencyInHours = 4 # アプリケーション整合性スナップショットの頻度
Write-Host "レプリケーションポリシーを作成中..."
$policy = New-AzRecoveryServicesAsrPolicy -Name $policyName `
-RecoveryPointRetentionInHours $recoveryPointRetentionInHours `
-ApplicationConsistentFrequencyInHours $applicationConsistentFrequencyInHours `
-ReplicationFrequencyInSeconds 300 # 5分ごとにデータレプリケーション
Write-Host "レプリケーションポリシー '$policyName' が作成されました。"
# --- 3. 保護対象VMの有効化 (レプリケーションの開始) ---
# ソースVMを指定し、ターゲットリージョンのVNet、サブネット、キャッシュストレージなどを設定します。
$sourceVMName = "MySourceVM"
$sourceVMResourceGroup = "SourceVM-RG"
$targetLocation = "japanwest" # ターゲットリージョン
$targetResourceGroup = "asr-dr-target-rg"
$targetVnetName = "TargetVNet"
$targetSubnetName = "default" # ターゲットVNetの既存サブネット名
# 既存のVMを取得
$sourceVM = Get-AzVM -Name $sourceVMName -ResourceGroupName $sourceVMResourceGroup
# ターゲットリソースグループの作成 (存在しない場合)
New-AzResourceGroup -Name $targetResourceGroup -Location $targetLocation -Force | Out-Null
# ターゲットVNetとサブネットを取得
$targetVnet = Get-AzVirtualNetwork -Name $targetVnetName -ResourceGroupName $targetResourceGroup
$targetSubnet = Get-AzVirtualNetworkSubnetConfig -Name $targetSubnetName -VirtualNetwork $targetVnet
# ASRレプリケーションプロバイダーの取得
$provider = Get-AzRecoveryServicesAsrFabric -Azure | Select-Object -First 1
# ASRレプリケーション保護アイテムの作成 (レプリケーションの有効化)
Write-Host "VM '$sourceVMName' のレプリケーションを有効化中..."
$protectionContainer = Get-AzRecoveryServicesAsrProtectionContainer -Fabric $provider -Name $vault.Name
$protectionContainerMapping = Get-AzRecoveryServicesAsrProtectionContainerMapping -ProtectionContainer $protectionContainer -Policy $policy
# ターゲット構成オブジェクトを作成
$diskMappings = @()
foreach ($disk in $sourceVM.StorageProfile.DataDisks) {
$diskMappings += New-AzRecoveryServicesAsrAzureToAzureDiskReplicationConfig -DiskId $disk.Id -LogStorageAccountId $vault.Properties.MonitoringStorageAccount
}
$osDisk = $sourceVM.StorageProfile.OsDisk
$diskMappings += New-AzRecoveryServicesAsrAzureToAzureDiskReplicationConfig -DiskId $osDisk.Id -LogStorageAccountId $vault.Properties.MonitoringStorageAccount -IsOSDisk
$networkNic = $sourceVM.NetworkProfile.NetworkInterfaces[0].Id
$networkAdapterConfig = New-AzRecoveryServicesAsrVMNicConfig -NicId $networkNic -TargetSubnetName $targetSubnet.Name -TargetStaticIPAddress $null # DHCPの場合
# $networkAdapterConfig = New-AzRecoveryServicesAsrVMNicConfig -NicId $networkNic -TargetSubnetName $targetSubnet.Name -TargetStaticIPAddress "10.0.0.10" # 固定IPの場合
Start-AzRecoveryServicesAsrReplicationProtectedItem `
-AzureToAzure `
-VirtualMachineId $sourceVM.Id `
-ProtectionContainerMapping $protectionContainerMapping `
-RecoveryResourceGroupId $targetResourceGroup `
-RecoveryVirtualNetworkId $targetVnet.Id `
-DiskReplicationConfig $diskMappings `
-Nic $networkAdapterConfig `
-Policy $policy `
-Name ($sourceVMName + "-replication") `
-EnableReplication
Write-Host "VM '$sourceVMName' のレプリケーションが有効化されました。初期レプリケーションが開始されます。"
# --- 4. リカバリープランの作成 (オプションだが推奨) ---
# 複数のVMや手動/自動スクリプト実行を含む複雑なフェイルオーバーをオーケストレーションします。
$recoveryPlanName = "MyRecoveryPlan"
Write-Host "リカバリープラン '$recoveryPlanName' を作成中..."
$replicationProtectedItem = Get-AzRecoveryServicesAsrReplicationProtectedItem -FriendlyName $sourceVMName
New-AzRecoveryServicesAsrRecoveryPlan -Name $recoveryPlanName `
-PrimaryFabric $provider `
-RecoveryFabric $provider `
-ReplicationProtectedItem $replicationProtectedItem `
-Direction AzureToAzure `
-Vault $vault
Write-Host "リカバリープラン '$recoveryPlanName' が作成されました。"
# --- 5. テストフェイルオーバーの実行 ---
# 本番環境に影響を与えずにDR計画の有効性を検証します。
Write-Host "テストフェイルオーバーを実行中..."
Start-AzRecoveryServicesAsrTestFailover -RecoveryPlan $recoveryPlanName -Direction PrimaryToRecovery -Vault $vault
Write-Host "テストフェイルオーバーが開始されました。結果はAzureポータルで確認してください。"
# テストフェイルオーバーのクリーンアップ
# Test-Failover が完了したら、結果を確認し、テスト環境を削除する必要があります。
# $testFailoverJob = Get-AzRecoveryServicesAsrJob | Where-Object { $_.Properties.ScenarioName -eq "TestFailover" -and $_.State -eq "Succeeded" } | Select-Object -First 1
# if ($testFailoverJob) {
# Remove-AzRecoveryServicesAsrTestFailover -Job $testFailoverJob -Vault $vault
# }
</pre>
</div>
<p><em>出典: Microsoft Learnを基に作成 [5]</em></p>
<h2 class="wp-block-heading">運用監視</h2>
<p>ASRの運用においては、レプリケーションの状態、フェイルオーバーの成功率、RTO (目標復旧時間) / RPO (目標復旧時点) の達成度を継続的に監視することが重要です。</p>
<ul class="wp-block-list">
<li><p><strong>ASRダッシュボード</strong>: Recovery Services Vault内で、レプリケーション状態、エラー、未解決のインシデントを一目で確認できます[6]。</p></li>
<li><p><strong>Azure Monitorとの統合</strong>: ASRはAzure Monitorと連携し、ログ分析ワークスペースにイベントログを送信できます。これにより、レプリケーションエラー、保護状態の変更、フェイルオーバーイベントなどを詳細に分析し、カスタムアラートを設定することが可能です[6]。</p></li>
<li><p><strong>アラート設定</strong>: レプリケーションの遅延、クリティカルなエラー、保護状態の喪失などが発生した場合に、メール、SMS、Webhookなどを通じて関係者に通知されるようアラートルールを設定します。</p></li>
<li><p><strong>DRドリル (テストフェイルオーバー)</strong>: 定期的にテストフェイルオーバーを実施し、リカバリープランの有効性、RTOの達成度、アプリケーションの動作確認を行います。これはDR計画の信頼性を維持するために最も重要な運用活動です[2]。Microsoftは、少なくとも年1回のテストを推奨しています。</p></li>
<li><p><strong>SLA</strong>: Azure Site Recoveryは特定のSLAを直接提供しませんが、基盤となるAzure VMやストレージ、ネットワークのSLAが適用されます。RTO/RPOはDR計画の設計とテスト結果に大きく依存します。</p></li>
</ul>
<h2 class="wp-block-heading">セキュリティ</h2>
<p>Azure Site Recoveryにおけるセキュリティは、データレプリケーション、アクセス制御、ネットワーク保護の各側面で確保されます。</p>
<ul class="wp-block-list">
<li><p><strong>Azure RBAC (ロールベースのアクセス制御)</strong>: Recovery Services Vaultおよび保護対象リソースへのアクセスを最小限の権限で管理します。主要なロールには以下があります[4]:</p>
<ul>
<li><p><code>Site Recovery Contributor</code>: ASRサービスを管理する完全な権限。</p></li>
<li><p><code>Site Recovery Operator</code>: フェイルオーバーとテストフェイルオーバーを実行する権限。</p></li>
<li><p><code>Virtual Machine Contributor</code>: フェイルオーバー後にVMを管理する権限。</p></li>
<li><p><code>Network Contributor</code>: フェイルオーバー後にネットワーク設定を管理する権限。</p></li>
</ul></li>
<li><p><strong>Managed Identity</strong>: ASRエージェントはマネージドIDを利用して認証を行い、リソースへのアクセスを安全に行います。</p></li>
<li><p><strong>データ暗号化</strong>:</p>
<ul>
<li><p><strong>保管中のデータ</strong>: ASRがレプリケーションに使用するストレージアカウントは、Azure Storageの保存データ暗号化 (AES-256) によって保護されます。</p></li>
<li><p><strong>転送中のデータ</strong>: レプリケーションデータは、転送中にTLS 1.2以上で暗号化されます。</p></li>
</ul></li>
<li><p><strong>ネットワークセキュリティグループ (NSG)</strong>: ソースおよびターゲットの仮想ネットワークでは、レプリケーションに必要な特定のポート (例: HTTPS 443) のみを開放し、不必要なトラフィックを制限します。</p></li>
<li><p><strong>プライベートエンドポイント</strong>: レプリケーションデータ転送にプライベートエンドポイントを使用することで、パブリックインターネットを経由せずにセキュアな接続を確立できます。</p></li>
<li><p><strong>Azure Defender for Cloud</strong>: フェイルオーバー後のターゲットVMについてもAzure Defender for Cloudによるセキュリティ保護を適用し、脅威検出と脆弱性管理を継続します。</p></li>
</ul>
<h2 class="wp-block-heading">コスト最適化</h2>
<p>Azure Site Recoveryのコストは、主にASRのライセンス費用、ストレージ費用、データ転送費用、そしてフェイルオーバー後のターゲットVMの実行費用で構成されます[3]。</p>
<ul class="wp-block-list">
<li><p><strong>ASRライセンス費用</strong>:</p>
<ul>
<li>保護対象のVMインスタンスごとに課金されます。最初の31日間は無料ですが、その後は月額料金が発生します。料金はVMのサイズではなく、保護対象インスタンス数に基づきます。</li>
</ul></li>
<li><p><strong>ストレージ費用</strong>:</p>
<ul>
<li>レプリケーションデータの保存に使用されるストレージアカウントの費用です。ターゲットリージョンのキャッシュストレージ、リカバリーポイントのストレージ費用が含まれます。ストレージアカウントの種類 (Standard HDD/SSD, Premium SSD) や冗長性 (LRS, GRS) によって費用が変動します。</li>
</ul></li>
<li><p><strong>データ転送費用</strong>:</p>
<ul>
<li>レプリケーションデータが異なるリージョンに転送される際の送信データ転送費用が発生します。</li>
</ul></li>
<li><p><strong>ターゲットVMの実行費用</strong>:</p>
<ul>
<li><p><strong>テストフェイルオーバー時</strong>: テスト時に起動されるVMインスタンスに対して課金されます。テスト完了後にVMを削除することで費用を最小限に抑えられます。</p></li>
<li><p><strong>本番フェイルオーバー時</strong>: フェイルオーバー後はターゲットリージョンのVMが稼働するため、通常のVM実行費用が発生します。</p></li>
</ul></li>
</ul>
<p><strong>コスト最適化戦略</strong>:</p>
<ul class="wp-block-list">
<li><p><strong>リザーブドインスタンス (RI)</strong>: フェイルオーバー後のターゲットVMのインスタンスタイプが事前に決まっている場合、RIを事前に購入することで最大72%のコスト削減が可能です。ASRライセンスとは別に、VM本体の実行費用に適用されます。</p></li>
<li><p><strong>Azure Hybrid Benefit</strong>: オンプレミスでWindows ServerやSQL Serverのライセンスを保有している場合、Azure Hybrid Benefitを適用することでVMのソフトウェアコストを削減できます。</p></li>
<li><p><strong>ストレージの最適化</strong>: 適切な種類のストレージアカウント (例: HDD/SSD) と冗長性レベルを選択し、不要なストレージコストを削減します。低頻度アクセスデータはより安価なストレージ階層を検討します。</p></li>
<li><p><strong>ネットワークの最適化</strong>: プライベートエンドポイントを使用する場合、データ転送コストに加えてプライベートエンドポイント自体の費用も考慮します。</p></li>
</ul>
<h2 class="wp-block-heading">よくある落とし穴と対策</h2>
<ol class="wp-block-list">
<li><p><strong>ネットワーク構成の不一致</strong>:</p>
<ul>
<li><p><strong>落とし穴</strong>: プライマリとセカンダリのVNet/サブネット構成、NSGルール、UDR (ユーザー定義ルート)、DNS設定などが一致していないと、フェイルオーバー後にアプリケーションが通信できない。</p></li>
<li><p><strong>対策</strong>: フェイルオーバー先のVNet/サブネット、IPアドレス計画、DNS解決、NSGルールを事前に詳細に設計し、テストフェイルオーバーで徹底的に検証する。</p></li>
</ul></li>
<li><p><strong>RTO/RPO目標と実際の乖離</strong>:</p>
<ul>
<li><p><strong>落とし穴</strong>: 想定していたRTO/RPOが、実際のテストフェイルオーバーで達成できない。特に大規模環境では、起動順序やアプリケーション依存性が複雑になりがち。</p></li>
<li><p><strong>対策</strong>: リカバリープランを詳細に設計し、起動順序、スクリプト実行、手動ステップを明確にする。定期的なテストフェイルオーバーを通じて、RTO/RPOを測定し、計画を継続的に改善する。</p></li>
</ul></li>
<li><p><strong>アプリケーション整合性の問題</strong>:</p>
<ul>
<li><p><strong>落とし穴</strong>: データベースやアプリケーションの状態がレプリケーションポイントで整合性が取れていないと、フェイルオーバー後にデータ破損や起動障害が発生する。</p></li>
<li><p><strong>対策</strong>: ASRエージェントはVSS (Volume Shadow Copy Service) を利用してアプリケーション整合性のあるスナップショットを作成できます。これを有効にし、レプリケーションポリシーで頻度を設定する。</p></li>
</ul></li>
<li><p><strong>IPアドレスの管理</strong>:</p>
<ul>
<li><p><strong>落とし穴</strong>: フェイルオーバー後にターゲットVMに割り当てるIPアドレスが競合したり、アプリケーションが固定IPを前提としている場合に問題が発生する。</p></li>
<li><p><strong>対策</strong>: ターゲットVNetのIPアドレス空間を慎重に計画し、フェイルオーバー時に静的IPアドレスを割り当てるか、DNS更新プロセスを自動化する。</p></li>
</ul></li>
<li><p><strong>テストフェイルオーバーの不足</strong>:</p>
<ul>
<li><p><strong>落とし穴</strong>: テストフェイルオーバーを実施しない、または不十分なテストしか行わないことで、本番のDR発動時に予期せぬ問題に直面する。</p></li>
<li><p><strong>対策</strong>: 定期的なDRドリルを組織全体で義務付け、本番環境とほぼ同等の負荷をかけた状態でテストを行う。テスト結果の文書化と共有を徹底する。</p></li>
</ul></li>
<li><p><strong>DR計画の陳腐化</strong>:</p>
<ul>
<li><p><strong>落とし穴</strong>: システム構成の変更(VMの追加/削除、ネットワーク変更、アプリケーション更新)がDR計画に反映されず、計画が現状と乖離する。</p></li>
<li><p><strong>対策</strong>: インフラの変更管理プロセスにDR計画の更新を組み込む。構成管理ツール (IaC) を活用してDR設定もコードで管理し、変更を自動的に同期させる。</p></li>
</ul></li>
</ol>
<h2 class="wp-block-heading">まとめ</h2>
<p>Azure Site Recoveryは、Azure環境における堅牢なDR戦略を構築するための強力なツールです。適切なアーキテクチャ設計、詳細な設定、継続的な運用監視、厳格なセキュリティ対策、そして賢明なコスト最適化戦略を組み合わせることで、事業継続性を大幅に向上させることができます。特に、定期的なテストフェイルオーバーとDR計画の継続的な見直しは、予期せぬ事態が発生した際に、計画通りに事業を復旧させるための鍵となります。クラウドアーキテクトは、これらの要素を総合的に考慮し、ビジネス要件に合致したDRソリューションを設計・実装することが求められます。</p>
<h2 class="wp-block-heading">参照元</h2>
<p>[1] Azure Site Recovery の概要 – Azure Site Recovery | Microsoft Learn. (2024年4月22日). Microsoft. URL: https://learn.microsoft.com/ja-jp/azure/site-recovery/site-recovery-overview
[2] Azure Site Recovery を使用して Azure VM の障害復旧を実行する – Azure Site Recovery | Microsoft Learn. (2024年3月18日). Microsoft. URL: https://learn.microsoft.com/ja-jp/azure/site-recovery/azure-to-azure-tutorial-failover-test
[3] Azure Site Recovery の価格 | Microsoft Azure. (2024年5月1日). Microsoft. URL: https://azure.microsoft.com/ja-jp/pricing/details/site-recovery/
[4] Azure Site Recovery のセキュリティに関する考慮事項 – Azure Site Recovery | Microsoft Learn. (2024年4月22日). Microsoft. URL: https://learn.microsoft.com/ja-jp/azure/site-recovery/site-recovery-security
[5] PowerShell を使用して Azure VM をセカンダリ リージョンにフェールオーバーする – Azure Site Recovery | Microsoft Learn. (2023年10月26日). Microsoft. URL: https://learn.microsoft.com/ja-jp/azure/site-recovery/powershell-failover-azure-to-azure
[6] Azure Site Recovery の監視 – Azure Site Recovery | Microsoft Learn. (2024年4月22日). Microsoft. URL: https://learn.microsoft.com/ja-jp/azure/site-recovery/site-recovery-monitor-on-premises</p>
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
Azure Site RecoveryによるDR計画とフェイルオーバー
はじめに
クラウド環境における事業継続性 (BC) および災害復旧 (DR) は、ビジネスの中断を最小限に抑える上で不可欠な要素です。Microsoft Azureが提供するAzure Site Recovery (ASR) は、オンプレミス環境や異なるAzureリージョン間での仮想マシン (VM) のレプリケーションとオーケストレーションされたフェイルオーバーを可能にする堅牢なDRソリューションです。本記事では、クラウドアーキテクトの視点から、ASRを用いたDR計画の策定、実装、運用、セキュリティ、コスト最適化、そして潜在的な落とし穴について解説します。
アーキテクチャの概要
Azure Site Recoveryは、プライマリリージョンのVMからセカンダリリージョンへと継続的にデータをレプリケートし、障害発生時にはセカンダリリージョンにVMを起動して事業継続を図るサービスです。これにより、データ損失とサービス停止時間を最小限に抑えることが可能です。
主な構成要素は以下の通りです[1]:
Recovery Services Vault: ASRの構成、レプリケーション、リカバリープラン、監視を一元管理するハブです。
ソースリソース: 保護対象となるAzure VM。
ターゲットリソース: フェイルオーバー先のAzureリージョンに事前に準備されるリソース(ストレージアカウント、仮想ネットワーク、サブネットなど)。
レプリケーションポリシー: RPO (目標復旧時点) やレプリケーション頻度、保持期間などを定義します。
リカバリープラン: 複数のVMをグループ化し、フェイルオーバー時の起動順序やスクリプト実行、手動アクションを定義する自動化された手順書です。
以下に、Azure VMからAzure VMへのASRレプリケーションおよびフェイルオーバーの基本的なアーキテクチャフローを示します。
flowchart TD
subgraph プライマリリージョン
A["ソースVNet"] --> B["ソースVM(\"エージェント\")"]
B --|レプリケーション| C("ストレージアカウント")
end
subgraph Recovery Services Vault (RSV)
C --|レプリケーションデータ| D("ASRサービス")
D --|レプリケーションポリシー| E["リカバリープラン"]
end
subgraph セカンダリリージョン (DRサイト)
F["ターゲットVNet"] --> G["ターゲットサブネット"]
H("ターゲットストレージアカウント") --|データ復元| I["フェイルオーバーVMディスク"]
E --|フェイルオーバー指示| J("フェイルオーバー処理")
J --|VM作成| K["フェイルオーバーVM"]
K --|ネットワーク接続| F
end
B --|継続的レプリケーション| C
C --|データ保存| H
D --|構成管理| A
D --|構成管理| F
J --|起動順序と設定| K
出典: Microsoft Learnを基に作成 [1]
設定手順
ここでは、Azure VMからAzure VMへのASRを設定する際のPowerShellコマンドレットの例を示します。
# 前提:
# - Azureサブスクリプションにログイン済み
# - ソースとターゲットのAzureリージョン、VNet、サブネットが準備済み
# - 適切な権限 (例: Recovery Services Contributor) を持つアカウントで実行
# - Azure Az PowerShellモジュールがインストール済み
# --- 1. Recovery Services Vault の作成 ---
# ASRの構成と管理を行うVaultを作成します。
$resourceGroupName = "asr-dr-rg"
$vaultName = "asr-dr-vault"
$location = "japaneast" # プライマリリージョンと同じか近いリージョン
Write-Host "Recovery Services Vaultを作成中..."
New-AzResourceGroup -Name $resourceGroupName -Location $location | Out-Null
$vault = New-AzRecoveryServicesVault -Name $vaultName -ResourceGroupName $resourceGroupName -Location $location
Write-Host "Recovery Services Vault '$vaultName' が作成されました。"
# Vaultのコンテキストを設定
Set-AzRecoveryServicesAsrVaultContext -Vault $vault
# --- 2. レプリケーションポリシーの作成 ---
# RPO目標やデータ保持期間などを定義します。
$policyName = "default-replication-policy"
$recoveryPointRetentionInHours = 24 # 24時間分の復旧ポイントを保持
$applicationConsistentFrequencyInHours = 4 # アプリケーション整合性スナップショットの頻度
Write-Host "レプリケーションポリシーを作成中..."
$policy = New-AzRecoveryServicesAsrPolicy -Name $policyName `
-RecoveryPointRetentionInHours $recoveryPointRetentionInHours `
-ApplicationConsistentFrequencyInHours $applicationConsistentFrequencyInHours `
-ReplicationFrequencyInSeconds 300 # 5分ごとにデータレプリケーション
Write-Host "レプリケーションポリシー '$policyName' が作成されました。"
# --- 3. 保護対象VMの有効化 (レプリケーションの開始) ---
# ソースVMを指定し、ターゲットリージョンのVNet、サブネット、キャッシュストレージなどを設定します。
$sourceVMName = "MySourceVM"
$sourceVMResourceGroup = "SourceVM-RG"
$targetLocation = "japanwest" # ターゲットリージョン
$targetResourceGroup = "asr-dr-target-rg"
$targetVnetName = "TargetVNet"
$targetSubnetName = "default" # ターゲットVNetの既存サブネット名
# 既存のVMを取得
$sourceVM = Get-AzVM -Name $sourceVMName -ResourceGroupName $sourceVMResourceGroup
# ターゲットリソースグループの作成 (存在しない場合)
New-AzResourceGroup -Name $targetResourceGroup -Location $targetLocation -Force | Out-Null
# ターゲットVNetとサブネットを取得
$targetVnet = Get-AzVirtualNetwork -Name $targetVnetName -ResourceGroupName $targetResourceGroup
$targetSubnet = Get-AzVirtualNetworkSubnetConfig -Name $targetSubnetName -VirtualNetwork $targetVnet
# ASRレプリケーションプロバイダーの取得
$provider = Get-AzRecoveryServicesAsrFabric -Azure | Select-Object -First 1
# ASRレプリケーション保護アイテムの作成 (レプリケーションの有効化)
Write-Host "VM '$sourceVMName' のレプリケーションを有効化中..."
$protectionContainer = Get-AzRecoveryServicesAsrProtectionContainer -Fabric $provider -Name $vault.Name
$protectionContainerMapping = Get-AzRecoveryServicesAsrProtectionContainerMapping -ProtectionContainer $protectionContainer -Policy $policy
# ターゲット構成オブジェクトを作成
$diskMappings = @()
foreach ($disk in $sourceVM.StorageProfile.DataDisks) {
$diskMappings += New-AzRecoveryServicesAsrAzureToAzureDiskReplicationConfig -DiskId $disk.Id -LogStorageAccountId $vault.Properties.MonitoringStorageAccount
}
$osDisk = $sourceVM.StorageProfile.OsDisk
$diskMappings += New-AzRecoveryServicesAsrAzureToAzureDiskReplicationConfig -DiskId $osDisk.Id -LogStorageAccountId $vault.Properties.MonitoringStorageAccount -IsOSDisk
$networkNic = $sourceVM.NetworkProfile.NetworkInterfaces[0].Id
$networkAdapterConfig = New-AzRecoveryServicesAsrVMNicConfig -NicId $networkNic -TargetSubnetName $targetSubnet.Name -TargetStaticIPAddress $null # DHCPの場合
# $networkAdapterConfig = New-AzRecoveryServicesAsrVMNicConfig -NicId $networkNic -TargetSubnetName $targetSubnet.Name -TargetStaticIPAddress "10.0.0.10" # 固定IPの場合
Start-AzRecoveryServicesAsrReplicationProtectedItem `
-AzureToAzure `
-VirtualMachineId $sourceVM.Id `
-ProtectionContainerMapping $protectionContainerMapping `
-RecoveryResourceGroupId $targetResourceGroup `
-RecoveryVirtualNetworkId $targetVnet.Id `
-DiskReplicationConfig $diskMappings `
-Nic $networkAdapterConfig `
-Policy $policy `
-Name ($sourceVMName + "-replication") `
-EnableReplication
Write-Host "VM '$sourceVMName' のレプリケーションが有効化されました。初期レプリケーションが開始されます。"
# --- 4. リカバリープランの作成 (オプションだが推奨) ---
# 複数のVMや手動/自動スクリプト実行を含む複雑なフェイルオーバーをオーケストレーションします。
$recoveryPlanName = "MyRecoveryPlan"
Write-Host "リカバリープラン '$recoveryPlanName' を作成中..."
$replicationProtectedItem = Get-AzRecoveryServicesAsrReplicationProtectedItem -FriendlyName $sourceVMName
New-AzRecoveryServicesAsrRecoveryPlan -Name $recoveryPlanName `
-PrimaryFabric $provider `
-RecoveryFabric $provider `
-ReplicationProtectedItem $replicationProtectedItem `
-Direction AzureToAzure `
-Vault $vault
Write-Host "リカバリープラン '$recoveryPlanName' が作成されました。"
# --- 5. テストフェイルオーバーの実行 ---
# 本番環境に影響を与えずにDR計画の有効性を検証します。
Write-Host "テストフェイルオーバーを実行中..."
Start-AzRecoveryServicesAsrTestFailover -RecoveryPlan $recoveryPlanName -Direction PrimaryToRecovery -Vault $vault
Write-Host "テストフェイルオーバーが開始されました。結果はAzureポータルで確認してください。"
# テストフェイルオーバーのクリーンアップ
# Test-Failover が完了したら、結果を確認し、テスト環境を削除する必要があります。
# $testFailoverJob = Get-AzRecoveryServicesAsrJob | Where-Object { $_.Properties.ScenarioName -eq "TestFailover" -and $_.State -eq "Succeeded" } | Select-Object -First 1
# if ($testFailoverJob) {
# Remove-AzRecoveryServicesAsrTestFailover -Job $testFailoverJob -Vault $vault
# }
出典: Microsoft Learnを基に作成 [5]
運用監視
ASRの運用においては、レプリケーションの状態、フェイルオーバーの成功率、RTO (目標復旧時間) / RPO (目標復旧時点) の達成度を継続的に監視することが重要です。
ASRダッシュボード: Recovery Services Vault内で、レプリケーション状態、エラー、未解決のインシデントを一目で確認できます[6]。
Azure Monitorとの統合: ASRはAzure Monitorと連携し、ログ分析ワークスペースにイベントログを送信できます。これにより、レプリケーションエラー、保護状態の変更、フェイルオーバーイベントなどを詳細に分析し、カスタムアラートを設定することが可能です[6]。
アラート設定: レプリケーションの遅延、クリティカルなエラー、保護状態の喪失などが発生した場合に、メール、SMS、Webhookなどを通じて関係者に通知されるようアラートルールを設定します。
DRドリル (テストフェイルオーバー): 定期的にテストフェイルオーバーを実施し、リカバリープランの有効性、RTOの達成度、アプリケーションの動作確認を行います。これはDR計画の信頼性を維持するために最も重要な運用活動です[2]。Microsoftは、少なくとも年1回のテストを推奨しています。
SLA: Azure Site Recoveryは特定のSLAを直接提供しませんが、基盤となるAzure VMやストレージ、ネットワークのSLAが適用されます。RTO/RPOはDR計画の設計とテスト結果に大きく依存します。
セキュリティ
Azure Site Recoveryにおけるセキュリティは、データレプリケーション、アクセス制御、ネットワーク保護の各側面で確保されます。
Azure RBAC (ロールベースのアクセス制御): Recovery Services Vaultおよび保護対象リソースへのアクセスを最小限の権限で管理します。主要なロールには以下があります[4]:
Site Recovery Contributor: ASRサービスを管理する完全な権限。
Site Recovery Operator: フェイルオーバーとテストフェイルオーバーを実行する権限。
Virtual Machine Contributor: フェイルオーバー後にVMを管理する権限。
Network Contributor: フェイルオーバー後にネットワーク設定を管理する権限。
Managed Identity: ASRエージェントはマネージドIDを利用して認証を行い、リソースへのアクセスを安全に行います。
データ暗号化:
ネットワークセキュリティグループ (NSG): ソースおよびターゲットの仮想ネットワークでは、レプリケーションに必要な特定のポート (例: HTTPS 443) のみを開放し、不必要なトラフィックを制限します。
プライベートエンドポイント: レプリケーションデータ転送にプライベートエンドポイントを使用することで、パブリックインターネットを経由せずにセキュアな接続を確立できます。
Azure Defender for Cloud: フェイルオーバー後のターゲットVMについてもAzure Defender for Cloudによるセキュリティ保護を適用し、脅威検出と脆弱性管理を継続します。
コスト最適化
Azure Site Recoveryのコストは、主にASRのライセンス費用、ストレージ費用、データ転送費用、そしてフェイルオーバー後のターゲットVMの実行費用で構成されます[3]。
ASRライセンス費用:
- 保護対象のVMインスタンスごとに課金されます。最初の31日間は無料ですが、その後は月額料金が発生します。料金はVMのサイズではなく、保護対象インスタンス数に基づきます。
ストレージ費用:
- レプリケーションデータの保存に使用されるストレージアカウントの費用です。ターゲットリージョンのキャッシュストレージ、リカバリーポイントのストレージ費用が含まれます。ストレージアカウントの種類 (Standard HDD/SSD, Premium SSD) や冗長性 (LRS, GRS) によって費用が変動します。
データ転送費用:
- レプリケーションデータが異なるリージョンに転送される際の送信データ転送費用が発生します。
ターゲットVMの実行費用:
コスト最適化戦略:
リザーブドインスタンス (RI): フェイルオーバー後のターゲットVMのインスタンスタイプが事前に決まっている場合、RIを事前に購入することで最大72%のコスト削減が可能です。ASRライセンスとは別に、VM本体の実行費用に適用されます。
Azure Hybrid Benefit: オンプレミスでWindows ServerやSQL Serverのライセンスを保有している場合、Azure Hybrid Benefitを適用することでVMのソフトウェアコストを削減できます。
ストレージの最適化: 適切な種類のストレージアカウント (例: HDD/SSD) と冗長性レベルを選択し、不要なストレージコストを削減します。低頻度アクセスデータはより安価なストレージ階層を検討します。
ネットワークの最適化: プライベートエンドポイントを使用する場合、データ転送コストに加えてプライベートエンドポイント自体の費用も考慮します。
よくある落とし穴と対策
ネットワーク構成の不一致:
RTO/RPO目標と実際の乖離:
アプリケーション整合性の問題:
IPアドレスの管理:
テストフェイルオーバーの不足:
DR計画の陳腐化:
まとめ
Azure Site Recoveryは、Azure環境における堅牢なDR戦略を構築するための強力なツールです。適切なアーキテクチャ設計、詳細な設定、継続的な運用監視、厳格なセキュリティ対策、そして賢明なコスト最適化戦略を組み合わせることで、事業継続性を大幅に向上させることができます。特に、定期的なテストフェイルオーバーとDR計画の継続的な見直しは、予期せぬ事態が発生した際に、計画通りに事業を復旧させるための鍵となります。クラウドアーキテクトは、これらの要素を総合的に考慮し、ビジネス要件に合致したDRソリューションを設計・実装することが求められます。
参照元
[1] Azure Site Recovery の概要 – Azure Site Recovery | Microsoft Learn. (2024年4月22日). Microsoft. URL: https://learn.microsoft.com/ja-jp/azure/site-recovery/site-recovery-overview
[2] Azure Site Recovery を使用して Azure VM の障害復旧を実行する – Azure Site Recovery | Microsoft Learn. (2024年3月18日). Microsoft. URL: https://learn.microsoft.com/ja-jp/azure/site-recovery/azure-to-azure-tutorial-failover-test
[3] Azure Site Recovery の価格 | Microsoft Azure. (2024年5月1日). Microsoft. URL: https://azure.microsoft.com/ja-jp/pricing/details/site-recovery/
[4] Azure Site Recovery のセキュリティに関する考慮事項 – Azure Site Recovery | Microsoft Learn. (2024年4月22日). Microsoft. URL: https://learn.microsoft.com/ja-jp/azure/site-recovery/site-recovery-security
[5] PowerShell を使用して Azure VM をセカンダリ リージョンにフェールオーバーする – Azure Site Recovery | Microsoft Learn. (2023年10月26日). Microsoft. URL: https://learn.microsoft.com/ja-jp/azure/site-recovery/powershell-failover-azure-to-azure
[6] Azure Site Recovery の監視 – Azure Site Recovery | Microsoft Learn. (2024年4月22日). Microsoft. URL: https://learn.microsoft.com/ja-jp/azure/site-recovery/site-recovery-monitor-on-premises
コメント