如何以程式設計方式管理適用 Azure VM 的更新

本文將逐步引導您使用 Azure REST API 在 Azure 虛擬機器上觸發評量和更新部署,並搭配 Azure 中的 Azure 更新管理員。 如果您不熟悉更新管理員,且想要深入了解,請參閱 Azure 更新管理員概觀。 若要使用 Azure REST API 來管理已啟用 Arc 的伺服器,請參閱如何以程式設計方式使用已啟用 Arc 的伺服器。

Azure 中的 Azure 更新管理員可讓您使用 Azure REST API 以程式設計方式加以存取。 此外,您可以從 Azure PowerShell 和 Azure CLI 使用適當的 REST 命令。

支援 Azure REST API 來管理 Azure VM,可透過更新管理員虛擬機器延伸模組來取得。

更新評估

若要在您的 Azure VM 上觸發更新評估,請指定下列 POST 要求:

POST on `subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.Compute/virtualMachines/virtualMachineName/assessPatches?api-version=2020-12-01`

若要指定 POST 要求,您可以使用 Azure CLI az vm assess-patchs 命令。

az vm assess-patches -g MyResourceGroup -n MyVm

更新部署

若要在您的 Azure VM 上觸發更新部署,請指定下列 POST 要求:

POST on `subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.Compute/virtualMachines/virtualMachineName/installPatches?api-version=2020-12-01`

要求本文

下表說明要求本文的元素:

屬性 說明
maximumDuration 作業執行的時間上限。 這必須是符合 ISO 8601 規範的持續時間字串,像是 PT4H (4 小時)。
rebootSetting 請加入旗標指出是否需將電腦重新開機,以及客體作業系統更新安裝是否需要它才能完成。 可接受的值為:IfRequired, NeverReboot, AlwaysReboot。
windowsParameters 客體作業系統的更新參數選項,適用於執行可支援的 Microsoft Windows Server 作業系統的 Azure VM。
windowsParameters - classificationsToInclude 用以選取要在機器上安裝的更新類別/分類清單。 可接受的值為:Critical, Security, UpdateRollup, FeaturePack, ServicePack, Definition, Tools, Updates
windowsParameters - kbNumbersToInclude 應安裝的 Windows Update KB ID 清單。 將會安裝屬於 classificationsToInclude 清單中所提供分類的所有更新。 kbNumbersToInclude 是除了這些分類之外也要一起安裝的特定 KB 選擇性清單。 例如:1234
windowsParameters - kbNumbersToExclude 不應安裝的 Windows Update KB ID 清單。 此參數會覆寫 windowsParameters - classificationsToInclude,代表此處指定的某個 Windows Update KB 識別碼即使屬於 classificationsToInclude 參數底下提供的分類,亦不會安裝。
maxPatchPublishDate 此元素用來安裝在此發佈日期期限當天或之前發佈的修補程式。
linuxParameters 客體作業系統的更新參數選項,適用於執行可支援的 Linux 伺服器作業系統的 Azure VM。
linuxParameters - classificationsToInclude 用以選取要在機器上安裝的更新類別/分類清單。 可接受的值為:Critical, Security, Other
linuxParameters - packageNameMasksToInclude 應該安裝 Linux 套件的清單。 將會安裝屬於 classificationsToInclude 清單中所提供分類的所有更新。 packageNameMasksToInclude 是除了這些分類之外也要一起安裝的套件名稱清單。 例如:mysql, libc=1.0.1.1, kernel*
linuxParameters - packageNameMasksToExclude 不應安裝的更新清單。 此參數會覆寫 linuxParameters - packageNameMasksToExclude,代表此處指定的某個套件識別碼即使屬於 classificationsToInclude 參數底下提供的分類,亦不會安裝。

若要指定 POST 要求,可使用下列 Azure REST API 呼叫搭配有效的參數和值。

POST on 'subscriptions/{subscriptionId}/resourceGroups/acmedemo/providers/Microsoft.Compute/virtualMachines/ameacr/installPatches?api-version=2020-12-01

{
    "maximumDuration": "PT120M",
    "rebootSetting": "IfRequired",
    "windowsParameters": {
      "classificationsToInclude": [
        "Security",
        "UpdateRollup",
        "FeaturePack",
        "ServicePack"
      ],
      "kbNumbersToInclude": [
        "11111111111",
        "22222222222222"
      ],
      "kbNumbersToExclude": [
        "333333333333",
        "55555555555"
      ]
    }
  }'

建立維護設定排程

若要建立維護設定排程,請指定下列 PUT 要求:

PUT on `/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Maintenance/maintenanceConfigurations/<maintenanceConfigurationsName>?api-version=2021-09-01-preview`

要求本文

下表說明要求本文的元素:

屬性 說明
id 資源的完整識別碼
location 取得或設定資源的位置
name 資源名稱
properties.extensionProperties 取得或設定 maintenanceConfiguration 的 extensionProperties
properties.maintenanceScope 取得或設定組態的 maintenanceScope
properties.maintenanceWindow.duration HH:MM 格式中維護視窗的持續期間。 如果未提供,則會根據提供的維護範圍來使用預設值。 範例:05:00。
properties.maintenanceWindow.expirationDateTime YYYY-MM-DD hh:mm 格式維護視窗的有效到期日。 視窗將在提供的時區中,根據該時區建立為日光節約時間。 到期日必須設定為未來的日期。 如果未提供,則會將其設定為日期時間上限 9999-12-31 23:59:59。
properties.maintenanceWindow.recurEvery 維護視窗預期會重複的速率。 速度可以以每日、每週或每月排程表示。 每日排程的格式為 recurEvery: [整數頻率]['天']。 如果未提供任何頻率,則預設頻率為 1。 每日排程範例為 recurEvery: Day, recurEvery: 3Days。 每週排程的格式為 recurEvery: [整數頻率]['週'] [星期一至星期日工作日的選擇性逗號分隔清單]。 每週排程範例為 recurEvery: 3Weeks、recurEvery: Week Saturday, Sunday。 每月排程的格式為 [Frequency as integer]['Month(s)'] [以逗號分隔的月份天數清單] 或 [Frequency as integer]['Month(s)'] [Week of Month (First, Second, Third, Fourth, Last)] [Weekday Monday-Sunday]。 每月排程範例為 recurEvery: Month, recurEvery: 2Months, recurEvery: Month day23, day24, recurEvery: Month Last Sunday, recurEvery: Month Fourth Monday。
properties.maintenanceWindow.startDateTime YYYY-MM-DD hh:mm 格式維護期間的有效開始日期。 您可以將開始日期設定為目前日期或未來的日期。 視窗將建立在提供的時區中,並根據該時區調整為日光節約時間。
properties.maintenanceWindow.timeZone 時區的名稱。 您可以在 PowerShell 中執行 [System.TimeZoneInfo]:GetSystemTimeZones() 來取得時區的清單。 範例:太平洋標準時間、UTC、西歐標準時間、韓國標準時間、Cen。 澳大利亞標準時間。
properties.namespace 取得或設定資源的命名空間
properties.visibility 取得或設定組態的可見度。 預設值為 'Custom'
systemData 包含 createdBy 和 modifiedBy 資訊的 Azure Resource Manager 中繼資料。
tags 取得或設定資源的標記
type 資源的類型

若要指定 POST 要求,可使用下列 Azure REST API 呼叫搭配有效的參數和值。

PUT on '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/atscalepatching/providers/Microsoft.Maintenance/maintenanceConfigurations/TestAzureInGuestAdv2?api-version=2021-09-01-preview

{
  "location": "eastus2euap",
  "properties": {
    "namespace": null,
    "extensionProperties": {
      "InGuestPatchMode" : "User"
    },
    "maintenanceScope": "InGuestPatch",
    "maintenanceWindow": {
      "startDateTime": "2021-08-21 01:18",
      "expirationDateTime": "2221-05-19 03:30",
      "duration": "01:30",
      "timeZone": "India Standard Time",
      "recurEvery": "Day"
    },
    "visibility": "Custom",
    "installPatches": {
      "rebootSetting": "IfRequired",
      "windowsParameters": {
        "classificationsToInclude": [
          "Security",
          "Critical",
          "UpdateRollup"
        ]
      },
      "linuxParameters": {
        "classificationsToInclude": [
          "Other"
        ]
      }
    }
  }
}'

建立 VM 與排程的關聯

若要將虛擬機器與維護設定排程建立關聯,請指定下列 PUT 要求:

PUT on `<ARC or Azure VM resourceId>/providers/Microsoft.Maintenance/configurationAssignments/<configurationAssignment name>?api-version=2021-09-01-preview`

若要指定 POST 要求,可使用下列 Azure REST API 呼叫搭配有效的參數和值。

PUT on '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/atscalepatching/providers/Microsoft.Compute/virtualMachines/win-atscalepatching-1/providers/Microsoft.Maintenance/configurationAssignments/TestAzureInGuestAdv?api-version=2021-09-01-preview

{
  "properties": {
    "maintenanceConfigurationId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/atscalepatching/providers/Microsoft.Maintenance/maintenanceConfigurations/TestAzureInGuestIntermediate2"
  },
  "location": "eastus2euap"
}'

從排程中移除電腦

若要從排程中移除電腦,請取得建立電腦的所有組態指派名稱,以將電腦與 Azure Resource Graph 中目前的排程建立關聯,如下所示:

maintenanceresources
| where type =~ "microsoft.maintenance/configurationassignments"
| where properties.maintenanceConfigurationId =~ "<maintenance configuration Resource ID>"
| where properties.resourceId =~ "<Machine Resource Id>"
| project name, id

從上述取得名稱之後,請遵循 DELETE 要求來刪除組態指派 -

DELETE on `<ARC or Azure VM resourceId>/providers/Microsoft.Maintenance/configurationAssignments/<configurationAssignment name>?api-version=2021-09-01-preview`

下一步