Resource Explorer を使用して Windows OS をキャプチャーする

a-kysato

※ 4/11 一般化した VM についての注意事項を追記。それに伴いレイアウトを少し変更しました。

 

こんにちは、Azure サポートチーム 佐藤です。

ひとつ前の投稿では、Linux OS のキャプチャーの取り方をご紹介しましたが、今回は Windows OS 編をご紹介します。

以下の公開情報を参考に、

・一般化した Windows 仮想マシンイメージのキャプチャー

・キャプチャーイメージから新たな仮想マシンの作成

を実際に行いました。

イメージのキャプチャーには Azure Resource Explorer 、仮想マシンの作成には、Azure PowerShell を使用しています。

 

参考 :

リソース マネージャー デプロイメント モデルで Windows 仮想マシンをキャプチャする方法

https://azure.microsoft.com/ja-jp/documentation/articles/virtual-machines-windows-capture-image-resource-manager/

Azure Resource Manager で作成した仮想マシンをキャプチャーする

http://blogs.technet.com/b/junichia/archive/2015/11/25/3657462.aspx

 

※ご注意ください※

一般化 (Sysprep) の処理は切り戻しが行えません。また、一度、一般化してしまうと、同じ VM を今後起動することはできず、展開の処理を経る必要があります。

このため、一般化を行う前にバックアップを実施することをお勧めします。

  バックアップおよびリストアの方法については、下記の記事でご紹介しておりますのでご参考ください。

Azure VM のバックアップ – 新ポータルでの VM のバックアップ方法について

https://blogs.technet.microsoft.com/jpaztech/2016/02/18/azure-vm-backup-0218/

 

 

*********************************

作業の流れ

1. リソースマネージャーモデルの VM を Sysprep し、一般化を行う

2.Azure Resource Explorer を使用して、VM をキャプチャーする

3. キャプチャーしたイメージから新しい VM を作成する

*********************************

 

 

1. リソースマネージャーモデルの VM を Sysprep し、一般化を行う

1-1.OS のカスタマイズ作業を実施します。

 

1-2. 管理者権限でコマンド プロンプトを起動し、以下のパスより Sysprep.exe を実行します。

C:\Windows\System32\Sysprep\Sysprep.exe

 

1-3.[Generalize] にチェックを入れ、[シャットダウンオプション] の [Shutdown] を選択、[OK] をクリックします。

generalize9

 

1-4. 仮想マシンがシャットダウンされ、ポータルで状態が [停止済み] に変わります。

generalize1

 

 

2.Azure Resource Explorer を使用して VM をキャプチャーする

2-1.Azure Resource Explorer から、Azure アカウントにログインします。

 

2-2. 右上にある [Read/Write] を選択します。既定では [Read Only] に設定されています。

generalize10

 

2-3. 上部の検索ボックスに名前を入力、または、左側のメニューから [subscriptions] -> [resourceGroups] -> [対象のリソースグループ] -> [Microsoft.Compute] の順に展開し

一般化した仮想マシンを選択します。右側に、対応するテンプレートが表示されます。

generalize2

 

2-4.[Actions(POST,DELETE)] タブをクリックします。

 

2-5.[deallocate] ボタンをクリックします。

仮想マシン名の横にチェックマークが表示され、VM の状態が [停止済み(割り当て解除)] に変わります。

generalize3 generalize4

 

2-6.[generalize] ボタンをクリックします。

手順 2-5 と同様にチェックマークが表示され、仮想マシンが一般化済みとしてマークされます。

この generalize は、Azure 上から本 VM が一般化されたというフラグを立てるものであり、Windows や Linux OS としての一般化を実行するわけではありません。

(今回の手順 1 にて実行するように、Windows であれば、Sysprep の generalize をあらかじめ実行しておく必要があるということです。)

※一般化済みとしてマークされることで、仮想マシンの起動ができなくなります(次の起動はイメージを再展開した後となります。)

 

2-7.[capture] ボタンの下で、イメージをキャプチャーするための値を設定し、ボタンをクリックします。

{

"vhdPrefix": "xxxxx", #保存されるイメージ名(任意)

"destinationContainerName": "xxxxx", #保存先コンテナー名

"overwriteVhds": "true" または "false" #同じ VHD ファイルがあった場合に上書きするかどうか

}

generalize5

 

2-8. キャプチャーされた VHD ファイルは、仮想マシンと同じストレージアカウントに保存されます。

画面から確認する場合、ポータルから [ストレージ アカウント] メニューを選択し、キャプチャ元の VHD が存在するストレージ アカウントを開きます。

続いて、[BLOB] -> [system] -> [Microsoft.Compute] -> [Images] -> [2-7 で指定したコンテナー名] から確認できます。

generalize7 generalize8

 

 

3. キャプチャーしたイメージから新しい VM を作成する

※ Azure PowerShell とキャプチャーした VHD を使用して、新しい仮想ネットワークに VM を作成する方法です。

※キャプチャーした VHD が属していないリソースグループに、仮想マシンを作成することはできません。

VM イメージと、作成される仮想マシンが同じストレージアカウント内に存在する必要があります。

#共通設定

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

$ResourceGroupName = "xxxxxx" #既存のリソースグループ名 (ストレージアカウントとの紐付けがあるもの)

$location = "Japan West" #リージョン名

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

$VnetName = "myVnet" #仮想ネットワーク名

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

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

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

$storageAccName = "xxxxxx" #既存のストレージアカウント名 (VHD が配置されているもの)

$nicname = "mynic" #NIC名

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

$urlOfCapturedImageVhd = "https://xxxx.blob.core.windows.net/system/Microsoft.Compute/Images/xxxx/xxxx.vhd" #キャプチャした VHD ファイルパス

# VM の設定

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

$VmSize1 = "xxxx" #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

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

$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

#仮想マシンを作成

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

 

作成された仮想マシン

generalize6

キャプチャーしたイメージからは、複数の仮想マシンを立ち上げることが可能です。