SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Windows Azure VM を PowerShell で作成

leave a comment

PowerShell で Azure を操作する際のメモ の続きになります。

Windows Azure VM (仮想マシン) を PowerShell で作ってみたいと思います。

以下が作成した PowerShell になります。
<> になっている個所は適宜値を設定が必要になります。
また、ストレージアカウントと仮想ネットワークについては事前に作成しています。
# パイプでつなげると 1 行にできる個所が結構あるのですが、GUI のどの設定と対応するのだろうと確認しながら作っていたので結構わかれています。

$SubscriptionName = "<サブスクリプション名>"
$CurrentStorageAccount = "<ストレージアカウント名>"

$ImageName = "<イメージ名>"

$AdminUser = "<Administrator ユーザー名>"
$AdminPassword = "<Administrator パスワード>"

$VMName = "<仮想マシン ホスト名>"
$ServiceName = "<仮想マシン サービス名>"
$TimeZone = "Tokyo Standard Time"
#$TimeZone = "UTC"

$StoragePath = "https://<ストレージアカウント名>.blob.core.windows.net/vhds/$ServiceName-os.vhd"
$DiskCache = "ReadOnly"
#$DiskCache = "ReadWrite"

$AffinityGroup = "AzureVMAG"
$AzureVNSubnet = "Subnet-1"
$AzureVN = "AzureVN"

$Dns = New-AzureDns -Name "Nawagami-DNS" -IPAddress "172.16.0.4"
#$Dns = ""

$DomainName = "NAWAGAMI"
#$DomainName = ""
$DomainFQDN = "nawagami.local"
$DomainUser = "<ドメイン参加に使用するユーザー名>"
$DomainPassword = "<ドメイン参加に使用するパスワード>"

$AzureSubScription = Get-AzureSubscription -SubscriptionName $SubscriptionName
if ($AzureSubScription.CurrentStorageAccount -eq $false)
{
    Set-AzureSubscription -SubscriptionName $SubscriptionName  -CurrentStorageAccount $CurrentStorageAccount
}

Select-AzureSubscription $SubscriptionName

$VMConfig = `
New-AzureVMConfig -Name $VMName `
-InstanceSize ExtraSmall -ImageName $ImageName `
-MediaLocation $StoragePath -HostCaching $DiskCache -DiskLabel "OS Disk" | `
Set-AzureSubnet -SubnetNames $AzureVNSubnet
$VMConfig.OSVirtualHardDisk.DiskName = "$ServiceName-os-disk"

if($DomainName -eq "")
{
    Write-Host "Domain Off"
    $VMConfig = $VMConfig | `
    Add-AzureProvisioningConfig -Windows -AdminUsername $AdminUser -Password $AdminPassword -TimeZone $TimeZone
}else{
    Write-Host "Domain On"
    $VMConfig = $VMConfig | `
    Add-AzureProvisioningConfig -WindowsDomain -AdminUsername $AdminUser -Password $AdminPassword -TimeZone $TimeZone `
    -JoinDomain $DomainFQDN -Domain $DomainName -DomainUserName $DomainUser -DomainPassword $DomainPassword
}

if ($Dns -eq "")
{
    Write-Host "DNS Off"
    New-AzureVM -ServiceName $ServiceName -VNetName $AzureVN -AffinityGroup $AffinityGroup -VMs $VMConfig
}else{
    Write-Host "DNS On"
    New-AzureVM -ServiceName $ServiceName -VNetName $AzureVN -AffinityGroup $AffinityGroup -VMs $VMConfig -DnsSettings $Dns
}

 

このようなスクリプトを使用すると PowerShell で Azure VM を作成することができます。

スクリプトを使用していて気づいた点としては、

  • サブスクリプションの CurrentStorageAccount が設定されていないとエラーになってしまった
  • ポータルのディスクの名前を設定する場合は、[OSVirtualHardDisk.DiskName] で設定する必要がある

といった点でしょうか。

[CurrentStorageAccount] を設定していないと以下のエラーが発生してしまいました。

New-AzureVM : CurrentStorageAccount is not accessible. Ensure the current storage account is accessible and in the same location or affinity group as your cloud service.

Azure のポータルから以下のような仮想マシンで使用しているディスクの名前を確認することができます。
image

このディスクの名前ですが、New-AzureVMConfig の Label や DiskLabel ではなく、OSVirtualHardDisk.DiskName を設定しないといけないようでした。

上記のスクリプトは $Dns や $DomainName を空白にすることで DNS の設定やドメインの参加をスキップすることができます。
今まで意識していなかったのですが、仮想マシンを作成する際にタイムゾーンを設定することもできるようですね。

デフォルトで用意されているギャラリーのイメージを使用して PowerShell で仮想マシンを作成することも可能です。

イメージの名称については [Get-AzureVMImage] で確認をすることができます。
ブログを書いている時点の Windows Server 2012 のイメージは [a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-Datacenter-201304.01-en.us-127GB.vhd] が最新となりますのでイメージ名にはこれを設定すると仮想マシンを作成できます。
# PowrShell ISE で [Get-AzureVMImage | Out-GriodView] を使うと一覧を読みやすいかと。

直近の更新で仮想ネットワークの DNS は VM が使用中でも設定できるようになりましたので、今はこの辺は PowerShell でなくても後付けで設定できますね。

AlwaysOn を組む場合はドメイン参加が必須
なので、仮想マシン作成時にドメインに参加できると複数台展開するときは楽ですね。

頻繁な展開をする際にはスクリプトを持っていると結構楽かもしれないな作っていて思いました。

Share

Written by Masayuki.Ozawa

5月 2nd, 2013 at 9:14 pm

Posted in Windows Azure

Tagged with ,

Leave a Reply