Share via


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

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

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

支援 Azure REST API 來管理 Azure VM,可透過 Update Manager 虛擬機擴充功能取得。

更新評估

若要在您的 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 如果計算機應該重新啟動,以及客體OS更新安裝需要它完成,則為旗標為狀態。 可接受的值為: IfRequired, NeverReboot, AlwaysReboot
windowsParameters 執行支援的 Microsoft Windows Server 作業系統之 Azure VM 上的客體 OS 更新參數選項。
windowsParameters - classificationsToInclude 要用於選取要安裝在機器上的更新的類別/分類清單。 可接受的值為: Critical, Security, UpdateRollUp, FeaturePack, ServicePack, Definition, Tools, Updates
windowsParameters - kbNumbersToInclude 應該安裝的 Windows Update KB 識別符清單。 將會安裝屬於清單中所提供 classificationsToInclude 分類的所有更新。 kbNumbersToInclude 是除了分類之外要安裝的特定 KB 的選擇性清單。 例如:1234
windowsParameters - kbNumbersToExclude 不應該安裝的 Windows Update KB 識別符清單。 此參數會 windowsParameters - classificationsToInclude覆寫 ,這表示即使它屬於參數下 classificationsToInclude 提供的分類,這裡指定的 Windows Update KB 識別符也不會安裝。
maxPatchPublishDate 這是用來安裝在此指定發佈日期上限之前或之前發佈的修補程式。
linuxParameters 執行支援的Linux伺服器作業系統之 Azure VM 上客體 OS 更新的參數選項。
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 維護期間預期會遞迴的速率。 速率可以表示為每日、每周或每月排程。 每日排程的格式為遞歸:[頻率為整數]['Day(s)']。 如果未提供任何頻率,則默認頻率為1。 每日排程範例為 recurEvery:Day、recurEvery:3Days。 每周排程的格式為遞歸:[頻率為整數]['Week(s)'] [週一-星期日的選擇性逗號分隔清單]。 每周排程範例為 recurEvery:3Weeks、recurEvery:Week Saturday、Sunday。 每月排程的格式為 [Frequency as integer]['Month(s)'] [以逗號分隔的月份天數列表] 或 [Frequency as integer]['Month(s)] [Month 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、W. 歐洲標準時間、韓國標準時間、Cen。 澳大利亞標準時間。
properties.namespace 取得或設定資源的命名空間
properties.visibility 取得或設定組態的可見性。 預設值為 'Custom'
systemData 包含 createdBy 和 modifiedBy 資訊的 Azure Resource Manager 元數據。
tags 取得或設定資源的標記
type 資源的類型

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

PUT on '/subscriptions/0f55bb56-6089-4c7e-9306-41fb78fc5844/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 與排程的關聯

若要建立 VM 與維護設定排程的關聯,請指定下列 PUT 要求:

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

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

PUT on '/subscriptions/0f55bb56-6089-4c7e-9306-41fb78fc5844/resourceGroups/atscalepatching/providers/Microsoft.Compute/virtualMachines/win-atscalepatching-1/providers/Microsoft.Maintenance/configurationAssignments/TestAzureInGuestAdv?api-version=2021-09-01-preview

{
  "properties": {
    "maintenanceConfigurationId": "/subscriptions/0f55bb56-6089-4c7e-9306-41fb78fc5844/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`

下一步