Atualizar IPs anexados à VM do Básico para o Standard

Importante

Em 30 de setembro de 2025, os IPs públicos do SKU Básico serão desativados. Para saber mais, confira o anúncio oficial. Se você estiver usando os IPs públicos do SKU Básico, certifique-se de atualizar para IPs públicos do SKU Standard antes da data de desativação. Este artigo ajudará a guiá-lo durante o processo de atualização.

Para obter mais informações sobre a desativação de IPs Públicos de SKU Básico e os benefícios dos IPs Públicos de SKU Standard, confira aqui

Visão geral da atualização

Esse script atualiza todos os IPs anexados à VM do SKU Básico para Standard. Para executar a atualização, o método de alocação do IP é definido como estático antes de ser desassociado da VM. Depois de desassociado, o SKU do IP Público é atualizado para Standard e, em seguida, o IP é associado novamente à VM.

Como a alocação do IP Público é definida como ''Estática'' antes de desanexar da VM, o endereço IP não será alterado durante o processo de atualização, mesmo em caso de falha de script. O módulo verifica duas vezes se o método de alocação do IP Público é ''Estático'' antes de desanexar o IP Público da VM.

O módulo registra todas as atividades de atualização em um arquivo chamado PublicIPUpgrade.log, criado no mesmo local em que o módulo foi executado (por padrão).

Restrições/ Cenários sem suporte

  • VMs com NICs associados a um Load Balancer: como as SKUs de IP Público e Load Balancer associadas a uma VM devem ser iguais, não é possível atualizar os endereços IP públicos no nível da instância associados a uma VM quando os NICs da VM também estão associados a um Load Balancer, seja no pool de back-end ou na associação ao pool de NAT. Use os scripts Atualizar um Load Balancer Básico para a SKU Standard para atualizar o Load Balancer e os IPs públicos ao mesmo tempo.

  • VMs sem um Grupo de Segurança de Rede: as VMs com IPs a serem atualizadas devem ter um NSG (Grupo de Segurança de Rede) associado à sub-rede de cada configuração de IP com um IP Público ou diretamente com a NIC. Isso ocorre porque os IPs Públicos de SKU Standard são "seguros por padrão", o que significa que qualquer tráfego para o IP Público deve ser explicitamente permitido em um NSG para acessar a VM. Os IPs Públicos de SKU Básico permitem qualquer tráfego por padrão. Atualizar SKUs de IP Público sem um NSG resultaria em tráfego de internet de entrada para o IP Público permitido anteriormente com o SKU Básico bloqueado após a migração. Confira: SKUs de IP Público

  • Conjuntos de Dimensionamento de Máquinas Virtuais com configurações de IP Público: se você tiver um conjunto de dimensionamento de máquinas virtuais (modelo uniforme) com configurações de IP Público por instância, observe que essas configurações não são recursos de IP Público, portanto, não podem ser atualizadas. Em vez disso, você pode remover a configuração de IP Básico e usar a propriedade do SKU para especificar que as configurações de IP Standard são necessárias para cada instância do conjunto de dimensionamento de máquinas virtuais, conforme mostrado aqui.

Pré-requisitos

  • Instalar a versão mais recente do PowerShell
  • Verifique se você tem o módulo mais recente do Az PowerShell instalado (e instale o módulo mais recente do Az PowerShell se não tiver)

Baixar o script

Baixe o script de migração pela Galeria do PowerShell.

PS C:\> Install-Module -Name AzureVMPublicIPUpgrade -Scope CurrentUser -Repository PSGallery -Force

Usar o módulo

  1. Use Connect-AzAccount para se conectar ao locatário do Microsoft Entra necessário e à assinatura do Azure

    PS C:\> Connect-AzAccount -Tenant <TenantId> -Subscription <SubscriptionId>
    
  2. Localize a VM com os IPs Públicos Básicos anexados que você deseja atualizar. Registre seu nome e o nome do grupo de recursos.

  3. Examine os parâmetros do módulo:

    • VMName [cadeia de caracteres] Obrigatório - Esse parâmetro é o nome da VM.
    • ResourceGroupName [cadeia de caracteres] Obrigatório - Esse parâmetro é o grupo de recursos da VM com os IPs Públicos Básicos anexados que você deseja atualizar.
  4. Execute o comando Atualizar.

Usos de exemplo do script

Para atualizar uma única VM, passe o nome da VM e o nome do grupo de recursos como parâmetros.

    Start-VMPublicIPUpgrade -VMName 'myVM' -ResourceGroupName 'myRG'

Para avaliar a atualização de uma única VM, sem fazer nenhuma alteração, adicione o parâmetro -WhatIf.

    Start-VMPublicIPUpgrade -VMName 'myVM' -ResourceGroupName 'myRG' -WhatIf

Para atualizar todas as VMs em um grupo de recursos, ignore as VMs que não têm Grupos de Segurança de Rede.

    Get-AzVM -ResourceGroupName 'myRG' | Start-VMPublicIPUpgrade -skipVMMissingNSG

Recuperando-se de uma migração com falha

Se uma migração falhar devido a um problema transitório, como uma interrupção de rede ou um problema no sistema cliente, a migração poderá ser executada novamente para configurar a VM e os IPs Públicos no estado de meta. Na execução, o script gera um arquivo de log de recuperação, que é usado para garantir que a VM seja reconfigurada corretamente. Examine o arquivo de log PublicIPUpgrade.log criado no local onde o script foi executado.

Para se recuperar de uma atualização com falha, passe o caminho do arquivo de log de recuperação para o script com o parâmetro -recoverFromFile e identifique a VM a ser recuperada com os parâmetros -VMName e -VMResourceGroup ou -VMResourceID, conforme mostrado neste exemplo.

    Start-VMPublicIPUpgrade -RecoverFromFile ./PublicIPUpgrade_Recovery_2020-01-01-00-00.csv -VMName myVM -VMResourceGroup -rg-myrg

Perguntas comuns

Quanto tempo a migração levará e quanto tempo minha VM ficará inacessível em seu IP Público?

O tempo necessário para atualizar os IPs Públicos de uma VM depende do número de IPs Públicos e Adaptadores de Rede associados à VM. No teste, uma VM com uma única NIC e IP Público leva entre 1 e 2 minutos para ser atualizada. Cada NIC da VM adiciona cerca de mais um minuto e cada IP Público adiciona alguns segundos cada.

Posso reverter para um IP Público de SKU Básico?

Não é possível fazer downgrade de um IP Standard para um Básico.

Posso testar uma migração antes de executar?

Não há como avaliar a atualização de um IP Público sem concluir a ação. No entanto, esse script inclui um parâmetro -whatif, que verifica se sua VM dará suporte à atualização e percorre as etapas sem tomar medidas.

O script dá suporte a IPs Públicos de SKU Básico Zonal?

Sim, o processo de atualização de um IP Público de SKU Básico Zonal para um IP Público de SKU Standard Zonal é idêntico e funciona no script.

Usar o Resource Graph para listar as VMs com IPs Públicos que requerem atualização

Consultar para listar as máquinas virtuais com endereços IP públicos de SKU Básico

Essa consulta retorna uma lista de IDs de máquina virtual com endereços IP públicos de SKU Básico anexados.

Resources
| where type =~ 'microsoft.compute/virtualmachines'
| project vmId = tolower(id), vmNics = properties.networkProfile.networkInterfaces
| join (
  Resources |
  where type =~ 'microsoft.network/networkinterfaces' |
  project nicVMId = tolower(tostring(properties.virtualMachine.id)), allVMNicID = tolower(id), nicIPConfigs = properties.ipConfigurations)
  on $left.vmId == $right.nicVMId
| join (
  Resources
  | where type =~ 'microsoft.network/publicipaddresses' and isnotnull(properties.ipConfiguration.id)
  | where sku.name == 'Basic' // exclude to find all VMs with Public IPs
  | project pipId = id, pipSku = sku.name, pipAssociatedNicId = tolower(tostring(split(properties.ipConfiguration.id, '/ipConfigurations/')[0])))
  on $left.allVMNicID == $right.pipAssociatedNicId
| project vmId, pipId, pipSku
az graph query -q "Resources | where type =~ 'microsoft.compute/virtualmachines' | project vmId = tolower(id), vmNics = properties.networkProfile.networkInterfaces | join (Resources | where type =~ 'microsoft.network/networkinterfaces' | project nicVMId = tolower(tostring(properties.virtualMachine.id)), allVMNicID = tolower(id), nicIPConfigs = properties.ipConfigurations) on \$left.vmId == \$right.nicVMId | join ( Resources | where type =~ 'microsoft.network/publicipaddresses' and isnotnull(properties.ipConfiguration.id) | where sku.name == 'Basic' | project pipId = id, pipSku = sku.name, pipAssociatedNicId = tolower(tostring(split(properties.ipConfiguration.id, '/ipConfigurations/')[0]))) on \$left.allVMNicID == \$right.pipAssociatedNicId | project vmId, pipId, pipSku"

Próximas etapas