Storage アカウント間での Azure Virtual Machines の移行
このポストは、10 月 22 日に投稿された Migrate Azure Virtual Machines between Storage Accounts の翻訳です。
Azure での作業では、Virtual Machines を別の Storage アカウントへ移行することがよくあります。
その手順を詳しく見ていく前に、Azure Virtual Machines のセットアップでの処理についておさらいしておきましょう。Azure Virtual Machines の作成では、コンピューティングと Storage の 2 つのサービスが連携して処理を行います。Storage サービス側では、Azure Storage サービス内の Storage アカウントの 1 つに VHD が作成されます。この VHD が保存されている物理ノードは、Virtual Machines の配置先として指定したリージョンにあります。コンピューティング サービス側では、物理ノードは Virtual Machines を配置する 2 番目のクラスターにあります。そのクラスターで VM が起動すると、その VM は Storage サービスとの接続を確立し、VHD から起動します。
Virtual Machines を作成する際、VHD は、VM の配置先と同じリージョンにある Storage アカウントに配置されます。それにより、Virtual Machines と Storage アカウント間の通信時に、一貫したパフォーマンスが確保されます。
こういった流れを念頭に、Virtual Machines をあるリージョンから別のリージョンへ移行する手順を見ていきましょう。
- Virtual Machines を停止する
- VHD BLOB を移行元リージョンの Storage アカウントから移行先リージョンの Storage アカウントにコピーする
- BLOB から Azure Disk を作成する
- Virtual Machines を Disk から起動する
Virtual Machines を停止する
サービス管理ポータルにアクセスし、移行する Virtual Machines を選択して、コントロール メニューから [SHUT DOWN] をクリックします。
この操作は、次のような Azure PowerShell コマンドレットから行うこともできます。
$servicename = "KenazTestService"
$vmname = "TestVM1"
Get-AzureVM -ServiceName $servicename -Name $vmname | Stop-AzureVM
コピーを実行する際にファイル システムを一貫した状態に保持するために、VM を停止する必要があります。現時点で、Azure はライブ マイグレーションをサポートしていません。今回の移行操作では、specialized VM をあるリージョンから別のリージョンに移行します。generalized イメージから VM を作成したい場合は、VM を停止する前に VM に対して Sysprep を実行してください。
VHD BLOB をコピーする
Azure Storage サービスには Storage アカウントの BLOB を別の Storage アカウントに移行する機能が用意されています。実行手順は次のとおりです。
- 移行元 Storage アカウントの情報を指定する
- 移行先 Storage アカウントの情報を指定する
- 移行先 Storage アカウントに移行先コンテナーが存在することを確認する
- BLOB のコピーを実行する
注意: 異なるリージョンの Storage アカウントへ BLOB をコピーする場合は、BLOB のサイズに応じて 1 時間またはそれ以上の時間がかかります。
次のように、Azure PowerShell を使用するのが最も簡単です。
Select-AzureSubscription "kenazsubscription"
# コピーする VHD BLOB #
$blobName = "KenazTestService-TestVM1-2014-8-26-15-1-55-658-0.vhd"
# 移行元 Storage アカウントの情報 #
$sourceStorageAccountName = "kenazsa"
$sourceKey = "MySourceStorageAccountKey"
$sourceContext = New-AzureStorageContext –StorageAccountName $sourceStorageAccountName -StorageAccountKey $sourceKey
$sourceContainer = "vhds"
# 移行先 Storage アカウントの情報 #
$destinationStorageAccountName = "kenazdestinationsa"
$destinationKey = "MyDestinationStorageAccountKey"
$destinationContext = New-AzureStorageContext –StorageAccountName $destinationStorageAccountName -StorageAccountKey $destinationKey
# 移行先コンテナーを作成 #
$destinationContainerName = "destinationvhds"
New-AzureStorageContainer -Name $destinationContainerName -Context $destinationContext
# BLOB をコピー #
$blobCopy = Start-AzureStorageBlobCopy -DestContainer $destinationContainerName `
-DestContext $destinationContext `
-SrcBlob $blobName `
-Context $sourceContext `
-SrcContainer $sourceContainer
移行元 Storage アカウントから移行先 Storage アカウントへの BLOB のコピーを開始します。BLOB が完全にコピーされるまでしばらく時間がかかります。進捗状況を確認するには、以下のコマンドを実行します。
while(($blobCopy | Get-AzureStorageBlobCopyState).Status -eq "Pending")
{
Start-Sleep -s 30
$blobCopy | Get-AzureStorageBlobCopyState
}
BLOB のコピーが完了すると、コピー処理のステータスが “Success” に変わります。その他の VHD のコピー処理の例については、「Azure Virtual Machines: Storage アカウント間での VHD のコピー (英語)」を参照してください。
AzCopy を使用して BLOB をコピーする
BLOB をコピーする別の方法として、AzCopy ユーティリティ (ダウンロードはこちら) を使用できます。Storage アカウント間の BLOB のコピー処理は次のとおりです。
AzCopy https://sourceaccount.blob.core.windows.net/mycontainer1 https://destaccount.blob.core.windows.net/mycontainer2 /sourcekey:key1 /destkey:key2 abc.txt
さまざまなシナリオでの AzCopy の使い方の詳細については、「AzCopy コマンドライン ユーティリティの使用を開始する (英語)」を参照してください。
Azure Disk を作成する
この時点で、移行先 Storage アカウントにコピーした BLOB はまだ BLOB のままです。起動できるようにするには、この BLOB から Azure Disk を作成しなければなりません。Virtual Machines の [DISKS] セクションに移動して [CREATE] をクリックします。
注意: これは specialized VM 用の手順です。VHD をイメージとして使用したい場合は、VM を再起動して Sysprep を実行し、BLOB をコピーして (Disk ではなく) イメージとして追加します。
VHD URL エクスプローラーを使用して、BLOB をコピーした先の移行先コンテナーから BLOB を選択します。[The VHD contains an operating system.] チェックボックスをオンにして、作成する Disk オブジェクトはデータ ディスクではなく OS ディスクとして使用することを Azure に知らせます。
注意: 以下のように「A lease conflict occurred with the blob …」というエラーが表示される場合は、1 つ前の手順に戻って、BLOB のコピーが完了していることを確認してください。
また、次の PowerShell コマンドレットでも Disk を作成できます。
Add-AzureDisk -DiskName "myMigratedTestVM" `
-OS Linux `
-MediaLocation "https://kenazdestinationsa.blob.core.windows.net/destinationvhds/KenazTestService-TestVM1-2014-8-26-16-16-48-522-0.vhd" `
-Verbose
完了すると、作成した Disk が Virtual Machines の [DISKS] セクションに表示されます。
Virtual Machines を作成する
作成した Disk オブジェクトを使用して Virtual Machines を作成できます。サービス管理ポータルで、ギャラリーから Virtual Machines を作成します。[MY DISKS] から作成した Disk を選択します。
注意: 移行する VM の Storage プールが構成済みの場合 (またはドライブ レターの順序をそのままにしたい場合) は、移行元の VM の VHD マッピングの LUN 番号をメモしておき、データ ディスクが移行先の VM でも同じ LUN にアタッチされていることを確認します。
これで、移行先の Storage アカウントで Virtual Machines を実行できます。