本記事は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 mermaid_group_1["プライマリリージョン"]
A["ソースVNet"] --> B["ソースVM(#quot;エージェント#quot;)"]
B -->|"レプリケーション"| C("ストレージアカウント")
end
subgraph mermaid_group_6["Recovery Services Vault (RSV)"]
C -->|"レプリケーションデータ"| D("ASRサービス")
D -->|"レプリケーションポリシー"| E["リカバリープラン"]
end
subgraph mermaid_group_11["セカンダリリージョン (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を利用して認証を行い、リソースへのアクセスを安全に行います。
データ暗号化:
保管中のデータ: ASRがレプリケーションに使用するストレージアカウントは、Azure Storageの保存データ暗号化 (AES-256) によって保護されます。
転送中のデータ: レプリケーションデータは、転送中にTLS 1.2以上で暗号化されます。
ネットワークセキュリティグループ (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の実行費用:
テストフェイルオーバー時: テスト時に起動されるVMインスタンスに対して課金されます。テスト完了後にVMを削除することで費用を最小限に抑えられます。
本番フェイルオーバー時: フェイルオーバー後はターゲットリージョンのVMが稼働するため、通常のVM実行費用が発生します。
コスト最適化戦略:
リザーブドインスタンス (RI): フェイルオーバー後のターゲットVMのインスタンスタイプが事前に決まっている場合、RIを事前に購入することで最大72%のコスト削減が可能です。ASRライセンスとは別に、VM本体の実行費用に適用されます。
Azure Hybrid Benefit: オンプレミスでWindows ServerやSQL Serverのライセンスを保有している場合、Azure Hybrid Benefitを適用することでVMのソフトウェアコストを削減できます。
ストレージの最適化: 適切な種類のストレージアカウント (例: HDD/SSD) と冗長性レベルを選択し、不要なストレージコストを削減します。低頻度アクセスデータはより安価なストレージ階層を検討します。
ネットワークの最適化: プライベートエンドポイントを使用する場合、データ転送コストに加えてプライベートエンドポイント自体の費用も考慮します。
よくある落とし穴と対策
ネットワーク構成の不一致:
落とし穴: プライマリとセカンダリのVNet/サブネット構成、NSGルール、UDR (ユーザー定義ルート)、DNS設定などが一致していないと、フェイルオーバー後にアプリケーションが通信できない。
対策: フェイルオーバー先のVNet/サブネット、IPアドレス計画、DNS解決、NSGルールを事前に詳細に設計し、テストフェイルオーバーで徹底的に検証する。
RTO/RPO目標と実際の乖離:
落とし穴: 想定していたRTO/RPOが、実際のテストフェイルオーバーで達成できない。特に大規模環境では、起動順序やアプリケーション依存性が複雑になりがち。
対策: リカバリープランを詳細に設計し、起動順序、スクリプト実行、手動ステップを明確にする。定期的なテストフェイルオーバーを通じて、RTO/RPOを測定し、計画を継続的に改善する。
アプリケーション整合性の問題:
落とし穴: データベースやアプリケーションの状態がレプリケーションポイントで整合性が取れていないと、フェイルオーバー後にデータ破損や起動障害が発生する。
対策: ASRエージェントはVSS (Volume Shadow Copy Service) を利用してアプリケーション整合性のあるスナップショットを作成できます。これを有効にし、レプリケーションポリシーで頻度を設定する。
IPアドレスの管理:
落とし穴: フェイルオーバー後にターゲットVMに割り当てるIPアドレスが競合したり、アプリケーションが固定IPを前提としている場合に問題が発生する。
対策: ターゲットVNetのIPアドレス空間を慎重に計画し、フェイルオーバー時に静的IPアドレスを割り当てるか、DNS更新プロセスを自動化する。
テストフェイルオーバーの不足:
落とし穴: テストフェイルオーバーを実施しない、または不十分なテストしか行わないことで、本番のDR発動時に予期せぬ問題に直面する。
対策: 定期的なDRドリルを組織全体で義務付け、本番環境とほぼ同等の負荷をかけた状態でテストを行う。テスト結果の文書化と共有を徹底する。
DR計画の陳腐化:
落とし穴: システム構成の変更(VMの追加/削除、ネットワーク変更、アプリケーション更新)がDR計画に反映されず、計画が現状と乖離する。
対策: インフラの変更管理プロセスにDR計画の更新を組み込む。構成管理ツール (IaC) を活用して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

