AWSをメインで利用しているエンジニアがAzure環境の構築をPowerShellで進める連載。
リソースグループの作成から仮想マシンを起動するまでを連載していく予定です。
第8回は、いままで作成した各種リソースを使用して、AWSいうところのEC2に類似するサービス「仮想マシン」を作成します。
番外編
前提:事前に「リソースグループ ~ ストレージアカウント]」まで作成されていること。
# リソースグループ名を設定
$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