チュートリアル: PowerShell を使用して仮想マシン スケール セットを変更する
アプリケーションのライフサイクルを通して、仮想マシン スケール セットを変更したり更新したりすることが必要になる場合があります。 スケール セットの構成を更新したりアプリケーションの構成を変更したりする際の方法が、こうした更新の対象になることもあります。 この記事では、PowerShell を使用して既存のスケール セットを変更する方法について説明します。
スケール セット モデルを更新する
スケール セットには、スケール セット全体の "望ましい" 状態をキャプチャする "スケール セット モデル" があります。 モデルに対してスケール セットのクエリを実行するには、Get-AzVmss を使用できます。
Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
出力の正確な表示は、コマンドに指定したオプションによって異なります。 次の例は、PowerShell のサンプル出力の抜粋です。
Sku :
Name : Standard_DS1_v2
Tier : Standard
Capacity : 2
ProvisioningState : Succeeded
SinglePlacementGroup : False
Id : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet
Name : myScaleSet
Type : Microsoft.Compute/virtualMachineScaleSets
Location : eastus
VirtualMachineProfile :
ComputerNamePrefix : myScaleSe
ProvisionVMAgent : True
EnableAutomaticUpdates : True
PatchMode : AutomaticByOS
AssessmentMode : ImageDefault
EnableVMAgentPlatformUpdates : False
AllowExtensionOperations : True
StorageProfile :
Publisher : MicrosoftWindowsServer
Offer : WindowsServer
Sku : 2016-Datacenter
Version : latest
OsDisk :
Caching : None
CreateOption : FromImage
DiskSizeGB : 127
OsType : Windows
StorageAccountType : Premium_LRS
DeleteOption : Delete
NetworkProfile :
NetworkInterfaceConfigurations[0] :
Name : myScaleSet
Primary : True
DisableTcpStateTracking : False
Name : myScaleSet
Subnet :
Id : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myScaleSet/subnets/myScaleSet
PrivateIPAddressVersion : IPv4
LoadBalancerBackendAddressPools[0] :
/subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Network/loadBalancers/myScaleSet/backendAddressPools/myScaleSet
EnableIPForwarding : False
DeleteOption : Delete
NetworkApiVersion : 2020-11-01
OrchestrationMode : Flexible
TimeCreated : 12/2/2022 5:41:21 PM
Update-AzVmss を使用して、スケール セットのさまざまなプロパティを更新することもできます。 たとえば、ライセンスの種類を更新します。
$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet -LicenseType Windows_Server
スケール セット内の個々の VM インスタンスを更新する
スケール セットにモデル ビューがあるのと同様に、スケール セット内の各 VM インスタンスには独自のモデル ビューがあります。 モデル ビューに対してスケール セット内の特定の VM インスタンスのクエリを実行するには、Get-AzVM を使用できます。
Get-AzVM -ResourceGroupName myResourceGroup -name MyScaleSet_Instance1
ResourceGroupName : myResourceGroup
Id : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myScaleSet_Instance1
Name : myScaleSet_Instance1
Type : Microsoft.Compute/virtualMachines
Location : eastus
Extensions : {MicrosoftMonitoringAgent}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
OSProfile : {ComputerName, AdminUsername, WindowsConfiguration, Secrets, AllowExtensionOperations, RequireGuestProvisionSignal}
ProvisioningState : Succeeded
StorageProfile : {ImageReference, OsDisk, DataDisks}
VirtualMachineScaleSet : {Id}
TimeCreated : 12/2/2022 5:41:23 PM
-Status
フラグを追加してインスタンス ビューを取得することもできます。これにより、VM の詳細が表示されます。
Get-AzVM -ResourceGroupName myResourceGroup -name MyScaleSet_Instance1 -Status
ResourceGroupName : myResourceGroup
Name : MyScaleSet_Instance1
OsName : Windows Server 2016 Datacenter
OsVersion : 10.0.14393.5501
HyperVGeneration : V1
Disks[0] :
Name : myScaleSet_Instance1_disk1_cab60acccff7414b81d60572eeecb9e3
Statuses[0] :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Time : 12/2/2022 5:41:25 PM
Disks[1] :
Name : disk1
Statuses[0] :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Time : 12/2/2022 6:33:36 PM
Extensions[0] :
Name : MicrosoftMonitoringAgent
Type : Microsoft.EnterpriseCloud.Monitoring.MicrosoftMonitoringAgent
TypeHandlerVersion : 1.0.18067.0
Statuses[0] :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Message : Latest configuration has been applied to the Microsoft Monitoring Agent.
VMAgent :
VmAgentVersion : 2.7.41491.1071
ExtensionHandlers[0] :
Type : Microsoft.EnterpriseCloud.Monitoring.MicrosoftMonitoringAgent
TypeHandlerVersion : 1.0.18067.0
Status :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Ready
Message : This virtual machine has successfully connected to Azure Log Analytics.
Statuses[0] :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Ready
Message : GuestAgent is running and processing the extensions.
Time : 12/2/2022 6:34:55 PM
Statuses[0] :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Time : 12/2/2022 6:33:42 PM
Statuses[1] :
Code : PowerState/running
Level : Info
DisplayStatus : VM running
これらのプロパティは、スケール セット全体の構成ではなく、スケール セット内の VM インスタンスの構成を示しています。
スタンドアロン VM と同様に、スケール セット内の個々の VM インスタンスに対して更新を実行できます。 たとえば、新しいデータ ディスクをインスタンス 1 にアタッチします。
$VirtualMachine = Get-AzVM -ResourceGroupName "myResourceGroup" -Name "myScaleSet_Instance1".
Add-AzVMDataDisk -VM $VirtualMachine -Name "disk1" -LUN 0 -Caching ReadOnly -DiskSizeinGB 128 -CreateOption Empty
Update-AzVM -ResourceGroupName "myResourceGroup" -VM $VirtualMachine
スケール セットにインスタンスを追加する
スケール セットに新しい VM を追加するが、スケール セット モデルに表示される構成オプションとは異なる構成オプションが必要な場合があります。 Get-AzVmss コマンドを使用し、インスタンスを追加するスケール セット名を指定することで、作成時に VM をスケール セットに追加できます。
New-AzVM -Name myNewInstance -ResourceGroupName myResourceGroup -image Ubuntu2204 -VmssId /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet
ResourceGroupName : myResourceGroup
Id : /subscriptions/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myNewInstance
Name : myNewInstance
Type : Microsoft.Compute/virtualMachines
Location : eastus
Tags : {}
HardwareProfile : {VmSize}
NetworkProfile : {NetworkInterfaces}
OSProfile : {ComputerName, AdminUsername, LinuxConfiguration, Secrets, AllowExtensionOperations, RequireGuestProvisionSignal}
ProvisioningState : Succeeded
StorageProfile : {ImageReference, OsDisk, DataDisks}
FullyQualifiedDomainName : mynewinstance-21bc01.eastus.cloudapp.azure.com
VirtualMachineScaleSet : {Id}
TimeCreated : 12/2/2022 6:40:20 PM
Get-AzVM をもう一度実行すると、新しいインスタンスが作成され、既存のスケール セットに追加されたことがわかります。
Get-AzVm -ResourceGroupName myResourceGroup
ResourceGroupName Name Location VmSize OsType NIC ProvisioningState
----------------- ---- -------- ------ ------ --- -----------------
myResourceGroup myNewInstance eastus Standard_D2s_v3 Linux myNewInstance Succeeded
myResourceGroup myScaleSet_Instance1 eastus Standard_DS1_v2 Windows myScaleSet-a9f1d54c Succeeded
myResourceGroup myScaleSet_Instance2 eastus Standard_DS1_v2 Windows myScaleSet-4dc708e5 Succeeded
最新のスケール セット モデルで VM を最新の状態にする
注意
現在、フレキシブル オーケストレーション モードを使用する仮想マシン スケール セットでは、アップグレード モードはサポートされていません。
スケール セットには、VM を最新のスケール セット モデルで最新の状態にする方法を決定する "アップグレード ポリシー" があります。 アップグレード ポリシーの 3 つのモードは次のとおりです。
- 自動 - このモードでは、スケール セットは VM の停止順序を保証しません。 スケール セットは、すべての VM を同時に停止できます。
- ローリング - このモードでは、スケール セットは更新をバッチでロールアウトします。必要に応じて、バッチ間の一時停止時間を設定します。
- 手動 - このモードでは、スケール セット モデルの更新時に、手動更新がトリガーされるまで、既存の VM はそのままです。
スケール セットが手動アップグレードに設定されている場合は、Update-AzVmss を使用して手動アップグレードをトリガーできます。
$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet
Note
Service Fabric クラスターは "自動" モードのみを使用できますが、更新は別途処理されます。 詳しくは、「Service Fabric アプリケーションのアップグレード」をご覧ください。
スケール セットを再イメージ化する
Virtual Machine Scale Sets では、スケール セット内の各 VM に対して一意の名前が生成されます。 名前付け規則は、オーケストレーション モードによって異なります。
- フレキシブル オーケストレーション モード:
{scale-set-name}_{8-char-guid}
- 均一オーケストレーション モード:
{scale-set-name}_{instance-id}
特定のインスタンスを再イメージ化する必要がある場合は、Set-AzVmss を使用し、インスタンス名を指定します。
Set-AzVmssVM -ResourceGroupName myResourceGroup -VMScaleSetName myScaleSet -InstanceId myScaleSet_Instance1 -Reimage
スケール セット内のすべてのインスタンスを再イメージ化するには、単にスケール セット名を指定し、インスタンス ID は省略します。
Set-AzVmssVM -Reimage -ResourceGroupName myResourceGroup -VMScaleSetName myScaleSet
スケール セットの OS イメージの更新
古いバージョンの Ubuntu LTS 18.04 を実行するスケール セットがある場合があります。 新しいバージョンの Ubuntu LTS 16.04 (バージョン 18.04.202210180 など) に更新する必要があります。 イメージ参照バージョン プロパティは一覧に含まれないため、Update-AzVmss を使用してこれらのプロパティを直接変更できます。
$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet -ImageReferenceVersion virtualMachineProfile.storageProfile.imageReference.version=18.04.202210180
または、スケール セットで使用されるイメージを変更したい場合があります。 たとえば、スケール セットで使用されるカスタム イメージを更新または変更したいような場合です。 イメージ参照 ID プロパティを更新することにより、スケール セットで使用されるイメージを変更できます。 イメージ参照 ID プロパティは一覧に含まれないため、Update-AzVmss を使用してこのプロパティを直接変更できます。
$myVmss = Get-AzVmss -ResourceGroupName myResourceGroup -Name myScaleSet
Update-AzVmss -ResourceGroupName myResourceGroup -VirtualMachineScaleSet $myVMss -VMScaleSetName myScaleSet -ImageReferenceVersion virtualMachineProfile.storageProfile.imageReference.id=/subscriptions/{subscriptionID}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/images/myNewImage
Azure プラットフォーム イメージを使用している場合は、imageReference を変更してイメージを更新することができます (詳しくは、REST API のドキュメントをご覧ください)。
Note
プラットフォーム イメージでは、イメージ参照バージョンに "最新" を指定することが一般的です。 作成、スケール アウト、再イメージ化を行うと、VM が使用可能な最新バージョンで作成されます。 ただし、新しいイメージ バージョンがリリースされたときに OS イメージが自動的に更新されることは意味しません。 別の機能によって、OS の自動更新が提供されます。 詳しくは、OS アップグレードのドキュメントをご覧ください。
カスタム イメージを使用している場合は、imageReference ID を更新してイメージを更新することができます (詳しくは、REST API のドキュメントをご覧ください)。
次の手順
このチュートリアルでは、PowerShell を使用してスケール セットと個々のインスタンスのさまざまな側面を変更する方法について学習しました。
- スケール セット モデルを更新する
- スケール セット内の個々の VM インスタンスを更新する
- スケール セットにインスタンスを追加する
- 最新のスケール セット モデルで VM を最新の状態にする
- スケール セットを再イメージ化する
- スケール セットの OS イメージの更新