Обновление общедоступных IP-адресов, подключенных к виртуальной машине, с уровня "Базовый" до "Стандартный"

Важно!

30 сентября 2025 г. общедоступные IP-адреса SKU уровня "Базовый" будут прекращены. Дополнительные сведения см. в официальном объявлении. Если вы используете общедоступные IP-адреса SKU уровня "Базовый", обязательно обновите общедоступные IP-адреса SKU уровня "Стандартный" до даты выхода на пенсию. В этой статье описано, как выполнить процесс обновления.

Дополнительные сведения об выходе общедоступных IP-адресов SKU уровня "Базовый" и преимущества общедоступных IP-адресов SKU уровня "Стандартный" см . здесь.

Общие сведения об обновлении

Этот скрипт обновляет все общедоступные IP-адреса, подключенные к виртуальной машине, с уровня "Базовый" до номера SKU уровня "Стандартный". Чтобы выполнить обновление, метод выделения общедоступных IP-адресов устанавливается статическим, прежде чем отсоединяться от виртуальной машины. После отключения номер SKU общедоступного IP-адреса обновляется до уровня "Стандартный", затем IP-адрес повторно связывается с виртуальной машиной.

Так как выделение общедоступных IP-адресов имеет значение "Статический" перед отсоединение от виртуальной машины, IP-адрес не изменится во время процесса обновления, даже в случае сбоя скрипта. Модуль дважды проверка, что метод выделения общедоступных IP-адресов является статическим, прежде чем отсоединить общедоступный IP-адрес от виртуальной машины.

Модуль регистрирует все действия обновления до файла с именем PublicIPUpgrade.log, созданного в том же расположении, где модуль был выполнен (по умолчанию).

Ограничения/ неподдерживаемые сценарии

  • Виртуальные машины с сетевыми адаптерами, связанными с Подсистемой балансировки нагрузки. Поскольку подсистема балансировки нагрузки и общедоступные IP-адреса, связанные с виртуальной машиной, должны соответствовать, невозможно обновить общедоступные IP-адреса уровня экземпляра, связанные с виртуальной машиной, когда сетевые карты виртуальной машины также связаны с подсистемой балансировки нагрузки, либо через членство в серверном пуле или пуле NAT. Используйте скрипты для обновления SKU "Базовый балансировщик нагрузки" до номера SKU уровня "Стандартный", чтобы обновить как подсистему балансировки нагрузки, так и общедоступные IP-адреса одновременно.

  • Виртуальные машины без группы безопасности сети: виртуальные машины с IP-адресами, которые необходимо обновить, должны иметь группу безопасности сети (NSG), связанную либо с подсетью каждой конфигурации IP-адресов с общедоступным IP-адресом, либо с сетевым адаптером напрямую. Это связано с тем, что общедоступные IP-адреса SKU уровня "Стандартный" являются "безопасными по умолчанию", что означает, что любой трафик к общедоступному IP-адресу должен быть явно разрешен в NSG для доступа к виртуальной машине. Общедоступные IP-адреса SKU уровня "Базовый" разрешают любой трафик по умолчанию. Обновление номеров SKU общедоступных IP-адресов без NSG приведет к тому, что входящий интернет-трафик к общедоступному IP-адресу ранее разрешен, так как номер SKU "Базовый" заблокирован после миграции. См. раздел: номера SKU общедоступных IP-адресов

  • Масштабируемые наборы виртуальных машин с конфигурациями общедоступных IP-адресов. Если у вас есть масштабируемый набор виртуальных машин (единая модель) с конфигурациями общедоступных IP-адресов на экземпляр, обратите внимание, что эти конфигурации не являются ресурсами общедоступного IP-адреса и, как это не может быть обновлено. Вместо этого можно удалить базовую IP-конфигурацию и использовать свойство SKU, чтобы указать, что стандартные IP-конфигурации необходимы для каждого экземпляра масштабируемого набора виртуальных машин, как показано здесь.

Необходимые компоненты

  • Установка последней версии PowerShell
  • Убедитесь, что установлен последний модуль Az PowerShell (и установите последнюю версию модуля Az PowerShell, если нет)

Скачивание скрипта

Загрузите скрипт миграции из коллекции PowerShell.

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

Использование модуля

  1. Использование Connect-AzAccount для подключения к требуемому клиенту Microsoft Entra и подписке Azure

    PS C:\> Connect-AzAccount -Tenant <TenantId> -Subscription <SubscriptionId>
    
  2. Найдите виртуальную машину с подключенными общедоступными IP-адресами уровня "Базовый", которые вы хотите обновить. Запишите имя и имя группы ресурсов.

  3. Проверьте параметры модуля:

    • Имя виртуальной машины [строка] Обязательно . Этот параметр является именем виртуальной машины.
    • ResourceGroupName [string] Обязательный параметр . Этот параметр является группой ресурсов для виртуальной машины с подключенными общедоступными IP-адресами уровня "Базовый", которые требуется обновить.
  4. Выполните команду "Обновить".

Пример использования скрипта

Чтобы обновить одну виртуальную машину, передайте имя виртуальной машины и имя группы ресурсов в качестве параметров.

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

Чтобы оценить обновление одной виртуальной машины без внесения изменений, добавьте параметр -WhatIf.

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

Чтобы обновить все виртуальные машины в группе ресурсов, пропускайте виртуальные машины, у которых нет групп безопасности сети.

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

Восстановление после неудачной миграции

Если миграция завершается сбоем из-за временной проблемы, например сбоя сети или клиентской системы, миграция может быть повторно запущена для настройки виртуальной машины и общедоступных IP-адресов в состоянии цели. При выполнении скрипт выводит файл журнала восстановления, который используется для правильной настройки виртуальной машины. Просмотрите файл PublicIPUpgrade.log журнала, созданный в расположении, где был выполнен скрипт.

Чтобы восстановиться после сбоя обновления, передайте путь к файлу журнала восстановления скрипту с -recoverFromFile параметром и определите виртуальную машину для восстановления с помощью -VMName и -VMResourceGroup-VMResourceID параметров, как показано в этом примере.

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

Часто задаваемые вопросы

Сколько времени займет миграция и сколько времени моя виртуальная машина будет недоступна в общедоступном IP-адресе?

Время обновления общедоступных IP-адресов виртуальной машины зависит от количества общедоступных IP-адресов и сетевых интерфейсов, связанных с виртуальной машиной. При тестировании виртуальная машина с одним сетевым адаптером и общедоступным IP-адресом занимает от 1 до 2 минут для обновления. Каждый сетевой адаптер на виртуальной машине добавляет около одной минуты, и каждый общедоступный IP-адрес добавляет несколько секунд каждый.

Можно ли выполнить откат к общедоступному IP-адресу SKU уровня "Базовый"?

Невозможно перейти на общедоступный IP-адрес с уровня "Стандартный" на "Базовый".

Можно ли протестировать миграцию перед выполнением?

Нет способа оценить обновление общедоступного IP-адреса без завершения действия. Однако этот скрипт включает -whatif параметр, который проверка, которые виртуальная машина будет поддерживать обновление и выполняет шаги без принятия действий.

Поддерживает ли сценарий общедоступные IP-адреса зонального SKU уровня "Базовый"?

Да, процесс обновления общедоступного IP-адреса зонального SKU уровня "Базовый" до общедоступного IP-адреса зонального номера SKU уровня "Стандартный" идентичен и работает в скрипте.

Использование Resource Graph для перечисления виртуальных машин с общедоступными IP-адресами, требующими обновления

Запрос на перечисление виртуальных машин с общедоступными IP-адресами SKU уровня "Базовый"

Этот запрос возвращает список идентификаторов виртуальных машин с присоединенными общедоступными IP-адресами SKU уровня "Базовый".

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"

Следующие шаги