presents by IT Consulting 109

Azure – PowerShellで仮想マシンの作成

AWSをメインで利用しているエンジニアがAzure環境の構築をPowerShellで進める連載。
リソースグループの作成から仮想マシンを起動するまでを連載していく予定です。

第8回は、いままで作成した各種リソースを使用して、AWSいうところのEC2に類似するサービス「仮想マシン」を作成します。

番外編

  • 第10回 PowerShellでストレージアカウントの作成
  • 第11回 PowerShellで仮想マシン用VHDイメージのアップロード
  • 第12回 PowerShellで仮想マシンをVHDイメージから作成
  • 第13回 PowerShellでディスクの拡張

前提:事前に「リソースグループ ~ ストレージアカウント]」まで作成されていること。

# リソースグループ名を設定
$private:resourceGroupName = "rg001"

# ロケーションを設定
$private:location = "japaneast"

# タグを設定
$tags = @{"環境名"="ITC109"}

# 仮想ネットワーク名を設定
$private:vnwName = $private:resourceGroupName + "vnw"

# 仮想マシン名を設定
$private:vmname = $private:resourceGroupName + "vm01"

サンプルとして サイズをStandard B1s
サーバイメージをWindows Server 2022[SmallDisk]
ディスクタイプをStandard HDDとして作成。
※適時パラメータを変更して構築してください。

###############################################################################################################################
Write-Host "■■【仮想マシンの作成】の作成処理 ■■"
###############################################################################################################################
$private:vmSize = "Standard_B2s"
$private:sku = "2022-Datacenter-smalldisk"
$storageType = 'Standard_LRS' # Premium_LRS / StandardSSD_LRS / Standard_LRS


Write-Host "■■【仮想マシン】の作成処理 ■■"

$script:osDiskName = $script:vmname + "osDisk"

$vm = Get-AzVM -ResourceGroupName $private:resourceGroupName -Name $script:vmname -ErrorAction Ignore

if (-not $script:vm) {
    Write-Host "[ $private:resourceGroupName ] に 仮想マシン ["$script:vmname"] を作成中..."

    # ネットワークインターフェース情報を取得
    $nicId = (Get-AzNetworkInterface -Name $private:nicname -ResourceGroupName $private:resourceGroupName).Id

    # 管理者アカウントの情報設定
    $credential = Get-Credential

    # 仮想マシン名、仮想マシンサイズを設定
    $vmConfig = New-AzVMConfig -Name $private:vmname -VMSize $private:vmSize

    # OSディスクを設定    
    $vmConfig = Set-AzVMOSDisk -VM $vmConfig -Name $script:osDiskName -DiskSizeInGB 30 -StorageAccountType $storageType -CreateOption FromImage

    # コンピューター名、管理者アカウントを設定
    $vmConfig = Set-AzVMOperatingSystem -VM $vmConfig -Credential $credential -ComputerName $private:vmname -Windows 

    # 仮想マシン情報を設定
    $vmConfig | Set-AzVMSourceImage -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus $private:sku -Version latest

    # 仮想マシンを作成
    $vmConfig | Add-AzVMNetworkInterface -Id $nicId | New-AzVm -ResourceGroupName $private:resourceGroupName -Location $private:location -WarningAction Ignore

    Write-Host "[ $private:resourceGroupName ] に 仮想マシン ["$script:vmname"] を作成しました。"
    Write-Host ""

} else {
    Write-Host "[ $private:resourceGroupName ] に 仮想マシン ["$script:vmname"] が存在するため作成をスキップしました。" -ForegroundColor Yellow
    Write-Host ""

}

###############################################################################################################################
Write-Host ""

Get-AzVM で既にに同名のリソースが存在しないか確認。

$vm = Get-AzVM -ResourceGroupName $private:resourceGroupName -Name $script:vmname -ErrorAction Ignore
if (-not $script:vm) {
  ※リソースが存在しない場合は、ここに作成する処理を記述。
} else {
  ※リソースが存在する場合は、ここに作成しない処理を記述。
}

(Get-AzNetworkInterface).Id で仮想マシンにアタッチするネットワークインターフェースIDを取得。

$nicId = (Get-AzNetworkInterface -Name $private:nicname -ResourceGroupName $private:resourceGroupName).Id

Get-Credentialで仮想マシンに設定する「管理者アカウントの情報」を設定。

$credential = Get-Credential

New-AzVMConfigに仮想の環境設定。
-Name オプションで「仮想マシン名」を設定。
-VMSize オプションで「仮想マシンサイズ」を設定。

New-AzVMConfig -Name $private:vmname -VMSize $private:vmSize

Set-AzVMOSDiskで「OSディスク」を設定。
-Name オプションで「OSディスク名」を設定。
-DiskSizeInGB オプションで「ディスクサイズ」を設定。
-StorageAccountType オプションで「ストレージタイプ」を設定。

$vmConfig = Set-AzVMOSDisk -VM $vmConfig -Name $script:osDiskName -DiskSizeInGB 30 -StorageAccountType $storageType -CreateOption FromImage

Set-AzVMOperatingSystemでOS環境設定。
-Credential オプションでGet-Credentialで設定したアカウント情報を設定。
-ComputerName オプションで「コンピュータ名」を設定。
-Windows オプションで「Windows」 を設定。

$vmConfig = Set-AzVMOperatingSystem -VM $vmConfig -Credential $credential -ComputerName $private:vmname -Windows 

Set-AzVMSourceImage で仮想マシンのイメージを設定。
-PublisherName オプションで「パブリッシャイメージ」を設定。
-Offer オプションで「イメージオファー」を設定。
-Skus オプションで「イメージ名」を設定。
-Version オプションで「公開名」を設定。
※「latest」を指定すれば最新のイメージを使用する。

$vmConfig | Set-AzVMSourceImage -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus $private:sku -Version latest

New-AzVm で仮想マシンを作成。
作成時に Add-AzVMNetworkInterface で仮想マシンにネットワークインターフェース追加。

$vmConfig | Add-AzVMNetworkInterface -Id $nicId | New-AzVm -ResourceGroupName $private:resourceGroupName -Location $private:location -WarningAction Ignore

リソース ビジュアライザー

補足

「Windows Server」のパブリッシャイメージの一覧取得。

$Private:location = "japaneast"
Get-AzVMImagePublisher -Location $Private:location | Select PublisherName | Where-Object {$_.PublisherName -like "MicrosoftWindows*"}

PublisherName
-------------
MicrosoftWindowsDesktop
MicrosoftWindowsServer
MicrosoftWindowsServerHPCPack

パブリッシャイメージから「Windows Server」のイメージオファーを確認。

$pubName = "MicrosoftWindowsServer"
Get-AzVMImageOffer -Location $Private:location -PublisherName $pubName | Select Offer | Where-Object {$_.Offer -like "WindowsServer*"}

Offer
-----
WindowsServer
windowsserver-gen2preview
windowsserver-previewtest
windowsserverdotnet
windowsserverhotpatch-previews
WindowsServerSemiAnnual
windowsserverupgrade

パブリッシャイメージとイメージオファーから「Windows Server 2022」のイメージ名を確認。

$pubName = "MicrosoftWindowsServer"
$offerName = "WindowsServer"
Get-AzVMImageSku -Location $Private:location -PublisherName $pubName -Offer $offerName | Select Skus  | Where-Object {$_.Skus -like "2022-*"}

Skus                                        
----                                        
2022-datacenter                             
2022-datacenter-azure-edition               
2022-datacenter-azure-edition-core          
2022-datacenter-azure-edition-core-smalldisk
2022-datacenter-azure-edition-smalldisk     
2022-datacenter-core                        
2022-datacenter-core-g2                     
2022-datacenter-core-smalldisk              
2022-datacenter-core-smalldisk-g2           
2022-datacenter-g2                          
2022-datacenter-smalldisk                   
2022-datacenter-smalldisk-g2 

-PublisherName 'MicrosoftWindowsServer'オプションで「Microsoft Windows Server」を指定。
-Offer 'WindowsServer' オプションで「Windows Server」を指定。
-Skus '2022-datacenter' オプションで「Windows Server 2022 Datacenter」を指定。
-Version latest オプションで「最新」を指定。

上記オプションを使用して Set-AzVMSourceImageで以下を指定してWindows Server 2022 Datacenterの仮想マシンが作成される。

Set-AzVMSourceImage -PublisherName 'MicrosoftWindowsServer' -Offer 'WindowsServer' -Skus '2022-datacenter' -Version latest
この記事を書いた人
名前:TRUE's。 千葉県育ち、神奈川県在住のIT系フリーエンジニア。 IT系のナレッジサイトを不定期で更新中。 フォトグラファー兼エンジニアとして日々勤しんでいる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です