如何以编程方式管理 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`