特殊化 VHD ファイルから ARM 環境へ仮想マシンをデプロイする Azure PowerShell

こんにちは。Azure サポートチームの小久保です。
特殊化 VHD ファイルから ARM 環境へ仮想マシンをデプロイする Azure PowerShell のサンプルスクリプトをご紹介します。
なお、このサンプル スクリプトは管理ディスクを使用していない環境を想定しています。管理ディスク環境への変更は、このスクリプトで VM を作った後、別途 Azure VM を Azure Managed Disks に移行する をご参照の上、変換していただくと簡単です。
「注意事項」をご確認の上、ご利用をお願いいたします。

 

注意事項


  • Azure PowerShell のバージョンは 3.3.0 と 4.0.1 にて検証を行っておりますが、バージョンによってパラメータが異なる可能性があります。
  • リソース グループ / 仮想ネットワーク / サブネット / 可用性セットは事前に作成されていることを前提としています。
  • 本スクリプトで作成されないリソースは、必要に応じて Azure ポータルなどを利用し、別途作成をお願いいたします。
  • このスクリプトで作成するネットワーク セキュリティ グループは、仮想マシンのネットワーク インターフェース (NIC) に定義されますので、別途、仮想ネットワークのサブネットに定義する場合には、ポータル UI などから設定してください。(NIC の NSG と仮想ネットワーク サブネットの NSG 両方がある場合、両方のルールで許可された通信が有効になります。)
  • ネットワーク セキュリティ グループは、セキュリティ上非常に重要ですので、要件に合わせて適宜変更をお願いいたします。
  • サンプルのスクリプトである為、責任は一切負いかねます。十分に検証いただいた上でご利用をお願いいたします。

 

ご参考


 

サンプルスクリプト


 #設定項目
$SubscriptionId = "サブスクリプション ID"
$ResourceGroupName = "リソース グループ名"
$Location = "リージョン"
$VhdUri = "OS ディスクの VHD フルパス"
$VmName = "仮想マシン名"
$VmSize = "仮想マシンサイズ"
$VnetName = "仮想ネットワーク名"
$SubnetName = "サブネット名"
$PublicIpName = "パブリック IP アドレス名"
$NsgRuleName = "セキュリティ規則名"
$NsgName = "ネットワーク セキュリティ グループ名"
$Nic1Name = "ネットワーク インターフェイス名"
# 可用性セットは、任意
$AvailabilitySetName = "可用性セット名"

# ログインおよびサブスクリプションの指定
Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionId $SubscriptionId

#対象の仮想ネットワーク、サブネット情報を取得
$Vnet = Get-AzureRmVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VnetName
$Subnet = Get-AzureRmVirtualNetworkSubnetConfig -Name $SubnetName -VirtualNetwork $Vnet

# 対象の可用性セット情報を取得 (任意)
$AvailabilitySet = Get-AzureRmAvailabilitySet -Name $AvailabilitySetName -ResourceGroupName $ResourceGroupName

# 仮想マシンの設定を定義
$VmConfig = New-AzureRmVMConfig -Name $VmName -VMSize $VmSize
$VmConfig = Set-AzureRmVMOSDisk -VM $VmConfig -VhdUri $VhdUri -Name "OSDisk" -CreateOption attach -Windows `
    -Caching ReadWrite

# 可用性セットは、任意
$VmConfig.AvailabilitySetReference = $AvailabilitySet.Id

# パブリック IP を作成
$Pip = New-AzureRmPublicIpAddress -ResourceGroupName $ResourceGroupName -Location $Location `
    -AllocationMethod Static -IdleTimeoutInMinutes 4 -Name $PublicIpName

# 受信セキュリティ規則を作成 (For port 3389)
$NsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig -Name $NsgRuleName -Protocol Tcp `
    -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
    -DestinationPortRange 3389 -Access Allow

# ネットワーク セキュリティ グループ を作成
$Nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $ResourceGroupName -Location $Location `
    -Name $NsgName -SecurityRules $NsgRuleRDP

# NIC を作成、追加
$Nic1 = New-AzureRmNetworkInterface -Name $Nic1Name -ResourceGroupName $ResourceGroupName -Location $Location `
    -SubnetId $Subnet.Id -PublicIpAddressId $Pip.Id -NetworkSecurityGroupId $Nsg.Id
$Nic1 = Get-AzureRmNetworkInterface -ResourceGroupName $ResourceGroupName -Name $Nic1Name
$VmConfig = Add-AzureRmVMNetworkInterface -VM $VmConfig -NetworkInterface $Nic1
$VmConfig.NetworkProfile.NetworkInterfaces.Item(0).Primary = $true

#仮想マシンを作成
New-AzureRmVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VmConfig -Verbose

 

本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。