Atualizar endereços IP públicos anexados à VM de Basic para Standard
Importante
Em 30 de setembro de 2025, os IPs públicos básicos de SKU serão desativados. Para obter mais informações, veja o anúncio oficial. Se você estiver usando IPs públicos de SKU básicos, certifique-se de atualizar para IPs públicos de SKU padrão antes da data de desativação. Este artigo ajudará a guiá-lo através do processo de atualização.
Para obter mais informações sobre a desativação de IPs públicos de SKU básicos e os benefícios de IPs públicos de SKU padrão, consulte aqui
Descrição geral da atualização
Este script atualiza todos os endereços IP públicos anexados à VM de Basic para Standard SKU. Para executar a atualização, o método de alocação de Endereço IP Público é definido como estático antes de ser desassociado da VM. Uma vez desassociado, o SKU IP público é atualizado para Padrão e, em seguida, o IP é reassociado à VM.
Como a alocação de IP público é definida como 'Estática' antes de se desanexar da VM, o endereço IP não será alterado durante o processo de atualização, mesmo no caso de uma falha de script. O módulo verifica duas vezes se o método de alocação de IP público é 'estático' antes de separar o IP público da VM.
O módulo registra toda a atividade de atualização em um arquivo chamado PublicIPUpgrade.log
, criado no mesmo local onde o módulo foi executado (por padrão).
Restrições/Cenários sem suporte
VMs com NICs associadas a um Balanceador de Carga: Como o Balanceador de Carga e as SKUs de IP Público associadas a uma VM devem corresponder, não é possível atualizar os endereços IP Públicos no nível da instância associados a uma VM quando as NICs da VM também estão associadas a um Balanceador de Carga, seja por meio do Pool de Back-end ou da associação ao Pool NAT. Use os scripts Atualizar um Balanceador de Carga Básico para SKU Padrão para atualizar o Balanceador de Carga e IPs Públicos ao mesmo tempo.
VMs sem um Grupo de Segurança de Rede: as VMs com IPs a serem atualizados devem ter um NSG (Grupo de Segurança de Rede) associado à sub-rede de cada configuração IP com um IP público ou diretamente à NIC. Isso ocorre porque os IPs públicos SKU padrão 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 alcançar a VM. Os IPs públicos básicos de SKU permitem qualquer tráfego por padrão. A atualização de SKUs IP Públicos sem um NSG resultaria em tráfego de entrada da Internet para o IP Público anteriormente permitido com o SKU Básico sendo bloqueado após a migração. Consulte: SKUs IP públicos
Conjuntos de dimensionamento de máquina virtual com configurações de IP público: se você tiver um conjunto de dimensionamento de máquina virtual (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 e, como tal, não podem ser atualizadas. Em vez disso, você pode remover a configuração de IP básica e usar a propriedade SKU para especificar que as configurações de IP padrão são necessárias para cada instância do conjunto de escala de máquina virtual, conforme mostrado aqui.
Pré-requisitos
- Instalar a versão mais recente do PowerShell
- Certifique-se de ter o módulo Az PowerShell mais recente instalado (e instale o módulo Az PowerShell mais recente, se não)
Faça o download do script
Baixe o script de migração da Galeria do PowerShell.
PS C:\> Install-Module -Name AzureVMPublicIPUpgrade -Scope CurrentUser -Repository PSGallery -Force
Utilize o módulo
Use
Connect-AzAccount
para se conectar ao locatário necessário do Microsoft Entra e à assinatura do AzurePS C:\> Connect-AzAccount -Tenant <TenantId> -Subscription <SubscriptionId>
Localize a VM com os IPs públicos básicos anexados que você deseja atualizar. Registre seu nome e nome do grupo de recursos.
Examine os parâmetros do módulo:
- VMName [string] Required - Este parâmetro é o nome da sua VM.
- ResourceGroupName [string] Required - Este parâmetro é o grupo de recursos para sua VM com os IPs públicos básicos anexados que você deseja atualizar.
Execute o comando Atualizar.
Exemplos de usos 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 alterações, 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 do sistema cliente, a migração poderá ser executada novamente para configurar a VM e os IPs públicos no estado de destino. Na execução, o script gera um arquivo de log de recuperação, que é usado para garantir que a VM seja reconfigurada corretamente. Revise o arquivo de PublicIPUpgrade.log
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 -recoverFromFile
parâmetro e identifique a VM a ser recuperada com os -VMName
parâmetros e/ -VMResourceGroup
or -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 levará a migração e por 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 Interfaces de Rede associados à VM. No teste, uma VM com uma única NIC e IP público leva entre 1 e 2 minutos para atualizar. Cada NIC na 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 o downgrade de um endereço IP público de Standard para Basic.
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 -whatif
parâmetro, que verifica se sua VM dará suporte à atualização e percorre as etapas sem tomar medidas.
O script suporta IPs públicos SKU Zonal Basic?
Sim, o processo de atualização de um IP público de SKU básico zonal para um IP público de SKU padrão zonal é idêntico e funciona no script.
Usar o Gráfico de Recursos para listar VMs com IPs públicos que exigem atualização
Consulta para listar máquinas virtuais com endereços IP públicos de SKU básico
Esta 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"