「イメージ」リソースをサブスクリプション・リージョン間でコピーする


※ 更新 2019/01/15  Azure ポータル等から管理ディスク・管理イメージが移動できるようになりましたため、一部内容を修正・追記いたしました。

こんにちは、Azure サポートチームの米田です。
Azure 仮想マシンに管理ディスク(Managed Disks)の機能が登場して1年以上経ちました。管理ディスクの仮想マシンから「イメージ」リソースを作成し、複数仮想マシンを展開するテンプレートとして使用されているお客様も多いのではないでしょうか。以前にAzure サポートチームでは、心血注いで作った仮想マシンのイメージを、是非他のサブスクリプションでも使い倒したい!というお客様向けに、イメージリソースのサブスクリプション間の移動方法について次のような手順をご案内してきました。

サブスクリプション間で「イメージ」リソースをコピーする
https://blogs.technet.microsoft.com/jpaztech/2017/08/25/howtocopyimagebetweensubscriptions/

しかしながら上記の手順は、「イメージ」作成の元ネタとなった 「ディスク」リソースが削除されていない場合にのみ使用が可能でした。今回は、「イメージ」作成の元ネタとなった「仮想マシン」や 「ディスク」が削除されている状態で、他のサブスクリプションへイメージを移動する方法をご案内します。なお、今回ご案内する手順は、サブスクリプション間の移動だけではなく、イメージのリージョン間の移動にも応用できますので、Azure仮想マシンの検証や運用に少しでもお役に立てば幸いです。

■手順

  1. イメージから再度仮想マシンを作成する
  2. 仮想マシンをOS内部で一般化する
  3. 仮想マシンの管理ディスクを別サブスクリプションにコピーする
  4. イメージを再作成する
  5. 不要なリソースを削除する

手順が多くて意外と大変だと思われた方もおられるかと思います。「管理ディスク」や「イメージ」リソースのサブスクリプション間の移動を容易にする手段については現在開発中になります。次のリソース移動の対応が進められておりますが、現時点で移動するための手段と理解ください。
2019/1/15 更新
多くのフィードバックの結果もあり、2018 年 9 月 24 日以降、管理ディスクやイメージリソースのサブスクリプション間、リソースグループ間の移動がリリースされました。Azure Active Directory テナントが同一のサブスクリプション間については、現在次の移動方法もご利用いただけますのでご活用ください。

新しいリソース グループまたはサブスクリプションへのリソースの移動
/ja-jp/azure/azure-resource-manager/resource-group-move-resources#virtual-machines-limitations

※本手順は ARM (リソースマネージャー モデル / V2)を対象にした記事になります。
※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

1.イメージから再度仮想マシンを作成する


Azureポータルから実施可能です。
[イメージ] リソースを選択し、[+ VM の作成] をクリックし、各種パラメーターを指定し、仮想マシンを作成します

[イメージ]から作成された仮想マシンは、管理ディスクの構成となりますので、仮想マシンデプロイ後は、以下のように”ディスク”リソースが新規作成されています。

このあとの手順は、「ディスク」リソースがあれば完了できます。そのため、1で作成された仮想マシンは、この時点でポータルから停止(割り当て解除)するか、削除ください。

2. 仮想マシンをOS内部で一般化する


手順1で作成した仮想マシンを、OS内部で一般化します。仮想マシン内部で一般化をおこなう方法は、Windows / Linuxで異なりますが、以下の「1. 仮想マシン内部で一般化する」の手順で実施することが可能です。Windowsであればsysprep、Linuxであれば仮想マシンエージェントによるdeprovisionを実行ください。

管理ディスク (Managed Disks) の “イメージ” リソースを使用し、仮想マシンを複数台展開する
https://blogs.technet.microsoft.com/jpaztech/2017/05/10/deployvmsfrommanagedimage/

3. 仮想マシンの管理ディスクを別サブスクリプションにコピーする


管理ディスクのコピーは、次の手順に従います。移行先サブスクリプションのストレージアカウントにディスクのデータ(vhd)をコピーします

管理ディスク (Managed Disks) のサブスクリプション間やリソース グループ間の移行について
https://blogs.technet.microsoft.com/jpaztech/2017/08/17/export-managed-disks-to-vhd/

この時、コピー先ストレージアカウントを元のイメージと別リージョンとしていただくことも可能です。別リージョンにコピーいただいた場合は、次の手順でストレージアカウントと同じリージョンにイメージを作成でき、そのリージョンで仮想マシンを展開することができます。
※リージョン間を跨ぐデータコピーは、データ転送料金が発生するためご注意ください。

4. イメージを再作成する


手順3でコピーしたvhdファイルから、管理イメージを再作成します

 $vmName = "myVM" #仮想マシン名
$rgName = "myResourceGroup" #リソーグループ名
$location = "JapanEast" #リージョン名
$imageName = "myImage" #イメージ名
$osVhdUri = "https://mystorageaccount.blob.core.windows.net/vhdcontainer/osdisk.vhd" #手順3でコピーしたvhdファイルのパス
$osType = "Windows" #OS種別 Windows Or Linux

$imageConfig = New-AzureRmImageConfig -Location $location
$imageConfig = Set-AzureRmImageOsDisk -Image $imageConfig -OsType Windows -OsState Generalized -BlobUri $osVhdUri
$image = New-AzureRmImage -ImageName $imageName -ResourceGroupName $rgName -Image $imageConfig

5. 不要なリソースを削除する


手順1で作成した仮想マシンに紐づくリソースと手順3でコピーしたvhdファイルを削除します。