Resource Explorer を使用して Windows OS をキャプチャーする
※ 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 で作成した仮想マシンをキャプチャーする
https://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] をクリックします。
1-4. 仮想マシンがシャットダウンされ、ポータルで状態が [停止済み] に変わります。
2.Azure Resource Explorer を使用して VM をキャプチャーする
2-1.Azure Resource Explorer から、Azure アカウントにログインします。
2-2. 右上にある [Read/Write] を選択します。既定では [Read Only] に設定されています。
2-3. 上部の検索ボックスに名前を入力、または、左側のメニューから [subscriptions] -> [resourceGroups] -> [対象のリソースグループ] -> [Microsoft.Compute] の順に展開し
一般化した仮想マシンを選択します。右側に、対応するテンプレートが表示されます。
2-4.[Actions(POST,DELETE)] タブをクリックします。
2-5.[deallocate] ボタンをクリックします。
仮想マシン名の横にチェックマークが表示され、VM の状態が [停止済み(割り当て解除)] に変わります。
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 ファイルがあった場合に上書きするかどうか
}
2-8. キャプチャーされた VHD ファイルは、仮想マシンと同じストレージアカウントに保存されます。
画面から確認する場合、ポータルから [ストレージ アカウント] メニューを選択し、キャプチャ元の VHD が存在するストレージ アカウントを開きます。
続いて、[BLOB] -> [system] -> [Microsoft.Compute] -> [Images] -> [2-7 で指定したコンテナー名] から確認できます。
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
キャプチャーしたイメージからは、複数の仮想マシンを立ち上げることが可能です。