Обновление общедоступных 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
Использование модуля
Использование
Connect-AzAccount
для подключения к требуемому клиенту Microsoft Entra и подписке AzurePS C:\> Connect-AzAccount -Tenant <TenantId> -Subscription <SubscriptionId>
Найдите виртуальную машину с подключенными общедоступными IP-адресами уровня "Базовый", которые вы хотите обновить. Запишите имя и имя группы ресурсов.
Проверьте параметры модуля:
- Имя виртуальной машины [строка] Обязательно . Этот параметр является именем виртуальной машины.
- ResourceGroupName [string] Обязательный параметр . Этот параметр является группой ресурсов для виртуальной машины с подключенными общедоступными IP-адресами уровня "Базовый", которые требуется обновить.
Выполните команду "Обновить".
Пример использования скрипта
Чтобы обновить одну виртуальную машину, передайте имя виртуальной машины и имя группы ресурсов в качестве параметров.
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"