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

こんにちは。 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 作成後、その他の設定についてはポータルから行う