Azure Resource Manager (ARM) 仮想マシンの複製方法のご紹介 (Part.1)

こんにちは! Azure サポート チームの清水です。

Azure にて冗長構成をとりたい場合や、同じ構成をもつ仮想マシンを複数台用意したい場合など、仮想マシンを複製するシーンは
様々あるかと思います。
そこで今回は、Azure 仮想マシンにおいて、実行中の仮想マシンを Azure portal を用いて複製する方法をご紹介します。

本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

概要


複製の方法は大きく4通りございます。

  1. 一般化された’イメージ’リソースを作成して’イメージ’から仮想マシンを作る
  2. ディスクのコピーを作成し、コピーしたディスクから仮想マシンを複製する
  3. Azure Backup を使用する
  4. Virtual Machine Scale Sets を使用する

それぞれの手法の大まかな特徴を表にまとめます。

# 1 2 3 4
方法 ”イメージ”リソース ディスクコピー Azure Backup VMSS
特徴 ・既存の VM は使用不可になる・OS ディスクおよびデータディスクを一括複製できる・ホスト名を任意に決めて作成できる ・既存の VM は使用可能・接続されているディスクごとにコピーする必要がある・同じホスト名の VM が作成される ・既存の VM は使用可能・OS ディスクおよびデータディスクを一括複製できる・同じホスト名の VM が作成される ・既存の VM は使用不可になる・ディスク構成のみならず、すべての構成が一元化する・Azure 側でホスト名が重ならないよう調整される
利用シーン ・既存 VM をマスターイメージとして複数の VM を作成したい ・現在の VM を残したまま VM を複製したい・別リージョンに VM を複製したい(※非管理ディスクのみ対応) ・既存の VM を残したまま手軽に VM を複製したい・コンスタントな VM のバックアップをとりたい ・大量の VM を一度に作成したい・大量の VM をすべて一元管理したい・複数の VM に対して負荷分散を行い、冗長性とパフォーマンスを向上したい・オートスケールをしたい
リージョン 同一リージョンのみ 非管理 ディスクを利用すればリージョンをまたげる 同一リージョンのみ 同一リージョンのみ
管理 / 非管理 ディスク(複製元の仮想マシン) どちらでも(非管理ディスクの場合は PowerShell 操作が必要) どちらでも(非管理ディスクの場合は PowerShell 操作が必要) どちらでも どちらでも(非管理ディスクの場合は PowerShell 操作が必要)

 

当ブログでは、方法[1]方法[2] についてご案内します。
方法[3]方法[4] は以下の URL をご参照ください。

Azure Resource Manager (ARM) 仮想マシンの複製方法のご紹介 (Part.2)
https://blogs.technet.microsoft.com/jpaztech/2018/09/25/arm-vm-replication-part-2/

また、当ブログでは、Azure Resource Manager(ARM) モデルの仮想マシンにおける複製手順をご紹介しております。
クラシックモデルの仮想マシンには適用できない場合があるのでご承知おきください。

1.’イメージ’ リソースを作成して ’イメージ’ から VM を作る


既存の仮想マシンを一般化し、イメージリソースを作成する方法になります。
作成したイメージを用いることで、同じ構成を持つ仮想マシンを何台でも作成することができます。

ただし、イメージ作成元の仮想マシンは、今後使用不可能となります。

また、使用可能なディスクの種類は以下の通りです。

移行後
管理 ディスク 非管理 ディスク
移行前 管理 ディスク ×
非管理 ディスク 〇(PowerShell) 〇(PowerShell)

[全体の流れ]

1-1. 仮想マシン を一般化する
1-2. 仮想マシンのイメージを作成する
1-3. イメージから仮想マシンを作成する

[注意事項]

  • 一度イメージを作成すると、当該の仮想マシンは起動ができなくなります。十分な検証ののち、実施していただくよう
    お願いいたします。
    元の VM の機能を保持したい場合は、方法[2] または[3] をご利用いただくか、事前にバックアップを取得しておくことを
    お勧めいたします。
  • サブスクリプション・リージョンをまたいで仮想マシンを作成することはできません。

[手順]

-管理 ディスクの場合

以下の記事に詳細な手順がまとまっておりますので、こちらをご参照ください。

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

[参考資料]

Azure で一般化された VM の管理対象イメージを作成する
/ja-jp/azure/virtual-machines/windows/capture-image-resource

管理イメージから VM を作成する
/ja-jp/azure/virtual-machines/windows/create-vm-generalized-managed

Azure PowerShell を使用して Azure VM のカスタム イメージを作成する
/ja-jp/azure/virtual-machines/windows/tutorial-custom-images

-非管理 ディスクの場合

1-1. 仮想マシン を一般化する
A. Windows の場合

Sysprep を使用して、Windows VM 上のすべての個人アカウント情報を削除し、一般化します。

① 実行中の仮想マシンに RDP 接続をします。

② 仮想マシンのエクスプローラにて ”C:\Windows\System32\Sysprep" フォルダを開き、 Sysprep.exe を実行します。
この操作は、コマンドプロンプトからも実行可能です。

<コマンドにて実行する場合>

  • コマンドプロンプトを管理者権限にて開く

  • Sysprep のディレクトリに移動する

     cd C:\Windows\System32\Sysprep
    
  • Sysprep を実行する

     Sysprep.exe
    

③ システム準備ツールで以下の設定をし、「OK」 をクリックします。

  • システムクリーンアップアクション:システムの OOBE (Out-of-Box Experience) に入る
  • 「一般化する」にチェックを入れる
  • シャットダウンオプション:シャットダウン

Sysprep が完了すると、仮想マシンが自動的にシャットダウンされます。( RDP 接続も自動的に切断されます。)
Azure Portal 上で以下のように表示されれば問題ございません。

B. Linux の場合

Linux VM をご利用の場合、 Azure VM エージェントで VM のプロビジョニングを解除し、マシン固有のファイルとデータ
(ユーザーアカウント等)を削除します。

  • 実行中の Linux VM に SSH 接続します。

  • SSH のウィンドウで、以下のコマンドを入力します。

     sudo waagent -deprovision+user
    
  • 仮想マシンの資格情報を確認するメッセージが表示されるので、パスワードを入力します。

  • 確認メッセージが表示されるので、注意事項を確認のうえ、「y」 と入力して続行します。

  • コマンドが完了したら、「exit」 と入力し、 SSH 接続を終了します。

  • 最後に、Azure portal( https://portal.azure.com )で、該当の仮想マシンの管理ブレードを開き、
    [概要]から画面上部[停止]をクリックして仮想マシンの割り当てを解除します。

(参考)仮想マシンまたは VHD のイメージを作成する方法
/ja-jp/azure/virtual-machines/linux/capture-image#step-1-deprovision-the-vm

 
1-2. 仮想マシンのイメージを作成する
1-3. イメージから VM を作成する

続いて一般化された VM のイメージを作成します。

残念ながら、非管理 ディスクを使用した仮想マシンのイメージ作成は、 Portal では実装されておりません。
PowerShell にてご実施いただけるので、以下のドキュメントをご参照ください。

Azure VM から非管理対象 VM イメージを作成する方法
/ja-jp/azure/virtual-machines/windows/sa-copy-generalized

2. 管理ディスクのスナップショット、または非管理ディスクVHDのコピーから
VMを作る


方法[2] は、仮想マシンのディスクの VHD ファイルのコピーを作成し、新しく OS ディスクを作成して仮想マシンを作成する方法です。
使用可能なディスクの種類は以下の通りです。

移行後
管理 ディスク 非管理 ディスク
移行前 管理 ディスク ×
非管理 ディスク 〇(PowerShell) 〇(PowerShell)

[注意事項]

  • 本項にてご紹介するのは、 OS ディスクの読み取り専用完全コピーから、新たな仮想マシンを作成する方法となります。
    仮想マシンの完全なコピーではございませんので、ご注意ください。
  • ご利用中の仮想マシンにデータディスクが接続されている場合、同様の手順でデータディスクをコピーし、再接続を行ってください。
  • 実行中の仮想マシンでも実行は可能ですが、事前に仮想マシンを停止してから取得することでデータが保全されます。

A. 管理 ディスクの場合

ディスクのスナップショットを作成することで、ディスクの読み取り専用完全コピーを作成することができます。
※サブスクリプションおよびリージョンをまたぐスナップショットの作成はできません。

[全体の流れ]

2-A-1. Azure portal にて、管理 ディスクのスナップショットを作成する
2-A-2. スナップショットから ’ディスク’ リソースを作成する
2-A-3. 作成されたディスクリソースを用いて仮想マシンを作成する

[手順]

2-A-1. Azure portal にて、管理 ディスクのスナップショットを作成する

① Azure portal( https://portal.azure.com )より、複製したい仮想マシンの管理ブレードを開きます。

② 「設定」メニュー > [ディスク]より OS ディスクをクリックします。

③ [概要]より、画面上部[+スナップショットの作成]をクリックします。

④ 任意のパラメータを入力し、「作成」をクリックします。
※サブスクリプションおよびリージョンをまたぐスナップショットの作成はできません。

2-A-2. スナップショットから’ディスク’リソースを作成する

① [すべてのサービス]より[ディスク]を選択し、画面左上[+追加]をクリックします。

②マネージド ディスクの作成ウィザードにて任意のパラメータを入力します。
-この際、「ソースの種類」を「スナップショット」とし、2-1にて作成したスナップショットを選択します。
-「作成」をクリックします。

なお、選択したサブスクリプションおよびリージョンに存在するスナップショットのみ使用可能です。

2-A-3. 作成されたディスクリソースを用いて仮想マシンを作成する

2-A-2 にて作成した管理 ディスクの管理ブレードを開きます。

② [概要]より[+VM の作成]をクリックします。

③ 新規に仮想マシンを作成する際と同様に設定を行い、「OK」 をクリックします。

これで、新しく管理 ディスクの仮想マシンが作成されました!

 

B. 非管理 ディスクの場合

OS ディスクの VHD ファイルを、AzCopy というツールを用いてコピーします。

[全体の流れ]

2-B-1.AzCopy を用いて OS ディスクをコピーする
2-B-2.コピーした VHD ファイルから仮想マシンを作成する

[手順]

2-B-1.AzCopy を用いて OS ディスクをコピーする

① コピー先となるストレージ アカウントにコンテナーを作成します。
-コピー先ストレージ アカウントの管理ブレードを開きます。
-「BLOB SERVICE」 メニューより [BLOB] を選択し、左上の[+コンテナー]をクリックします。

-任意の名前・アクセスレベルを設定し、「OK」 をクリックします。

② Microsoft Azure Storage Tools を以下よりダウンロードし、お手元のコンピュータにインストールします。

③ 管理者権限にてコマンドプロンプトを起動し、AzCopy のディレクトリに移動した後、AzCopy コマンドを実行します。
※同じデータセンター内での VHD ファイルの移動は無償ですが、データセンターをまたいだ VHD ファイルの移動は有償となります。

 コマンド例:
Cd C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy
 AzCopyコマンド基本構文:
Azcopy.exe /source:(コピー元コンテナーのURL) /dest:(コピー先コンテナーのURL) /sourceKey:(コピー元ストレージ アカウントのアクセス キー) /destKey:(コピー先ストレージ アカウントのアクセス キー) /pattern:"(VHD ファイル名).vhd"

それぞれパラメータの確認方法は以下の通りです。

  • コンテナーのURL:[ストレージ アカウント] > [BLOB]より、該当コンテナーのコンテキストメニューを開き、コンテナーのプロパティよりご確認ください。
  • アクセス キー:[ストレージ アカウント] > [アクセス キー]よりご確認ください。
    ※アクセス キーは通常2種類用意されておりますが、どちらを使用しても問題ございません。
  • VHD ファイル:コピー元のファイル名をご指定ください。
    ※既定では、[ストレージ アカウント] > [コンテナー]より、[vhds] という名前のコンテナー内に VHD ファイルが
    入っております。

2-B-2.コピーした VHD ファイルから仮想マシンを作成する

仮想マシンは、管理 ディスクまたは非管理 ディスクで作成頂けます。

<管理 ディスクを使用して仮想マシンを作成する場合>

① Azure portal ( https://portal.azure.com )より、[すべてのサービス] > [ディスク]を選択します。

② 画面上部[+追加]をクリックします。

③ 各種パラメータを入力します。
-この際、「ソースの種類」を「ストレージ BLOB 」とし、「ソース BLOB」 には上記2-2にてコピーした VHD ファイルを
 選択します。
-「 OS の種類」を作成元の仮想マシンに合わせ、 Windows または Linux から選択します。

④ 「作成」をクリックします。

⑤ 最後に、2-A-3と同じようにして、仮想マシンを作成します。

これで、管理 ディスクを用いた新しい仮想マシンが作成されました!

 

<非管理 ディスクを使用して仮想マシンを作成する場合>

非管理 ディスクを用いる場合、仮想マシンの作成操作は、残念ながら Azure portal から行うことができません。
以下の記事に PowerShell から仮想マシンを作成するサンプルスクリプトがございますので、ご参照ください。

特殊化 VHD ファイルから ARM 環境へ仮想マシンをデプロイする Azure PowerShell
https://blogs.technet.microsoft.com/jpaztech/2017/05/24/deployfromspecializedvhd-powershell/

※追加の構成がございましたらご自身にてスクリプトを追加するか、仮想マシンの作成後、追加の構成を行ってください。
※可用性セット等、仮想マシン作成後の設定ができない項目がございますのでお気を付けください。

  
なお、事前に仮想マシンを一般化し、一般化 VHD ファイルから新たに仮想マシンを作成することも可能です。

その場合、本ブログの方法[1-1] をご参照の上、事前に仮想マシンの一般化を行ってください。

本項にてご紹介した AzCopy の手法を用いてVHD ファイルのコピーを行った後、以下のブログの
「4. 一般化された VHD ファイルより、仮想マシンを展開する」の方法で、PowerShell より仮想マシンを作成する流れとなります。

一般化 VHD ファイルから ARM 環境に VM を展開する
https://blogs.technet.microsoft.com/jpaztech/2016/06/03/newcreatevmfromasmvhdsys/

 


以上、2通りの方法で ARM の仮想マシンを複製する方法についてご紹介しました。
次回、Part.2では Azure Backup や Azure Virtual Machine Scale Sets を活用して仮想マシンを複製する方法を
ご紹介します。