駆け出しアーキテクトのやまぱんです。
今回はAzure Disk BackupのGRS構成 (スナップショットのリージョン間コピー) についてお伝えします。
リージョン間のスナップショットのコピー方法として、VHDエクスポート編とスナップショット移動編を記載してますがスナップショット移動編の方がVHDに変換しなくてよく、スナップショットリソースのまま行える分比較的楽かと思います。
Azure Disk BackupのGRS構成 (スナップショットのリージョン間コピー) について
【前座】そもそも Azure Disk Backup ってなにか
Azure Disk Backup とは
Azure Disk Backup とはマネージドディスクのスナップショットの取得を自動で取得、および保持期間に従って削除、管理するソリューションです。簡単にいうと、マネージドディスクの増分スナップショットの取得および管理を自動で行ってくれるソリューションになります。
Azure Disk Backup一回あたりのバックアップ ジョブ時間は数分で終わることがほとんどです。
なお、後述のスナップショットリソースの一覧にはバックアップ ジョブ終了後、数分~20分ほどすると確認できるようになります。
・仮想ハード ディスクのスナップショットを作成する(手動でマネージドディスクのスナップショットを取得する方法)
https://learn.microsoft.com/ja-jp/azure/virtual-machines/snapshot-copy-managed-disk?tabs=portal
- 参考: Azure Portal からみたAzure Disk Backupによるスナップショットと手動で取得したスナップショット
タグ [Createdby:AzureBackup] がついているものがAzure Disk Backupによって取得されたバックアップ(スナップショット)です。
また、AzureBackup_738bec5f-5722-4579-91f2-aff17d940ef5_2023-02-09T09-26-47.3096919 のように、Azure Disk Backupで取得されたスナップショットには ”AzureBackup_” が接頭辞として付与されています。
Azure VM Backup とAzure Disk Backup の違い
またAzure Disk Backup は Azure VM バックアップのように Azure VM 単位でバックアップを構成するものではなく、あくまでマネージドディスク単位でバックアップを構成するものです。
また大きな違いとしては、Azure VM Backup が Azure VM の OS 内部と連携して整合性を担保するのに対して、Azure Disk Backup はあくまでディスクに対するバックアップソリューションであるため、 Azure VM の OS の状態を考慮しません。(Azure VM にアタッチされているかどうかも考慮しません。)
上記のことをドキュメントでは下記のように表現しています。
- 参考:Azure ディスク バックアップの概要
https://learn.microsoft.com/ja-jp/azure/backup/disk-backup-overview1 日に複数のバックアップをサポートする増分スナップショットを使用してマネージド ディスクの特定時点のバックアップを作成する、クラッシュ整合性バックアップ ソリューションです。 また、エージェントレスのソリューションでもあり、運用アプリケーションのパフォーマンスに影響しません。 実行中の Azure 仮想マシンに OS とデータ ディスク (共有ディスクを含む) が現在接続されているかどうかにかかわらず、この両方のバックアップと復元がサポートされます。
クラッシュ整合性、およびその他のAzure VM Backup やAzure Disk Backup の整合性に関しては下記のサポートブログの方に詳しく記載されていますのでご参考になれば幸いです。
- Azure VM Backupにおける整合性について
https://jpabrs-scem.github.io/blog/AzureVMBackup/Consistencies - 3.クラッシュ整合性 - Azure VM Backupにおける整合性について
https://jpabrs-scem.github.io/blog/AzureVMBackup/Consistencies/#3
また後述する冗長性の違いもあります。
これらの違い(整合性の違い、冗長性の違い、バックアップ取得単位の違い) から個人的には Azure VM のバックアップにおいて、Azure VM Backupで要件を満たせる場合は、あえてAzure Disk Backupを使わずAzure VM Backupを使った方が良いかと思います。
そもそもなぜこういう話がでるか
何らかの要件によりAzure VM Backup ではなく、Azure Disk Backup の利用を検討している際によくGeo 冗長を持たせたいというお話があります。
しかしながら、Azure Disk Backup は Azure VM Backup とは異なり、 バックアップしたデータの冗長性に Geo 冗長を持たせることはできません。具体的には ZRS に対応しているリージョンであれば ZRS、そうでない場合は LRS となります。
Azure Disk Backup のバックアップ (スナップショット)は GRS 冗長性をもたせることができない。
また、手動で取得したマネージドディスクのスナップショットにおいても同様です。
- 参考:Azure Managed Disks のバックアップ
https://learn.microsoft.com/ja-jp/azure/backup/backup-managed-disksAzure ディスク バックアップでは、運用層のバックアップのみがサポートされています。 コンテナー ストレージ層へのバックアップのコピーは現在サポートされていません。 バックアップ コンテナーのストレージ冗長設定 (LRS または GRS) は、運用層に格納されているバックアップには適用されません。
増分スナップショットは、選択された親ディスクのストレージの種類に関係なく、Standard HDD ストレージに格納されます。 ゾーン冗長ストレージ (ZRS) をサポートするリージョンでは、信頼性を向上させるため、増分スナップショットが既定で ZRS に保存されます。
Azure Disk Backup で取得したバックアップ (実態はマネージドディスクのスナップショット) に Geo 冗長 (GRS) をもたせるにはひと手間が必要です。
【本題】Azure Disk Backup にGRS冗長性を持たせる方法とそのリストア方法① (VHDエクスポート編)
Azure Disk Backup にGRS冗長性を持たせる方法としては、Azure Disk Backup のデータの実態であるマネージドディスクのスナップショットを別リージョンにコピーする方法があります。
ただし、スナップショットリソースそのままでは移動 / エクスポートできないので VHD の形で別リージョンでエクスポートし保持することになります。
こちら後日確認した結果スナップショットリソースのまま別リージョンへ移動することが可能でしたのでそちらの方法も(スナップショット移動編 で後述しております。
例として、東日本リージョンで作成したデータディスクのスナップショット(Azure Disk Backup のバックアップデータの実態) を西日本リージョンにコピー(VHDエクスポート)します。
1.Azure Disk Backup にGRS冗長性を持たせる方法
スナップショットを別リージョンのストレージ アカウントに VHD として エクスポートします。
今回は、Azure PowerShell をWindows 環境 で PowerShellインターフェースを用いて実施しました。
対象のスナップショット:AzureBackup_738bec5f-5722-4579-91f2-aff17d940ef5_2023-02-09T09-26-47.3096919
東日本リージョン(Japan East)にあることが分かります。
コマンド
- 参考
・サンプル スクリプト - PowerShell を使用して別のリージョンのストレージ アカウントに管理スナップショットを VHD としてエクスポート/コピーする
https://learn.microsoft.com/ja-jp/azure/virtual-machines/scripts/virtual-machines-powershell-sample-copy-snapshot-to-storage-account#sample-script
#Provide the subscription Id of the subscription where snapshot is created
$subscriptionId = "yourSubscriptionId"
#Provide the name of your resource group where snapshot is created
$resourceGroupName ="yourResourceGroupName"
#Provide the snapshot name
$snapshotName = "yourSnapshotName"
#Provide Shared Access Signature (SAS) expiry duration in seconds e.g. 3600.
#Know more about SAS here: https://docs.microsoft.com/en-us/Az.Storage/storage-dotnet-shared-access-signature-part-1
$sasExpiryDuration = "3600"
#Provide storage account name where you want to copy the snapshot.
$storageAccountName = "yourstorageaccountName"
#Name of the storage container where the downloaded snapshot will be stored
$storageContainerName = "yourstoragecontainername"
#Provide the key of the storage account where you want to copy snapshot.
$storageAccountKey = 'yourStorageAccountKey'
#Provide the name of the VHD file to which snapshot will be copied.
$destinationVHDFileName = "yourvhdfilename(.vhd)"
# Set the context to the subscription Id where Snapshot is created
Select-AzSubscription -SubscriptionId $SubscriptionId
#Generate the SAS for the snapshot
$sas = Grant-AzSnapshotAccess -ResourceGroupName $ResourceGroupName -SnapshotName $SnapshotName -DurationInSecond $sasExpiryDuration -Access Read
#Create the context for the storage account which will be used to copy snapshot to the storage account
$destinationContext = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
#Copy the snapshot to the storage account
Start-AzStorageBlobCopy -AbsoluteUri $sas.AccessSAS -DestContainer $storageContainerName -DestContext $destinationContext -DestBlob $destinationVHDFileName
実行結果
移行後のストレージ アカウント
西日本リージョン (Japan west) にあるストレージ アカウントのなかのコンテナーのなかに VHD が作成されていることが分かります。
別リージョンの VHD からのマネージドディスクのリストア方法
シナリオによって大きく2つのパターンがあると思います
今回のオリジナルリージョンは東日本リージョン(Japan East)、別リージョンは西日本リージョン(Japan West)です。
どちらの方法もまず、マネージドディスクに変換する必要があります。
- そのまま別リージョンでリストアする方法
- オリジナルのリージョンでリストアする方法
VHD から マネージドディスクを作成(リストア)したあとは、任意の Azure VM にアタッチするなどしてファイルを取り出したり、破損したディスクとスワップするなどすることが可能です。
2.別リージョン(西日本)でリストアする方法
別リージョンに作成した VHD からマネージドディスクを作成するには下記を参考にAzure PowerShellを利用します。
具体的にはまず、VHDからスナップショットを作成して、スナップショットからマネージドディスクを作成します
対象の VHD は先ほどの手順で西日本リージョンに作成した、下記の名前のVHDです。
jpw_VHD_AzureBackup_738bec5f-5722-4579-91f2-aff17d940ef5_2023-02-09T09-26-47.3096919
2.1 VHD からスナップショットを作成する
下記のURLを参考にVHDからスナップショットを作成することができます。
ただし、$storageType = 'Standard_LRS' のように "_" を入れなければコマンドが通りません。
- 参考
・PowerShell で VHD からスナップショットを作成してまったく同じ複数のマネージド ディスクを短時間で作成する (Windows)
https://learn.microsoft.com/ja-jp/azure/virtual-machines/scripts/virtual-machines-powershell-sample-create-snapshot-from-vhd
#Provide the subscription Id where snapshot will be created
$subscriptionId = 'yourSubscriptionId'
#Provide the name of your resource group where snapshot will be created.
$resourceGroupName ='yourResourceGroupName'
#Provide the name of the snapshot
$snapshotName = 'yourSnapshotName'
#Provide the storage type for snapshot. PremiumLRS or StandardLRS.
#Docsのサンプルスクリプトでは _ が抜けていましたが入れることでコマンドが通ります。
$storageType = 'Standard_LRS'
#Provide the Azure region (e.g. westus) where snapshot will be located.
#This location should be same as the storage account location where VHD file is stored
#Get all the Azure location using command below:
#Get-AzLocation
$location = 'westus'
#Provide the URI of the VHD file (page blob) in a storage account. Please not that this is NOT the SAS URI of the storage container where VHD file is stored.
#e.g. https://contosostorageaccount1.blob.core.windows.net/vhds/contosovhd123.vhd
#Note: VHD file can be deleted as soon as Managed Disk is created.
$sourceVHDURI = 'https://yourStorageAccountName.blob.core.windows.net/vhds/yourVHDName.vhd'
#Provide the resource Id of the storage account where VHD file is stored.
#e.g. /subscriptions/6582b1g7-e212-446b-b509-314e17e1efb0/resourceGroups/MDDemo/providers/Microsoft.Storage/storageAccounts/contosostorageaccount1
#This is an optional parameter if you are creating snapshot in the same subscription
$storageAccountId = '/subscriptions/yourSubscriptionId/resourceGroups/yourResourceGroupName/providers/Microsoft.Storage/storageAccounts/yourStorageAccountName'
#Set the context to the subscription Id where Managed Disk will be created
Select-AzSubscription -SubscriptionId $SubscriptionId
$snapshotConfig = New-AzSnapshotConfig -AccountType $storageType -Location $location -CreateOption Import -StorageAccountId $storageAccountId -SourceUri $sourceVHDURI
New-AzSnapshot -Snapshot $snapshotConfig -ResourceGroupName $resourceGroupName -SnapshotName $snapshotName
実行結果
実行時間についてはあくまでも参考程度です。
明確な実行時間に関する SLA などはありません。
- Azure Portal で確認
見やすいように元の東日本リージョンのスナップショットも並べて表示しています。
無事に西日本リージョンにエクスポートしたVHDからスナップショットが作成されていることがわかります。
2.2 スナップショットからディスクを作成する
Azure Portal から下記のようにマネージドディスクを作成することが可能です。
Azure PowerShell を利用する手順については下記をご覧ください。
https://learn.microsoft.com/ja-jp/azure/virtual-machines/scripts/virtual-machines-powershell-sample-create-managed-disk-from-snapshot?toc=%2Fpowershell%2Fmodule%2Ftoc.json
VHD から マネージドディスクを作成(リストア)したあとは、任意の Azure VM にアタッチするなどしてファイルを取り出したり、破損したディスクとスワップするなどすることが可能です。
3.オリジナルリージョン(東日本)でリストアする方法
こちらは 2.別リージョン(西日本)でリストアする方法 で作成したスナップショットから、1.Azure Disk Backup にGRS冗長性を持たせる方法 を用いてオリジナルリージョン(東日本)にVHDをエクスポートし、再び2.別リージョン(西日本)でリストアする方法でリストアする方法を参考にしていただくことで可能です。
【本題】Azure Disk Backup にGRS冗長性を持たせる方法とそのリストア方法② (スナップショット移動編)
例として、東日本リージョンで作成したデータディスクのスナップショット(Azure Disk Backup のバックアップデータの実態) を西日本リージョンにコピー(スナップショットリソースのまま)します。
前述の方法に比べて、VHDへのエクスポート(リソースの変換)の手間がない分こちらの方が簡単です。
なお、ソースのスナップショットがフルスナップショットの場合はこちらの方法は利用できません。(別リージョンにコピーするのは "スナップショットリソースの種類"が"増分スナップショット"のみです。"スナップショットリソースの種類"が"フルスナップショット"の場合はリージョンは変更することができません。 )
しかし、Azure Disk Backup によって取得されるスナップショットは増分スナップショットなのでこちらの方法で対応可能です。
・マネージド コピー - 増分スナップショットを新しいリージョンにコピーする
https://learn.microsoft.com/ja-jp/azure/virtual-machines/disks-copy-incremental-snapshot-across-regions?tabs=azure-portal#managed-copy
1.Azure Disk Backup にGRS冗長性を持たせる方法
スナップショットを別リージョへスナップショットリソースのままコピーします。
今回は、Azure Portal を用いて実施します。
Azure CLI やAzure PowerShell を用いた方法は上記 Docs をご覧ください。
別リージョンへ増分スナップショットをコピーする
そのまま、進む。
名前を任意の名前にして、スナップショットの種類を増分にして地域(リージョン)をJapanWestを選択します。
フルを選択した場合はリージョンの変更ができません。
実行結果
1 分程度でコピーしたスナップショットリソースが確認できるようになります。
赤枠が Japan West に作成したリソースで、青枠がコピー元のソースのスナップショットです。
2.別リージョン(西日本)でリストアする方法
Azure Portal から下記のようにマネージドディスクを作成することが可能です。
Azure PowerShell を利用する手順については下記をご覧ください。
https://learn.microsoft.com/ja-jp/azure/virtual-machines/scripts/virtual-machines-powershell-sample-create-managed-disk-from-snapshot?toc=%2Fpowershell%2Fmodule%2Ftoc.json
スナップショット から マネージドディスクを作成(リストア)したあとは、任意の Azure VM にアタッチするなどしてファイルを取り出したり、破損したディスクとスワップするなどすることが可能です。
3.オリジナルリージョン(東日本)でリストアする方法
1.Azure Disk Backup にGRS冗長性を持たせる方法 を参考にメインリージョンに再度スナップショットをコピーし、コピーしたスナップショットから 2.別リージョン(西日本)でリストアする方法 を参考にディスクを作成していただければと思います。
検証
念のためオリジナルリージョンのソーススナップショット、およびソースのディスクを削除した状態で、別リージョンへコピーしたスナップショットからディスクを作成できることも確認しました。
オリジナルリージョンのソーススナップショットおよびソースのディスクがなくても、別リージョンへコピーしたスナップショットからディスクを作成することが可能