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

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

请求正文

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

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`

后续步骤