メンテナンス構成と Azure PowerShell による更新をコントロールする

適用対象: ✔️ Linux VM ✔️ Windows VM ✔️ フレキシブル スケール セット ✔️ 均一スケール セット

メンテナンス構成機能を使って、さまざまな Azure リソースにプラットフォームの更新プログラムを適用するタイミングを制御できます。 この記事では、専用ホストと分離仮想マシン (VM) に関する Azure PowerShell のオプションについて説明します。 メンテナンス構成機能を使う利点、その制限、他の管理オプションについて詳しくは、メンテナンス構成を使用したプラットフォーム更新プログラムの管理に関する記事をご覧ください。

スケール セットに対するメンテナンス構成の使用に関する情報をお探しの場合は、「Azure 仮想マシン スケール セットのメンテナンス コントロール」をご覧ください。

重要

特定の "スコープ" は、特定のマシンの種類とスケジュールをサポートします。 お使いの VM に適したスコープを選んでください。

Azure PowerShell モジュールを有効にする

PowerShellGet が最新であることを確認します。

Install-Module -Name PowerShellGet -Repository PSGallery -Force

Az.Maintenance Azure PowerShell モジュールをインストールします。

Install-Module -Name Az.Maintenance

最新バージョンの Az.Maintenance (バージョン 1.2.0) を実行していることを確認します。

Get-Module -ListAvailable -Name Az.Maintenance

適切なバージョンの Az.Maintenance を実行していることを確認します。

Import-Module -Name Az.Maintenance -RequiredVersion 1.2.0

ローカル環境にインストールする場合は、管理者として Azure PowerShell プロンプトを開いてください。

信頼されていないリポジトリからインストールすることを確認するように求められる場合があります。 モジュールをインストールするには、「Y」と入力するか、[すべてはい] を選びます。

メンテナンス構成を作成する

メンテナンス構成を作成する最初のステップは、構成のコンテナーとしてリソース グループを作成することです。 この例では、myMaintenanceRG という名前のリソース グループを eastus に作成します。 使用するリソース グループが既にある場合は、この部分をスキップし、残りの例のリソース グループ名を自分の所有者に置き換えることができます。

New-AzResourceGroup `
   -Location eastus `
   -Name myMaintenanceRG

Azure でリソースに更新プログラムを反復的に適用するスケジュールされた期間を宣言できます。 スケジュールされた期間を作成した後は、手動で更新プログラムを適用する必要はなくなります。

メンテナンスの繰り返しは、日、週、または月の単位で表すことができます。 次に例をいくつか示します。

  • 日単位: RecurEvery の値が "Day""3Days" など。
  • 週単位: RecurEvery の値が "3Weeks""Week Saturday,Sunday" など。
  • 月単位: RecurEvery の値が "Month day23,day24""Month Last Sunday""Month Fourth Monday" など。

Host

この例で作成する myConfig という名前のメンテナンス構成は、スコープが Host で、スケジュールされた期間は毎月第 4 月曜日の 5 時間です。 このスコープに対するスケジュールの duration の値は、2 時間以上にする必要があります。 まず、New-AzMaintenanceConfiguration のパラメータを定義します。

$RGName = "myMaintenanceRG"
$configName = "myConfig"
$scope = "Host"
$location = "eastus"
$timeZone = "Pacific Standard Time" 
$duration = "05:00"
$startDateTime = "2022-11-01 00:00"
$recurEvery = "Month Fourth Monday"

パラメータを定義したら、New-AzMaintenanceConfiguration コマンドレットを使って構成を作成できます。

New-AzMaintenanceConfiguration
   -ResourceGroup $RGName `
   -Name $configName `
   -MaintenanceScope $scope `
   -Location $location `
   -StartDateTime $startDateTime `
   -TimeZone $timeZone `
   -Duration $duration `
   -RecurEvery $recurEvery

$scope = "Host" を使って、そのメンテナンス構成が、ホスト マシンでの更新を制御するために使われていることを確認します。 対象にしているマシンの特定のスコープ用の構成を作成してください。 スコープに関する詳細を参照してください

OS イメージ

この例で作成する myConfig という名前のメンテナンス構成は、スコープが osimage で、スケジュールされた期間は 5 日ごとに 8 時間です。 このスコープに対するスケジュールの duration の値は、5 時間以上にする必要があります。 このスコープでは、スケジュールの繰り返しを最大 7 日にできます。

$RGName = "myMaintenanceRG"
$configName = "myConfig"
$scope = "osimage"
$location = "eastus"
$timeZone = "Pacific Standard Time" 
$duration = "08:00"
$startDateTime = "2022-11-01 00:00"
$recurEvery = "5days"

パラメータを定義したら、New-AzMaintenanceConfiguration コマンドレットを使って構成を作成できます。

New-AzMaintenanceConfiguration
   -ResourceGroup $RGName `
   -Name $configName `
   -MaintenanceScope $scope `
   -Location $location `
   -StartDateTime $startDateTime `
   -TimeZone $timeZone `
   -Duration $duration `
   -RecurEvery $recurEvery

ゲスト

メンテナンス構成機能に追加された最新の機能は、InGuestPatch スコープです。 この例では、Azure PowerShell を使ってゲスト スコープのメンテナンス構成を作成する方法を示します。 このスコープについて詳しくは、「ゲスト」をご覧ください。

$RGName = "myMaintenanceRG"
$configName = "myConfig"
$scope = "InGuestPatch"
$location = "eastus"
$timeZone = "Pacific Standard Time" 
$duration = "04:00"
$startDateTime = "2022-11-01 00:00"
$recurEvery = "Week Saturday, Sunday"
$WindowsParameterClassificationToInclude = "FeaturePack","ServicePack";
$WindowParameterKbNumberToInclude = "KB123456","KB123466";
$WindowParameterKbNumberToExclude = "KB123456","KB123466";
$RebootOption = "IfRequired";
$LinuxParameterClassificationToInclude = "Other";
$LinuxParameterPackageNameMaskToInclude = "apt","httpd";
$LinuxParameterPackageNameMaskToExclude = "ppt","userpk";

パラメータを定義したら、New-AzMaintenanceConfiguration コマンドレットを使って構成を作成できます。

New-AzMaintenanceConfiguration
   -ResourceGroup $RGName `
   -Name $configName `
   -MaintenanceScope $scope `
   -Location $location `
   -StartDateTime $startDateTime `
   -TimeZone $timeZone `
   -Duration $duration `
   -RecurEvery $recurEvery `
   -WindowParameterClassificationToInclude $WindowsParameterClassificationToInclude `
   -WindowParameterKbNumberToInclude $WindowParameterKbNumberToInclude `
   -WindowParameterKbNumberToExclude $WindowParameterKbNumberToExclude `
   -InstallPatchRebootSetting $RebootOption `
   -LinuxParameterPackageNameMaskToInclude $LinuxParameterPackageNameMaskToInclude `
   -LinuxParameterClassificationToInclude $LinuxParameterClassificationToInclude `
   -LinuxParameterPackageNameMaskToExclude $LinuxParameterPackageNameMaskToExclude `
   -ExtensionProperty @{"InGuestPatchMode"="User"}

同じ名前の構成を別の場所に作成しようとすると、エラーが発生します。 構成名は、リソース グループに対して一意である必要があります。

Get-AzMaintenanceConfiguration を使って、メンテナンス構成が正常に作成されたかどうかを確認できます。

Get-AzMaintenanceConfiguration | Format-Table -Property Name,Id

構成を割り当てる

構成を作成した後、Azure PowerShell を使ってそれにマシンを割り当てることもできます。 New-AzConfigurationAssignment コマンドレットを使用できます。

分離された VM

構成の ID を使って、構成を VM に割り当てます。 -ResourceType VirtualMachines を指定します。 -ResourceName には VM の名前を指定し、-ResourceGroupName には VM のリソース グループを指定します。

New-AzConfigurationAssignment `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myVM" `
   -ResourceType "VirtualMachines" `
   -ProviderName "Microsoft.Compute" `
   -ConfigurationAssignmentName "configName" `
   -MaintenanceConfigurationId "configID"

専用ホスト

専用ホストに構成を適用するには、-ResourceType hosts、ホスト グループの名前を指定した -ResourceParentName-ResourceParentType hostGroups を含める必要があります。

New-AzConfigurationAssignment `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myHost" `
   -ResourceType "hosts" `
   -ResourceParentName myHostGroup `
   -ResourceParentType hostGroups `
   -ProviderName "Microsoft.Compute" `
   -ConfigurationAssignmentName "configName" `
   -MaintenanceConfigurationId "configID"

仮想マシン スケール セット

New-AzConfigurationAssignment `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myVMSS" `
   -ResourceType "VirtualMachineScaleSets" `
   -ProviderName "Microsoft.Compute" `
   -ConfigurationAssignmentName "configName" `
   -MaintenanceConfigurationId "configID"

ゲスト

New-AzConfigurationAssignment `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myGuest" `
   -ResourceType "VirtualMachines" `
   -ProviderName "Microsoft.Compute" `
   -ConfigurationAssignmentName "configName" `
   -MaintenanceConfigurationId "configID"

保留中の更新プログラムを確認する

保留中の更新プログラムを調べるには、Get-AzMaintenanceUpdate を使います。 ログインしているものとは異なる VM の Azure サブスクリプションを指定するには、-subscription を使います。

表示する更新プログラムがない場合、このコマンドは何も返しません。 それ以外の場合は、PSApplyUpdate オブジェクトを返します。

{
   "maintenanceScope": "Host",
   "impactType": "Freeze",
   "status": "Pending",
   "impactDurationInSec": 9,
   "notBefore": "2020-02-21T16:47:44.8728029Z",
   "properties": {
      "resourceId": "/subscriptions/39c6cced-4d6c-4dd5-af86-57499cd3f846/resourcegroups/Ignite2019/providers/Microsoft.Compute/virtualMachines/MCDemo3"
} 

分離された VM

分離された VM の保留中の更新プログラムを確認します。 この例では、読みやすいように出力を表形式で示しています。

Get-AzMaintenanceUpdate `
  -ResourceGroupName "myResourceGroup" `
  -ResourceName "myVM" `
  -ResourceType "VirtualMachines" `
  -ProviderName "Microsoft.Compute" | Format-Table

専用ホスト

専用ホストの保留中の更新プログラムを確認します。 この例では、読みやすいように出力を表形式で示しています。

Get-AzMaintenanceUpdate `
   -ResourceGroupName "myResourceGroup" `
   -ResourceName "myHost" `
   -ResourceType "hosts" `
   -ResourceParentName "myHostGroup" `
   -ResourceParentType "hostGroups" `
   -ProviderName "Microsoft.Compute" | Format-Table

仮想マシン スケール セット

Get-AzMaintenanceUpdate `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myVMSS" `
   -ResourceType "VirtualMachineScaleSets" `
   -ProviderName "Microsoft.Compute" | Format-Table

更新プログラムの適用

New-AzApplyUpdate を使用して、保留中の更新プログラムを適用します。 更新の呼び出しの適用は、完了するまでに最大で 2 時間かかる場合があります。

このコマンドレットは、ホストと OS イメージのスコープに対してのみ機能します。 ゲスト スコープでは機能しません。

分離された VM

分離された VM に更新プログラムを適用する要求を作成します。

New-AzApplyUpdate `
  -ResourceGroupName "myResourceGroup" `
  -ResourceName "myVM" `
  -ResourceType "VirtualMachines" `
  -ProviderName "Microsoft.Compute"

成功した場合、このコマンドは PSApplyUpdate オブジェクトを返します。 この記事で後ほど説明するように、Get-AzApplyUpdate コマンドの Name 属性を使って、更新プログラムの状態を確認できます。

専用ホスト

専用ホストに更新プログラムを適用します。

New-AzApplyUpdate `
   -ResourceGroupName "myResourceGroup" `
   -ResourceName "myHost" `
   -ResourceType "hosts" `
   -ResourceParentName "myHostGroup" `
   -ResourceParentType "hostGroups" `
   -ProviderName Microsoft.Compute

仮想マシン スケール セット

New-AzApplyUpdate `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myVMSS" `
   -ResourceType "VirtualMachineScaleSets" `
   -ProviderName "Microsoft.Compute"

更新プログラムの状態の確認

更新プログラムの状態を調べるには、Get-AzApplyUpdate を使います。 次のコマンドでは、-ApplyUpdateName パラメータに default を使って、最新の更新プログラムの状態を表示しています。 更新プログラムの名前を置き換えて (New-AzApplyUpdate コマンドによって返されます)、特定の更新プログラムの状態を取得できます。

このコマンドレットは、ホストと OS イメージのスコープに対してのみ機能します。 ゲスト スコープでは機能しません。

Status         : Completed
ResourceId     : /subscriptions/12ae7457-4a34-465c-94c1-17c058c2bd25/resourcegroups/TestShantS/providers/Microsoft.Comp
ute/virtualMachines/DXT-test-04-iso
LastUpdateTime : 1/1/2020 12:00:00 AM
Id             : /subscriptions/12ae7457-4a34-465c-94c1-17c058c2bd25/resourcegroups/TestShantS/providers/Microsoft.Comp
ute/virtualMachines/DXT-test-04-iso/providers/Microsoft.Maintenance/applyUpdates/default
Name           : default
Type           : Microsoft.Maintenance/applyUpdates

LastUpdateTime は、自分で更新プログラムを開始した場合でも、セルフ メンテナンス期間を使わなかったためにプラットフォームが開始した場合でも、更新が完了した日時です。 更新プログラムがメンテナンス構成によって適用されなかった場合、LastUpdateTime は既定値を示します。

分離された VM

特定の仮想マシンの更新プログラムを確認します。

Get-AzApplyUpdate `
  -ResourceGroupName "myResourceGroup" `
  -ResourceName "myVM" `
  -ResourceType "VirtualMachines" `
  -ProviderName "Microsoft.Compute" `
  -ApplyUpdateName "applyUpdateName"

専用ホスト

専用ホストの更新プログラムを確認します。

Get-AzApplyUpdate `
   -ResourceGroupName "myResourceGroup" `
   -ResourceName "myHost" `
   -ResourceType "hosts" `
   -ResourceParentName "myHostGroup" `
   -ResourceParentType "hostGroups" `
   -ProviderName "Microsoft.Compute" `
   -ApplyUpdateName "applyUpdateName"

仮想マシン スケール セット

New-AzApplyUpdate `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myVMSS" `
   -ResourceType "VirtualMachineScaleSets" `
   -ProviderName "Microsoft.Compute" `
   -ApplyUpdateName "applyUpdateName"

メンテナンス構成を削除する

メンテナンス構成を削除するには、Remove-AzMaintenanceConfiguration を使います。

Remove-AzMaintenanceConfiguration `
   -ResourceGroupName "myResourceGroup" `
   -Name "configName"

次のステップ

詳しくは、「Azure での仮想マシンのメンテナンス」をご覧ください。