一般化 VHD ファイルから ARM 環境に VM を展開する

a-wataka

こんにちは。 Azure サポートチームの高橋です。

本日は一般化済みのイメージ (VHD ファイル) を使用し、リソース マネージャー モデル (ARM) 環境に VM を展開する手順をご紹介します。また、多くのお客様は旧ポータル (ASM) 環境にて既にマイ イメージに一般化された VHD をお持ちであるかと存じますので、その VHD をコピーして ARM 環境の VM にするという一工夫をしてみたいと思います。

ASM 環境からの一般化 VHD の持ち込みの手順は以下のステップ 1 ~ 3 にてご紹介していますが、旧ポータルのイメージではなく、新規に作成した持ち込みの一般化された VHD を使うケースの場合には、手順 4 から読み進めてください。

最初に、クラシック ポータルより作成した一般化済みのイメージ (VHD ファイル) の URL を確認します。

 

1. 一般化したイメージ (VHD) の URL をクラシック ポータルより確認する


  1. クラシック ポータル (https://manage.windowsazure.com/) にログインします。
  2. 左メニューの [仮想マシン] をクリックします。
  3. 画面上部の [イメージ] をクリックします。
  4. 当該イメージの名前をクリックします。
  5. 画面中央の [vhd] メニューの [場所] に記載されています URL をコピーします。

clavhd11

 

 

 

 

 

 

 

 

clavhd22

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

上記の VHD ファイルの URL は、後ほどの手順 3 で使用しますため、パスをお控えくださいますようお願いいたします。

ASM 環境にて作成した VHD ファイル(一般化済み)より ARM 環境に VM の展開をする手順は、大きく分けて以下の 3 つに分けられます。

 

2. 新ポータルより、リソース グループとストレージ アカウントを作成する


  1. 新ポータル (https://portal.azure.com/) にログインします。
  2. 画面左のメニューより、 [リソース グループ] をクリックします。
  3. [追加] を選択し、リソース グループを作成します。
  4. 作成したリソースグループを選択し、 [追加] をクリックします。
  5. [ストレージ アカウント] をクリックします。
  6. [作成] をクリックし、[リソース グループ] を先ほど作成したリソースグループに指定し、[作成] をクリックします。
  7. 作成が完了しましたら、ストレージアカウントをクリックし、 [BLOB] をクリックします。
  8. 画面上部の [コンテナー] をクリックします。名前を [vhds] に設定し、 [作成] をクリックします。

 

createcontainer

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. AzCopy を使用して、作成したストレージ アカウント内に VHD ファイルを複製する


  1. Microsoft Azure Storage Tools (https://aka.ms/downloadazcopy) をインストールし、起動します。
  2. 以下のコマンドを入力し、大元となる ASM 上の VHD ファイルから、ARM での VM 展開に利用する VHD ファイルを複製します。

AzCopy /Source:https://<コピー元 ストレージ アカウント名>.blob.core.windows.net/vhds /Dest:https://<コピー先 ストレージ アカウント名>.blob.core.windows.net/vhds /SourceKey:<コピー元 ストレージ アカウントのアクセスキー> /DestKey:<コピー先 ストレージ アカウントのアクセスキー> /Pattern:<VHD ファイル名>.vhd

※ アクセスキーの参照方法は後述します。

コマンド例) :

AzCopy /Source:https://mystorageclassic0123.blob.core.windows.net/vhds /Dest:https://mystorageresouce0123.blob.core.windows.net/vhds /SourceKey:xxxxxxxxxxxxxxxx== /DestKey:yyyyyyyyyyyyyyyyyyyyyyyy== /Pattern:classic.vhd

 

VHD ファイルの複製が完了すると、以下のように結果が表示されます。

Finished 1 of total 1 file(s).

[2016/06/03 19:10:25] Transfer summary:

-----------------

Total files transferred: 1

Transfer successfully:   1

Transfer skipped:       0

Transfer failed:         0

Elapsed time:           00.00:17:38

 

  1. 複製が終わりましたら、新ポータルよりコピー先ストレージアカウント内の [BLOB] をクリックし、[vhds] をクリックします。配下に複製された当該 VHD ファイルがあることを確認します。

AZVHD

 

アクセクキーに関しましては、新ポータルより確認をすることが可能です。

[/SourceKey] は、コピー元のストレージ アカウントにアクセスするためのキー(パスワードとなる)文字列のことです。今回は、ポータルの [ストレージ アカウント(クラシック)] 内にある、既存の VHD ファイルが格納されているストレージ アカウントをご選択いただき、画面上部の鍵のアイコンをクリックます。プライマリ アクセス キーをご指定下さい。

clakey1

 

[/DestKey] は、コピー先のストレージ アカウントにアクセスするためのキー(パスワードとなる)文字列のことです。今回は、ポータルにて、手順 2 で作成したストレージ アカウントを選択いただき、画面上部の鍵のアイコンをクリックします。 [key1] をご指定下さい。

Keynew

 

AzCopy の利用方法については、以下のドキュメントもご参考ください。

 

4. 一般化された VHD ファイルより、仮想マシンを展開する


ARM にて、VHD から仮想マシンの作成を行う場合には Azure PowerShell を用いることが便利です。

以下の Azure PowerShell スクリプトを使用し、 VM を展開します。

# 共通設定

$SubscriptionId = "xxxxxxxxxxxxxxxxxxxxxxxxxx" # 使用したいサブスクリプション ID

$ResourceGroupName = "xxx-RG" # 手順 2 で作成したリソース グループ名

$location = "xxxx" # リージョン名(手順 2 で作成したリソース グループのリージョンと同一に設定ください)

$pipName = "test-PIP" # パブリック IP アドレス名

$VnetName = "test-Vnet" # 仮想ネットワーク名

$AddressPrefix = "192.168.3.0/25" # プレフィックス

$SubnetName = "testSubnet" # サブネット名

$subnetPrefix = "192.168.3.0/27" # プレフィックス

$storageAccName = "mystorageresouce0123" # 手順 3 で指定したコピー先のストレージ アカウント名 (VHD が配置されているもの)

$nicname = "testnic" #NIC 名

$osDiskName = "classic" #OS ディスク名

$urlOfCapturedImageVhd = "https://mystorageresouce0123.blob.core.windows.net/vhds/classic.vhd" # 一般化済み VHD ファイルパス

# VM の設定

$VmName1 = "testVM" #仮想マシン名

$VmSize1 = "Standard_A1" #Standard_A1など仮想マシンのサイズ

# ログインおよびサブスクリプションの指定

Login-AzureRmAccount

Select-AzureRmSubscription -SubscriptionId $SubscriptionId

# パブリック IP アドレスの作成

$pip = New-AzureRmPublicIpAddress -Name $pipName -ResourceGroupName $ResourceGroupName -Location $location -AllocationMethod Static

# サブネットの作成

$subnetconfig = New-AzureRmVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $subnetPrefix

# 仮想ネットワークの作成

$vnet = New-AzureRmVirtualNetwork -Name $VnetName -ResourceGroupName $ResourceGroupName -Location $location -AddressPrefix $AddressPrefix -Subnet $subnetconfig

#NIC の作成

$nic = New-AzureRmNetworkInterface -Name $nicname -ResourceGroupName $ResourceGroupName -Location $location -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id

# 可用性セットを新規作成

$asName = Read-Host -Prompt "Enter a new Availability Set name"

$as = New-AzureRmAvailabilitySet -Name $asName -ResourceGroupName $ResourceGroupName -Location $location -PlatformUpdateDomainCount "5" -PlatformFaultDomainCount "3"

# ユーザー名・パスワードを設定

$cred = Get-Credential

# キャプチャーイメージが保存されたストレージアカウント情報を取得

$storageAcc = Get-AzureRmStorageAccount -ResourceGroupName $ResourceGroupName -AccountName $storageAccName

# 仮想マシンの設定を定義

$vmConfig = New-AzureRmVMConfig -VMName $VmName1 -VMSize $VmSize1

$vm = Set-AzureRmVMOperatingSystem -VM $vmConfig -Windows -ComputerName $VmName1 -Credential $cred -ProvisionVMAgent -EnableAutoUpdate

$osDiskUri = '{0}vhds/{1}{2}.vhd' -f $storageAcc.PrimaryEndpoints.Blob.ToString(), $VmName1.ToLower(), $osDiskName

$vm = Set-AzureRmVMOSDisk -VM $vm -Name $osDiskName -VhdUri $osDiskUri -CreateOption fromImage -SourceImageUri $urlOfCapturedImageVhd -Windows

#NIC の追加

$vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nic.Id

# 可用性セットに追加

$asRef = New-Object Microsoft.Azure.Management.Compute.Models.SubResource

$asRef.Id = $as.Id

$vm.AvailabilitySetReference = $asRef # To remove VM from Availability Set, set to $nul

# 仮想マシンを作成

New-AzureRmVM -ResourceGroupName $ResourceGroupName -Location $location -VM $vm

 

上記スクリプトでは、可用性セットを新規で作成し、仮想マシンの展開に併せて追加していますが、既存の可用性セット内に仮想マシンを展開する場合には、以下のコマンドを [# 可用性セットを新規作成] の項と入れ替えます。なお、既存の可用性セット内に他の VM がある場合には、 VNet を同一のリソースに設定いただきますようご留意願います。

 

# 既存の可用性セットの情報を取得

$asName = Read-Host -Prompt "Enter a Get Availability Set name"

$as = Get-AzureRmAvailabilitySet -Name $asName -ResourceGroupName $ResourceGroupName

 

補足いたしますと、上記のスクリプトは、一般化された既存の VHD ファイルを複製し、VM を展開するスクリプトになります。

そのため、複数台 VM を展開される場合にも新しく手動で VHD ファイルをコピーする必要がございません。

ただ、 手順 3 において AzCopy にて複製を行った、既存の一般化済み VHD ファイルはイメージの大本となりますので、削除をしないようにご注意をお願いたします。

 

Azure PowerShell につきましては、以下のドキュメントをご参考ください。

 

以上が、リソース マネージャー (新ポータル) でのイメージからの VM 展開手法となります。

 

一度スクリプトを作成していただければ、複製の際には以下のステップを行うことで、

既にご用意をいただいている、クラシックの一般化済みイメージを展開していただけます。

  1. Azure PowerShell により、VHD 名などのパラメータのみ変更し、実行
  2. VM 作成後、その他の設定についてはポータルから行う