分享方式:


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

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

Azure 中的 Azure 更新管理員可讓您使用 Azure REST API 以程式設計方式加以存取。 此外,您可以從 Azure PowerShellAzure 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 的識別碼清單。 將會安裝屬於 classificationsToInclude 清單中所提供分類的所有更新。 kbNumbersToInclude 是除了這些分類之外也要一起安裝的特定 KB 選擇性清單。 例如:1234
windowsParameters - kbNumbersToExclude 不應安裝的 Windows Update KB 識別碼清單。 此參數會覆寫 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/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 與排程的關聯

若要將虛擬機器與維護設定排程建立關聯,請指定下列 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/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`

下一步