如何以编程方式管理 Azure VM 的更新

本文将指导你完成在 Azure 中通过 Azure 更新管理器使用 Azure REST API 在 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`

请求正文

下表介绍了请求正文的元素:

properties 说明
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 更新 KB ID 的列表。 将安装属于 classificationsToInclude 列表中提供的分类的所有更新。 kbNumbersToInclude 是除分类之外要安装的特定 KB 的可选列表。 例如:1234
windowsParameters - kbNumbersToExclude 不应安装的 Windows 更新 KB ID 的列表。 此参数替代了 windowsParameters - classificationsToInclude,这意味着即使此处指定的 Windows 更新 KB ID 属于 classificationsToInclude 参数下提供的分类,也不会安装该 Windows 更新 KB ID。
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`

请求正文

下表介绍了请求正文的元素:

properties 说明
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: 每周星期六、星期日。 每月计划的格式为 [整数形式的频率]['月数'] [逗号分隔的月份日期列表] 或 [整数形式的频率]['月数'] [一个月中的哪一周 (First, Second, Third, Fourth, Last)] [周一至周六星期名称]。 每月计划示例为 recurEvery: Month、recurEvery: 2Months、recurEvery: Month day23、day24、recurEvery: 每月最后一个星期日、recurEvery: 每月第四个星期一。
properties.maintenanceWindow.startDateTime YYYY-MM-DD hh:mm 格式的维护时段的生效开始日期。 可以将开始日期设置为当前日期或将来日期。 该时段将以提供的时区创建,并根据该时区调整为夏令时。
properties.maintenanceWindow.timeZone 时区的名称。 可以通过在 PowerShell 中执行 [System.TimeZoneInfo]:GetSystemTimeZones() 来获取时区列表。 示例:太平洋标准时间、UTC、西欧标准时间、韩国标准时间、 澳大利亚中部标准时间。
properties.namespace 获取或设置资源的命名空间
properties.visibility 获取或设置配置的可见性。 默认值为“Custom”
systemData 包含 createdBy 和 modifiedBy 信息的 Azure 资源管理器元数据。
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 与计划相关联

若要将 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/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`

后续步骤