Power Shellを利用してAzure Virtual Machine(CentOS 7)を作成してみた

 

今回は、マイクロソフト様のサイトに”Power Shellを利用して完全なVirtual Machineを作成する”という記事があったので試してみました。

https://docs.microsoft.com/ja-jp/azure/virtual-machines/scripts/virtual-machines-linux-powershell-sample-create-vm

今回はCentOS 7.5で作成しています。

1 .今回作成した環境の前提条件

今回は自身の環境に合わせて、以下の通りとしてます。

・リソースグループや仮想ネットワーク、Subnetが作成済みである。
・ログインはID、PWDで実施する。
・PublicIPは利用せず、ローカルのIPは固定する。
・NSGの設定は行わない。(Subnet単位でNSGの設定を行っている為)
・可用性セットは作成済みである。

.CentOSのイメージを検索する。

利用するCentOSのイメージを検索します。CentOSのパブリッシャー名は、”OpenLogic”になります。

#仮想マシンを作成するリージョン名
$locName=“japaneast”
$pubName=“OpenLogic”
$offerName=“CentOS”
#パブリッシャー名を検索する場合は下記を利用します。
#Get-AzVMImagePublisher -Location $locName
#offerName確認時は、以下のコマンドを実行します。
#Get-AzVMImageOffer -Location $locName -Publisher $pubName
Get-AzVMImageSku -Location $locName -Publisher $pubName -Offer $offerName
#2019年10月時点では以下の通りの値が得られます
Skus Offer PublisherName Location Id
—- —– ————- ——– —
6.10 CentOS OpenLogic japaneast /Subscriptions/(省略)/japaneast/Publishers/OpenLogic/ArtifactTypes/VMImage/Offers/CentOS/Skus/6.10

~(省略)~

7.5 CentOS OpenLogic japaneast /Subscriptions/(省略)/japaneast/Publishers/OpenLogic/ArtifactTypes/VMImage/Offers/CentOS/Skus/7.5

7.6 CentOS OpenLogic japaneast /Subscriptions/(省略)/japaneast/Publishers/OpenLogic/ArtifactTypes/VMImage/Offers/CentOS/Skus/7.6

7.7 CentOS OpenLogic japaneast /Subscriptions/(省略)/japaneast/Publishers/OpenLogic/ArtifactTypes/VMImage/Offers/CentOS/Skus/7.7

3 .利用するSubnetのIDを調べる

利用するSubnetのIDを検索します。NIC作成時に必要になります。

#仮想マシンを作成するリージョン名
$rgNameVnet =“仮想ネットワークがあるRG名”
$VnetName =“仮想ネットワーク名”
$vnet = Get-AzVirtualNetwork -ResourceGroupName $rgNameVnet -Name $VnetName
$subnet0 = $vnet.Subnets[0].Id
$subnet0
#以下のような値が得られます。0から数字を変えて、自分が利用するSubnet名が該当するのを検索します。
/subscriptions/XXX/resourceGroups/RG名/providers/Microsoft.Network/virtualNetworks/仮想ネットワーク名/subnets/Subnet名

 3.仮想マシンを作成する。

仮想マシンを作成します。

#仮想マシンの変数情報
$rgName =“VMを構築するRG名”
$vmName =“構築するVM名”
$vmSize =“Standard_B1s” 
$location =“japaneast” 
$OSUser = “OSのユーザー名”
$OSPword = “OSのパスワード”

#NICの変数情報
$NicName =“ネットワークカード名”
$rgNameVnet =“仮想ネットワークがあるRG名”
$VnetName =“仮想ネットワーク名”
$PrivateIP = “仮想マシンに付与するローカルのIPアドレス”

#可用性セット名
$AvailabilitySetName =“可用性セット名”

#DISKの変数情報
#$DISKTypeは、利用するOSのディスクタイプを指定します。
$DISKName =“ディスク名”
$DISKType =“Standard_LRS”

#パスワードの作成
$Pword = ConvertTo-SecureString -String $OSPword -AsPlainText -Force
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $OSUser, $Pword

#NICの作成を実施します。
#$vnet.Subnets[X]には、先ほど調べたSubnetIDを設定します。(0-9の半角数字)
$vnet = Get-AzVirtualNetwork -ResourceGroupName $rgNameVnet -Name $VnetName
$subnet = $vnet.Subnets[X].Id
$nic = New-AzNetworkInterface -Name $NicName -ResourceGroupName $rgName `
-Location $location -SubnetId $vnet.Subnets[X].Id `
-PrivateIpAddress $PrivateIP

#仮想マシンの作成のためのConfigを設定します。
#Set-AzVMOperatingSystem 行には、先ほど調べたOSのイメージの値を設定します。今回は7.5を指定しています。
$AvailabilitySet = Get-AzAvailabilitySet -ResourceGroupName $rgName -Name $AvailabilitySetName
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetID $AvailabilitySet[0].Id ` | `
Set-AzVMOperatingSystem -Linux -ComputerName $vmName -Credential $cred | `
Set-AzVMOSDisk -name $DISKName -StorageAccountType $DISKType -CreateOption FromImage| `
Set-AzVMSourceImage -PublisherName OpenLogic -Offer CentOS -Skus 7.5 -Version latest | `
Add-AzVMNetworkInterface -Id $nic.Id

#仮想マシンの作成を実行します。
New-AzVM -ResourceGroupName $rgName -Location $location -VM $vmConfig

4 .PowerShellで作る事の意外なメリット

ディスク名や、ネットワークインタフェース名を自分で命名する事ができるため、運用時に色々と便利というメリットがあります。