Controlar as atualizações com as Configurações de Manutenção e o Azure PowerShell

Aplica-se a: ✔️ VMs do Linux ✔️ VMs do Windows ✔️ Conjuntos de dimensionamento flexíveis ✔️ Conjuntos de dimensionamento uniformes

Você pode usar o recurso Configurações de Manutenção para controlar quando aplicar as atualizações de plataforma para vários recursos do Azure. Este artigo aborda as opções do Azure PowerShell para hosts dedicados e máquinas virtuais (VMs) isoladas. Para obter mais informações sobre os benefícios de uso do recurso Configurações de Manutenção, suas limitações e outras opções de gerenciamento, consulte Gerenciamento de atualizações de plataforma com Configurações de Manutenção.

Se estiver procurando informações sobre como usar as Configurações de Manutenção para conjuntos de dimensionamento, consulte Controle de manutenção para Conjuntos de Dimensionamento de Máquinas Virtuais do Microsoft Azure.

Importante

Escopos específicos com suporte para determinados tipos de computadores e agendamentos. Certifique-se de selecionar o escopo correto para sua VM.

Habilite o módulo do Azure PowerShell

Certifique-se de que PowerShellGet esteja atualizado:

Install-Module -Name PowerShellGet -Repository PSGallery -Force

Instale o módulo Az.Maintenance do Azure PowerShell:

Install-Module -Name Az.Maintenance

Verifique se você está executando a versão mais recente de Az.Maintenance (versão 1.2.0):

Get-Module -ListAvailable -Name Az.Maintenance

Certifique-se de estar executando a versão apropriada de Az.Maintenance:

Import-Module -Name Az.Maintenance -RequiredVersion 1.2.0

Se estiver instalando localmente, certifique-se de abrir o prompt do Azure PowerShell como administrador.

Poderá ser solicitado que você confirme que deseja instalar a partir de um repositório não confiável. Insira Y ou selecione Sim para Todos para instalar o módulo.

Criar uma configuração de manutenção

A primeira etapa da criação de uma configuração de manutenção é criar um grupo de recursos como contêiner para a sua configuração. Este exemplo cria um grupo de recursos chamado myMaintenanceRG em eastus. Se você já tiver um grupo de recursos que deseja usar, poderá ignorar essa parte e substituir o nome do grupo de recursos pelo seu no restante dos exemplos.

New-AzResourceGroup `
   -Location eastus `
   -Name myMaintenanceRG

É possível declarar uma janela agendada quando o Azure aplicará recorrentemente as atualizações em seus recursos. Depois de criar uma janela de agendamento, você não precisará mais aplicar as atualizações manualmente.

Você pode expressar a recorrência da manutenção como diária, semanal ou mensal. Estes são alguns exemplos:

  • Diário: Um valor RecurEvery de "Day" ou "3Days".
  • Semanal: Um valor RecurEvery de "3Weeks" ou "Week Saturday,Sunday".
  • Mensal: Um valor RecurEvery de "Month day23,day24" ou "Month Last Sunday" ou "Month Fourth Monday".

Host

Este exemplo cria uma configuração de manutenção denominada myConfig com escopo Host, com uma janela de agendamento de 5 horas na quarta segunda-feira de cada mês. O valor duration do agendamento para esse escopo deve ser de pelo menos duas horas. Para começar, defina os parâmetros para New-AzMaintenanceConfiguration:

$RGName = "myMaintenanceRG"
$configName = "myConfig"
$scope = "Host"
$location = "eastus"
$timeZone = "Pacific Standard Time" 
$duration = "05:00"
$startDateTime = "2022-11-01 00:00"
$recurEvery = "Month Fourth Monday"

Depois de definir os parâmetros, você pode usar o cmdlet New-AzMaintenanceConfiguration para criar sua configuração:

New-AzMaintenanceConfiguration
   -ResourceGroup $RGName `
   -Name $configName `
   -MaintenanceScope $scope `
   -Location $location `
   -StartDateTime $startDateTime `
   -TimeZone $timeZone `
   -Duration $duration `
   -RecurEvery $recurEvery

O uso de $scope = "Host" garante que a configuração de manutenção seja usada para controlar atualizações em computadores host. Certifique-se de criar uma configuração para o escopo específico doas computadores que você está direcionando. Saiba mais sobre escopos.

Imagem do sistema operacional

Este exemplo cria uma configuração de manutenção denominada myConfig com escopo para osimage, com uma janela de agendamento de 8 horas a cada 5 dias. O valor duration do agendamento para esse escopo deve ser de pelo menos 5 horas. Esse escopo permite um máximo de 7 dias para a recorrência do agendamento.

$RGName = "myMaintenanceRG"
$configName = "myConfig"
$scope = "osimage"
$location = "eastus"
$timeZone = "Pacific Standard Time" 
$duration = "08:00"
$startDateTime = "2022-11-01 00:00"
$recurEvery = "5days"

Depois de definir os parâmetros, você pode usar o cmdlet New-AzMaintenanceConfiguration para criar sua configuração:

New-AzMaintenanceConfiguration
   -ResourceGroup $RGName `
   -Name $configName `
   -MaintenanceScope $scope `
   -Location $location `
   -StartDateTime $startDateTime `
   -TimeZone $timeZone `
   -Duration $duration `
   -RecurEvery $recurEvery

Convidado

A adição mais recente ao recurso Configurações de Manutenção é o escopo InGuestPatch. Este exemplo mostra como criar uma configuração de manutenção para um escopo de convidado usando o Azure PowerShell. Para obter mais informações sobre esse escopo, consulte Convidado.

$RGName = "myMaintenanceRG"
$configName = "myConfig"
$scope = "InGuestPatch"
$location = "eastus"
$timeZone = "Pacific Standard Time" 
$duration = "04:00"
$startDateTime = "2022-11-01 00:00"
$recurEvery = "Week Saturday, Sunday"
$WindowsParameterClassificationToInclude = "FeaturePack","ServicePack";
$WindowParameterKbNumberToInclude = "KB123456","KB123466";
$WindowParameterKbNumberToExclude = "KB123456","KB123466";
$RebootOption = "IfRequired";
$LinuxParameterClassificationToInclude = "Other";
$LinuxParameterPackageNameMaskToInclude = "apt","httpd";
$LinuxParameterPackageNameMaskToExclude = "ppt","userpk";

Depois de definir os parâmetros, você pode usar o cmdlet New-AzMaintenanceConfiguration para criar sua configuração:

New-AzMaintenanceConfiguration
   -ResourceGroup $RGName `
   -Name $configName `
   -MaintenanceScope $scope `
   -Location $location `
   -StartDateTime $startDateTime `
   -TimeZone $timeZone `
   -Duration $duration `
   -RecurEvery $recurEvery `
   -WindowParameterClassificationToInclude $WindowsParameterClassificationToInclude `
   -WindowParameterKbNumberToInclude $WindowParameterKbNumberToInclude `
   -WindowParameterKbNumberToExclude $WindowParameterKbNumberToExclude `
   -InstallPatchRebootSetting $RebootOption `
   -LinuxParameterPackageNameMaskToInclude $LinuxParameterPackageNameMaskToInclude `
   -LinuxParameterClassificationToInclude $LinuxParameterClassificationToInclude `
   -LinuxParameterPackageNameMaskToExclude $LinuxParameterPackageNameMaskToExclude `
   -ExtensionProperty @{"InGuestPatchMode"="User"}

Se você tentar criar uma configuração com o mesmo nome, mas em um local diferente, receberá um erro. Os nomes de configuração devem ser exclusivos para seu grupo de recursos.

Você pode verificar se as Configurações de Manutenção foram criadas com êxito usando Get-AzMaintenanceConfiguration:

Get-AzMaintenanceConfiguration | Format-Table -Property Name,Id

Atribuir a configuração

Depois de criar sua configuração, talvez você também queira atribuir computadores a ela usando o Azure PowerShell. Você pode usar o cmdlet New-AzConfigurationAssignment.

VM Isolada

Atribua a configuração a uma VM usando a ID da configuração. Especifique -ResourceType VirtualMachines. Forneça o nome da VM para -ResourceName e forneça o grupo de recursos da VM para -ResourceGroupName.

New-AzConfigurationAssignment `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myVM" `
   -ResourceType "VirtualMachines" `
   -ProviderName "Microsoft.Compute" `
   -ConfigurationAssignmentName "configName" `
   -MaintenanceConfigurationId "configID"

Host dedicado

Para aplicar uma configuração a um host dedicado, você precisa incluir -ResourceType hosts, -ResourceParentName com o nome do grupo de hosts e -ResourceParentType hostGroups:

New-AzConfigurationAssignment `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myHost" `
   -ResourceType "hosts" `
   -ResourceParentName myHostGroup `
   -ResourceParentType hostGroups `
   -ProviderName "Microsoft.Compute" `
   -ConfigurationAssignmentName "configName" `
   -MaintenanceConfigurationId "configID"

conjuntos de escala de máquina virtual

New-AzConfigurationAssignment `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myVMSS" `
   -ResourceType "VirtualMachineScaleSets" `
   -ProviderName "Microsoft.Compute" `
   -ConfigurationAssignmentName "configName" `
   -MaintenanceConfigurationId "configID"

Convidado

New-AzConfigurationAssignment `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myGuest" `
   -ResourceType "VirtualMachines" `
   -ProviderName "Microsoft.Compute" `
   -ConfigurationAssignmentName "configName" `
   -MaintenanceConfigurationId "configID"

Verificar atualizações pendentes

Para verificar se há atualizações pendentes, use Get-AzMaintenanceUpdate. Use -subscription para especificar a assinatura do Azure da VM, se ela for diferente daquela em que você está conectado.

Se não houver atualizações para mostrar, esse comando não retornará nada. Caso contrário, ele retornará um objeto PSApplyUpdate:

{
   "maintenanceScope": "Host",
   "impactType": "Freeze",
   "status": "Pending",
   "impactDurationInSec": 9,
   "notBefore": "2020-02-21T16:47:44.8728029Z",
   "properties": {
      "resourceId": "/subscriptions/39c6cced-4d6c-4dd5-af86-57499cd3f846/resourcegroups/Ignite2019/providers/Microsoft.Compute/virtualMachines/MCDemo3"
} 

VM Isolada

Verifique se há atualizações pendentes para uma VM isolada. Neste exemplo, a saída é formatada como uma tabela para facilitar a leitura:

Get-AzMaintenanceUpdate `
  -ResourceGroupName "myResourceGroup" `
  -ResourceName "myVM" `
  -ResourceType "VirtualMachines" `
  -ProviderName "Microsoft.Compute" | Format-Table

Host dedicado

Verifique se há atualizações pendentes para um host dedicado. Neste exemplo, a saída é formatada como uma tabela para facilitar a leitura:

Get-AzMaintenanceUpdate `
   -ResourceGroupName "myResourceGroup" `
   -ResourceName "myHost" `
   -ResourceType "hosts" `
   -ResourceParentName "myHostGroup" `
   -ResourceParentType "hostGroups" `
   -ProviderName "Microsoft.Compute" | Format-Table

conjuntos de escala de máquina virtual

Get-AzMaintenanceUpdate `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myVMSS" `
   -ResourceType "VirtualMachineScaleSets" `
   -ProviderName "Microsoft.Compute" | Format-Table

Aplicar atualizações

Use New-AzApplyUpdate para aplicar atualizações pendentes. A aplicação de chamadas de atualização pode levar até 2 horas para ser concluída.

Esse cmdlet funciona somente para os escopos de imagem do host e do SO. Ele não funciona para o escopo do convidado.

VM Isolada

Crie uma solicitação para aplicar atualizações a uma VM isolada:

New-AzApplyUpdate `
  -ResourceGroupName "myResourceGroup" `
  -ResourceName "myVM" `
  -ResourceType "VirtualMachines" `
  -ProviderName "Microsoft.Compute"

Quando bem-sucedido, esse comando retorna um objeto PSApplyUpdate. Você pode usar o atributo Name no comando Get-AzApplyUpdate para verificar o status da atualização, conforme descrito mais adiante neste artigo.

Host dedicado

Aplicar atualizações a um host dedicado:

New-AzApplyUpdate `
   -ResourceGroupName "myResourceGroup" `
   -ResourceName "myHost" `
   -ResourceType "hosts" `
   -ResourceParentName "myHostGroup" `
   -ResourceParentType "hostGroups" `
   -ProviderName Microsoft.Compute

conjuntos de escala de máquina virtual

New-AzApplyUpdate `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myVMSS" `
   -ResourceType "VirtualMachineScaleSets" `
   -ProviderName "Microsoft.Compute"

Verificar status da atualização

Para verificar o status de uma atualização, use Get-AzApplyUpdate. Os comandos a seguir mostram o status da atualização mais recente usando default para o parâmetro -ApplyUpdateName. Você pode substituir o nome da atualização (retornado pelo comando New-AzApplyUpdate) para obter o status de uma atualização específica.

Esse cmdlet funciona somente para os escopos de imagem do host e do SO. Ele não funciona para o escopo do convidado.

Status         : Completed
ResourceId     : /subscriptions/12ae7457-4a34-465c-94c1-17c058c2bd25/resourcegroups/TestShantS/providers/Microsoft.Comp
ute/virtualMachines/DXT-test-04-iso
LastUpdateTime : 1/1/2020 12:00:00 AM
Id             : /subscriptions/12ae7457-4a34-465c-94c1-17c058c2bd25/resourcegroups/TestShantS/providers/Microsoft.Comp
ute/virtualMachines/DXT-test-04-iso/providers/Microsoft.Maintenance/applyUpdates/default
Name           : default
Type           : Microsoft.Maintenance/applyUpdates

LastUpdateTime é a hora em que a atualização foi concluída, quer você tenha iniciado a atualização ou a plataforma a tenha iniciado porque você não usou a janela de manutenção automática. Se uma atualização nunca foi aplicada por meio das Configurações de Manutenção, LastUpdateTime mostrará o valor padrão.

VM Isolada

Verifique se há atualizações em um máquina virtual específico:

Get-AzApplyUpdate `
  -ResourceGroupName "myResourceGroup" `
  -ResourceName "myVM" `
  -ResourceType "VirtualMachines" `
  -ProviderName "Microsoft.Compute" `
  -ApplyUpdateName "applyUpdateName"

Host dedicado

Verifique se há atualizações em um host dedicado:

Get-AzApplyUpdate `
   -ResourceGroupName "myResourceGroup" `
   -ResourceName "myHost" `
   -ResourceType "hosts" `
   -ResourceParentName "myHostGroup" `
   -ResourceParentType "hostGroups" `
   -ProviderName "Microsoft.Compute" `
   -ApplyUpdateName "applyUpdateName"

conjuntos de escala de máquina virtual

New-AzApplyUpdate `
   -ResourceGroupName "myResourceGroup" `
   -Location "eastus" `
   -ResourceName "myVMSS" `
   -ResourceType "VirtualMachineScaleSets" `
   -ProviderName "Microsoft.Compute" `
   -ApplyUpdateName "applyUpdateName"

Excluir uma configuração de manutenção

Para excluir uma configuração de manutenção, use Remove-AzMaintenanceConfiguration:

Remove-AzMaintenanceConfiguration `
   -ResourceGroupName "myResourceGroup" `
   -Name "configName"

Próximas etapas

Para saber mais, consulte Manutenção para máquinas virtuais no Azure.