Compartilhar via


Como gerenciar atualizações programaticamente para VMs do Azure

Este artigo orienta você sobre o processo de uso da API REST do Azure para disparar uma avaliação e uma implantação de atualização em suas máquinas virtuais do Azure com o Gerenciador de Atualizações do Azure no Azure. Caso seja novo no Gerenciador de Atualizações e queira saber mais, confira a visão geral do Gerenciador de Atualizações do Azure. Para usar a API REST do Azure para gerenciar servidores habilitados para Arc, confira Como trabalhar programaticamente com servidores habilitados para Arc.

O Gerenciador de Atualizações do Azure no Azure permite usar a API REST do Azure para acesso de maneira programática. Além disso, você pode usar os comandos REST adequados do Azure PowerShell e da CLI do Azure.

O suporte da API REST do Azure para gerenciar VMs do Azure está disponível por meio da extensão da máquina virtual do Gerenciador de Atualizações.

Avaliação de atualização

Para disparar uma avaliação de atualização na VM do Azure, especifique a seguinte solicitação POST:

POST on `subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.Compute/virtualMachines/virtualMachineName/assessPatches?api-version=2020-12-01`

Para especificar a solicitação de POST, use o comando aaz vm assess-patches da CLI do Azure.

az vm assess-patches -g MyResourceGroup -n MyVm

Implantação de atualizações

Para disparar uma implantação de atualização na VM do Azure, especifique a seguinte solicitação POST:

POST on `subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.Compute/virtualMachines/virtualMachineName/installPatches?api-version=2020-12-01`

Corpo da solicitação

A tabela a seguir descreve os elementos do corpo da solicitação:

Propriedade Descrição
maximumDuration Quantidade máxima de tempo em que a operação é executada. Ela precisa ser uma cadeia de caracteres de duração em conformidade com a ISO 8601, como PT4H (4 horas).
rebootSetting Sinalizador para o estado se o computador deve ser reinicializado e se a instalação de atualização do sistema operacional convidado precisar dela para conclusão. Os valores aceitáveis são: IfRequired, NeverReboot, AlwaysReboot.
windowsParameters Opções de parâmetro para atualização do SO convidado em VMs do Azure executando um sistema operacional do Microsoft Windows Server com suporte.
windowsParameters - classificationsToInclude Lista de categorias/classificações a serem usadas para selecionar as atualizações a serem instaladas no computador. Os valores aceitáveis são: Critical, Security, UpdateRollup, FeaturePack, ServicePack, Definition, Tools, Updates
windowsParameters - kbNumbersToInclude Lista de Ids de KB do Windows Update que devem ser instaladas. Todas as atualizações pertencentes às classificações fornecidas na lista classificationsToInclude serão instaladas. kbNumbersToInclude é uma lista opcional de KBs específicas a serem instaladas além das classificações. Por exemplo: 1234
windowsParameters - kbNumbersToExclude Lista de Ids de KB do Windows Update que não devem ser instaladas. Esse parâmetro substitui windowsParameters - classificationsToInclude, o que significa que uma ID de KB do Windows Update especificada aqui não será instalada mesmo se pertencer à classificação fornecida no parâmetro classificationsToInclude.
maxPatchPublishDate Isso é usado para instalar patches que foram publicados em ou antes dessa data máxima publicada.
linuxParameters Opções de parâmetro para atualização do SO convidado em VMs do Azure executando um sistema operacional do servidor Linux com suporte.
linuxParameters - classificationsToInclude Lista de categorias/classificações a serem usadas para selecionar as atualizações a serem instaladas no computador. Os valores aceitáveis são: Critical, Security, Other
linuxParameters - packageNameMasksToInclude Lista de pacotes Linux que devem ser instalados. Todas as atualizações pertencentes às classificações fornecidas na lista classificationsToInclude serão instaladas. packageNameMasksToInclude é uma lista opcional de nomes de pacote a serem instalados além das classificações. Por exemplo: mysql, libc=1.0.1.1, kernel*
linuxParameters - packageNameMasksToExclude Lista de atualizações que não devem ser instaladas. Esse parâmetro substitui linuxParameters - packageNameMasksToExclude, o que significa que um pacote especificado aqui não será instalado mesmo se pertencer à classificação fornecida no parâmetro classificationsToInclude.

Para especificar a solicitação POST, você pode usar a chamada à API REST do Azure a seguir com parâmetros e valores válidos.

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"
      ]
    }
  }'

Criar um agendamento de configuração de manutenção

Para criar um agendamento de configuração de manutenção, especifique a seguinte solicitação PUT:

PUT on `/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Maintenance/maintenanceConfigurations/<maintenanceConfigurationsName>?api-version=2021-09-01-preview`

Corpo da solicitação

A tabela a seguir descreve os elementos do corpo da solicitação:

Propriedade Descrição
id Identificador totalmente qualificado do recurso
location Obter ou definir local do recurso
name Nome do recurso
properties.extensionProperties Obter ou definir a extensionProperties da maintenanceConfiguration
properties.maintenanceScope Obter ou definir maintenanceScope da configuração
properties.maintenanceWindow.duration Duração da janela de manutenção no formato HH:MM. Se não for fornecido, o valor padrão será usado com base no escopo de manutenção fornecido. Exemplo: 05:00.
properties.maintenanceWindow.expirationDateTime Data de validade efetiva da janela de manutenção no formato DD-MM-AAAA HH:MM. A janela é criada no fuso horário fornecido ao horário de verão de acordo com esse fuso horário. A data de validade precisa ser definida para uma data futura. Se não for fornecida, ela será definida como o datetime máximo 31/12/9999 23h59m59s59.
properties.maintenanceWindow.recurEvery Taxa na qual é esperada que uma janela de manutenção se repita. A taxa pode ser expressa como agendamento diário, semanal ou mensal. Os agendamentos diários são formatados como recurEvery: [Frequência como inteiro]['Dias']. Se nenhuma frequência for fornecida, a frequência padrão será 1. Exemplos de agendamento diário são recurEvery: Day, recurEvery: 3Days. Os agendamentos semanais são formatados como recurEvery: [Frequência como inteiro]['Semanas'] [Lista opcional separada por vírgulas dos dias da semana de segunda a domingo]. Exemplos de agendamento semanal são recurEvery: 3semanas, recurEvery: semana sábado, domingo. Os agendamentos mensais são formatados como [Frequência como inteiro]['Meses'] [Lista separada por vírgulas de dias do mês] ou [Frequência como inteiro]['Meses'] [Semana do mês (Primeiro, Segunda, Terceira, Quarta, Última)] [Dia da Semana de segunda a domingo]. Exemplos de agendamento mensal são recurEvery: mês, recurEvery: 2 meses, recurEvery: dia do mês 23, dia 24, recurEvery: último domingo do mês, recurEvery: quarta segunda-feira do mês.
properties.maintenanceWindow.startDateTime Data de início efetiva da janela de manutenção no formato DD-MM-AAAA HH:MM. Você poderá definir a data de início como a data atual ou a data futura. A janela será criada no fuso horário fornecido e ajustada ao horário de verão de acordo com esse fuso horário.
properties.maintenanceWindow.timeZone Nome do fuso horário. A lista de fusos horários pode ser obtida executando [System.TimeZoneInfo]:GetSystemTimeZones() no PowerShell. Exemplo: Hora Oficial do Pacífico, UTC, Hora Oficial do Oeste Europeu, Hora Oficial da Coreia do Sul, Cen. Hora Oficial da Austrália.
properties.namespace Obtém ou define o namespace do recurso
properties.visibility Obtém ou define a visibilidade da configuração. O valor padrão é 'Custom'
systemData Os metadados do Azure Resource Manager que contêm as informações createdBy e modifiedBy.
tags Obtém ou define as marcas do recurso
type Tipo do recurso

Para especificar a solicitação POST, você pode usar a chamada à API REST do Azure a seguir com parâmetros e valores válidos.

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"
        ]
      }
    }
  }
}'

Associar uma VM a um agendamento

Para associar um agendamento de configuração de manutenção a uma VM, especifique a seguinte solicitação PUT:

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

Para especificar a solicitação PUT, você pode usar a chamada à API REST do Azure a seguir com parâmetros e valores válidos.

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"
}'

Remover o computador do agendamento

Para remover um computador do agendamento, obtenha todos os nomes de atribuição de configuração para o computador que foram criados para associar o computador ao agendamento atual do Azure Resource Graph, conforme listado:

maintenanceresources
| where type =~ "microsoft.maintenance/configurationassignments"
| where properties.maintenanceConfigurationId =~ "<maintenance configuration Resource ID>"
| where properties.resourceId =~ "<Machine Resource Id>"
| project name, id

Após obter o nome acima, exclua a atribuição de configuração seguindo a solicitação DELETE –

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

Próximas etapas