Azure上でキャプチャした仮想マシンイメージから仮想マシンを作成する

samatsu 9/7/2015 4525 N/A Azure PowerShell

Azure仮想マシンでは仮想マシンのイメージをキャプチャして特定の仮想マシンのスナップショットを作成することができます。

今回、マーケットプレースではなく、キャプチャしたSpecializedな仮想マシンイメージから仮想マシンのインスタンスを作成する方法を調べたのでサンプルスクリプトを記載します。

前提として今回紹介するスクリプトは既存のクラウドサービスに、キャプチャした仮想マシンイメージを作成することとします。仮想マシンは仮想ネットワークを使用するようにします。

まず、仮想マシンを作成するストレージアカウントを紐づけます。

# CurrentStorageAccountNameに今回作成するVM用のストレージアカウントを設定する
$subscriptionName = 'サブスクリプションの名前'
$storageAccount = '仮想マシンを作成するストレージアカウント名'
Set-AzureSubscription -SubscriptionName $subscriptionName -CurrentStorageAccountName $storageAccount

次に、作成する仮想マシンのコンフィグレーションを行います。今回は作成する仮想マシンは仮想ネットワークを使用するので、サブネット名の設定をしています。また、リモートデスクトップのポート名とHTTP用の80番ポートのエンドポイントの設定を行っています。

# 作成するVMの構成の設定
$vmname = "SampleVM2"
$vmsize = "Standard_DS1"
$capturedImageName = "キャプチャしたイメージの名前"
$vm1 = New-AzureVMConfig -Name $vmname -InstanceSize $vmsize -ImageName $capturedImageName
$vm1 | Set-AzureSubnet "サブネットの名前"
#SysprepされていないSpecializedなキャプチャされたイメージから作成する場合は-AdminUsername,-Password オプションは指定できない。
$vm1 | Add-AzureProvisioningConfig -Windows  -EnableWinRMHttp 
#EnableWinRMHttpオプションを指定したときに自動作成されるリモートデスクトップのポートをSet-AzureEndpointで上書き
#80番ポートのエンドポイントも追加
$vm1 | Set-AzureEndpoint -Name "RemoteDesktop" -Protocol "tcp" -PublicPort 53389 -LocalPort  3389 | Add-AzureEndpoint -Name "HTTP" -Protocol "tcp" -PublicPort 80 -LocalPort 80

あとは作成先のクラウドサービス名を使用して仮想マシンを作成します。

$cloudService = "クラウドサービス名"
New-AzureVM -ServiceName $cloudService -VMs $vm1

これで仮想マシンを作成できます。環境に合わせて適宜パラメーターを変更してください。もしNew-AzureVMコマンドレットで 次のエラーメッセージが表示された場合は -VNetName パラメーターに仮想ネットワーク名を設定してください。仮想ネットワーク名はポータルに表示される名前と一致しない可能性があるので仮想ネットワーク名を指定してもうまくいかない場合あh仮想ネットワークのxmlをダウンロードして確認してください。

New-AzureVM : BadRequest: The virtual network ID cannot be null or empty.

各コマンドレットの使い方の詳細はMSDNを参照してください。