Перенос ресурсов IaaS из классической модели в модель Azure Resource Manager с помощью PowerShell

Область применения: ✔️ Виртуальные машины Linux ✔️ Виртуальные машины Windows

Важно!

Сегодня примерно на 90 % виртуальных машин IaaS используется служба Azure Resource Manager. По состоянию на 28 февраля 2020 г. классические виртуальные машины устарели и будут полностью прекращены 6 сентября 2023 г. Узнайте больше об этом устаревании и о том, как оно влияет на вас.

Ниже последовательно описано, как использовать команды Azure PowerShell для переноса ресурсов IaaS из классической модели развертывания в модель развертывания с помощью Azure Resource Manager.

При необходимости можно также перенести ресурсы с помощью Azure CLI.


Ниже приведена блок-схема с последовательностью действий во время миграции.

Screenshot that shows the migration steps

Шаг 1. Планирование миграции

Ниже приведено несколько рекомендаций для оценки переноса ресурсов IaaS из классической модели в модель Resource Manager.

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

Важно!

В настоящее время не поддерживается перенос шлюзов приложений из классической модели в модель Resource Manager. Чтобы перенести виртуальную сеть со шлюзом приложений, удалите этот шлюз перед выполнением операции подготовки для перемещения сети. После завершения переноса повторно подключите шлюз в Azure Resource Manager.

Шлюзы Azure ExpressRoute, подключенные к каналам ExpressRoute в другой подписке, перенести автоматически невозможно. В таких случаях удалите шлюз ExpressRoute, перенесите виртуальную сеть и создайте шлюз заново. Дополнительные сведения см. в статье Перенос каналов ExpressRoute и связанных виртуальных сетей из классической модели развертывания на модель Resource Manager.

Шаг 2. Установка последней версии PowerShell

Есть два основных способа установки Azure PowerShell — с помощью коллекции PowerShell и установщика веб-платформы (WebPI). Обновления для установщика веб-платформы выпускаются ежемесячно. Обновления для коллекции PowerShell выпускаются на постоянной основе. В этой статье используется Azure PowerShell 2.1.0.

Инструкции по установке см. в статье Установка и настройка Azure PowerShell.

Шаг 3. Проверка наличия прав администратора подписки

Чтобы выполнить миграцию, вас нужно добавить как соадминистратора подписки на портале Azure.

  1. Войдите на портал Azure.
  2. В меню Центр выберите Подписка. Если вы не видите этот пункт, щелкните Все службы.
  3. Найдите нужную запись подписки, а затем посмотрите на поле MY ROLE. Для соадминистратора значение должно быть Администратор учетной записи.

Если вам не удалась добавить соадминистратора, обратитесь к администратору или соадминистратору служб для подписки, чтобы вас добавили.

Шаг 4. Настройка подписки и регистрация для миграции

Сначала запустите командную строку PowerShell. Для выполнения миграции необходимо настроить среду как для классической модели, так и для модели Resource Manager.

Войдите в учетную запись для модели Resource Manager.

    Connect-AzAccount

Получите доступные подписки с помощью следующей команды.

    Get-AzSubscription | Sort Name | Select Name

Задайте подписку Azure для текущего сеанса. В этом примере задается имя подписки по умолчанию My Azure Subscription. Замените имя подписки в примере своим собственным значением.

    Select-AzSubscription –SubscriptionName "My Azure Subscription"

Примечание

Регистрация — однократное действие, но прежде чем выполнять миграцию, вам нужно зарегистрироваться. Если вы не зарегистрируетесь, отобразится такое сообщение об ошибке:

Неправильный запрос: Подписка не зарегистрирована для миграции.

Выполните регистрацию в поставщике ресурсов миграции с помощью приведенной ниже команды.

    Register-AzResourceProvider -ProviderNamespace Microsoft.ClassicInfrastructureMigrate

Подождите пять минут для завершения регистрации. Состояние утверждения регистрации можно проверить, выполнив следующую команду.

    Get-AzResourceProvider -ProviderNamespace Microsoft.ClassicInfrastructureMigrate

Убедитесь, что RegistrationState имеет значение Registered , прежде чем продолжить.

Перед переключением на классическую модель развертывания убедитесь в наличии достаточного количества виртуальных ЦП Azure Resource Manager в регионе Azure текущей среды или виртуальной сети. Чтобы проверить текущее количество виртуальных ЦП в Azure Resource Manager, используйте приведенную ниже команду PowerShell. Чтобы узнать больше о квотах на виртуальные ЦП, см. соответствующий раздел статьи Подписка Azure, границы, квоты и ограничения службы.

В этом примере проверяется доступность в регионе Западная часть США. Замените регион в примере своим собственным значением.

    Get-AzVMUsage -Location "West US"

Теперь войдите в свою учетную запись для классической модели развертывания.

    Add-AzureAccount

Получите доступные подписки с помощью следующей команды.

    Get-AzureSubscription | Sort SubscriptionName | Select SubscriptionName

Задайте подписку Azure для текущего сеанса. В этом примере задается имя подписки по умолчанию My Azure Subscription. Замените имя подписки в примере своим собственным значением.

    Select-AzureSubscription –SubscriptionName "My Azure Subscription"

Шаг 5. Выполнение команд для переноса ресурсов IaaS

Примечание

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

Шаг 5а. Вариант 1. Перенос виртуальных машин в облачной службе (не в виртуальной сети)

Получите список облачных служб с помощью следующей команды. Затем выберите облачную службу, которую требуется перенести. Если виртуальные машины в облачной службе размещены в виртуальной сети или им назначены веб-роли или рабочие роли, то команда возвращает сообщение об ошибке.

    Get-AzureService | ft Servicename

Получите имя развертывания для облачной службы. В этом примере имя службы — My Service. Замените имя службы в примере своим собственным значением.

    $serviceName = "My Service"
    $deployment = Get-AzureDeployment -ServiceName $serviceName
    $deploymentName = $deployment.DeploymentName

Подготовьте к переносу виртуальные машины в облачной службе. Возможно два варианта.

  • Вариант 1. Миграция виртуальных машин в виртуальную сеть, созданную платформой.

    Во-первых, проверьте возможность переноса облачной службы с помощью следующих команд.

    $validate = Move-AzureService -Validate -ServiceName $serviceName `
        -DeploymentName $deploymentName -CreateNewVirtualNetwork
    $validate.ValidationMessages
    

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

    Move-AzureService -Prepare -ServiceName $serviceName `
        -DeploymentName $deploymentName -CreateNewVirtualNetwork
    
  • Вариант 2. Миграция виртуальных машин в существующую виртуальную сеть в модели развертывания с помощью Resource Manager.

    В этом примере группе ресурсов присваивается имя myResourceGroup, виртуальной сети — имя myVirtualNetwork, а подсети — имя mySubNet. Замените имена в примере именами своих ресурсов.

    $existingVnetRGName = "myResourceGroup"
    $vnetName = "myVirtualNetwork"
    $subnetName = "mySubNet"
    

    Во-первых, проверьте возможность переноса виртуальной сети с помощью следующей команды.

    $validate = Move-AzureService -Validate -ServiceName $serviceName `
        -DeploymentName $deploymentName -UseExistingVirtualNetwork -VirtualNetworkResourceGroupName $existingVnetRGName -VirtualNetworkName $vnetName -SubnetName $subnetName
    $validate.ValidationMessages
    

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

        Move-AzureService -Prepare -ServiceName $serviceName -DeploymentName $deploymentName `
        -UseExistingVirtualNetwork -VirtualNetworkResourceGroupName $existingVnetRGName `
        -VirtualNetworkName $vnetName -SubnetName $subnetName
    

После успешного завершения операции подготовки для одного из перечисленных выше вариантов запросите состояние миграции виртуальных машин. Убедитесь, что они находятся в состоянии Prepared.

В этом примере виртуальной машине присваивается имя myVM. Замените имя в примере именем своей виртуальной машины.

    $vmName = "myVM"
    $vm = Get-AzureVM -ServiceName $serviceName -Name $vmName
    $vm.VM.MigrationState

Проверьте конфигурацию для подготовленных ресурсов с помощью PowerShell или портала Azure. Если вы не готовы к миграции и хотите вернуть предыдущее состояние, используйте следующую команду.

    Move-AzureService -Abort -ServiceName $serviceName -DeploymentName $deploymentName

Если подготовленная конфигурация вас устраивает, можете продолжить процесс. Выполните следующую команду, чтобы зафиксировать ресурсы.

    Move-AzureService -Commit -ServiceName $serviceName -DeploymentName $deploymentName

Шаг 5а. Вариант 2. Перенос виртуальных машин в виртуальной сети

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

Примечание

Миграция отдельной виртуальной машины, созданной с помощью классической модели развертывания путем создания новой виртуальной машины Resource Manager с управляемыми дисками с помощью файлов (ОС и данных) виртуальных жестких дисков виртуальной машины.

Примечание

Имя виртуальной сети может отличаться от приведенного на новом портале. На новом портале Azure отображается имя в формате [vnet-name], но фактическое имя виртуальной сети имеет тип Group [resource-group-name] [vnet-name]. Прежде чем начать миграцию, найдите фактическое имя виртуальной сети с помощью команды Get-AzureVnetSite | Select -Property Name или просмотрите его на старом портале Azure.

В следующем примере для имени виртуальной сети задается значение Group [resource-group-name][имя виртуальной сети]. Замените пример имени виртуальной сети именем, возвращенным при выполнении команды в разделе Примечание выше.

    $vnetName = "Group [resource-group-name] [vnet-name]"

Примечание

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

Во-первых, проверьте возможность переноса виртуальной сети с помощью следующей команды.

    Move-AzureVirtualNetwork -Validate -VirtualNetworkName $vnetName

Приведенная ниже команда позволяет отобразить все предупреждения и ошибки, которые мешают миграции. Если проверка выполнена успешно, то можно переходить к шагу подготовки ниже.

    Move-AzureVirtualNetwork -Prepare -VirtualNetworkName $vnetName

Проверьте конфигурацию для подготовленных виртуальных машин с помощью Azure PowerShell или портала Azure. Если вы не готовы к миграции и хотите вернуть предыдущее состояние, используйте следующую команду.

    Move-AzureVirtualNetwork -Abort -VirtualNetworkName $vnetName

Если подготовленная конфигурация вас устраивает, можете продолжить процесс. Выполните следующую команду, чтобы зафиксировать ресурсы.

    Move-AzureVirtualNetwork -Commit -VirtualNetworkName $vnetName

Шаг 5b. Перенос учетной записи хранения

После переноса виртуальных машин, прежде чем переносить учетные записи хранения, выполните предварительные проверки.

Примечание

Если учетная запись хранения не связана с дисками или данными виртуальных машин, можете сразу перейти к разделу "Проверка учетной записи хранения и запуск миграции". Обратите также внимание, что удаление классических дисков, образов виртуальных машин или образов ОС не приводит к удалению исходных файлов виртуальных жестких дисков в учетной записи хранения. Однако оно нарушает аренду этих файлов виртуальных жестких дисков, чтобы их можно было повторно использовать для создания дисков ARM или образов после миграции.

  • Предварительные проверки того, имеют ли переносимые виртуальные машины или учетные записи хранения дисковые ресурсы.

    • Перенесите виртуальные машины, диски которых хранятся в учетной записи хранения.

      Приведенная ниже команда возвращает свойства RoleName и DiskName всех дисков виртуальных машин в учетной записи хранения. RoleName — это имя виртуальной машины, к которой подключен диск. Если эта команда вернула сведения о дисках, убедитесь, что виртуальные машины, к которым подключены эти диски, будут перенесены до переноса учетной записи хранения.

       $storageAccountName = 'yourStorageAccountName'
        Get-AzureDisk | where-Object {$_.MediaLink.Host.Contains($storageAccountName)} | Select-Object -ExpandProperty AttachedTo -Property `
        DiskName | Format-List -Property RoleName, DiskName
      
      
    • Удалите неподключенные диски виртуальных машин, хранящиеся в учетной записи хранения.

      Найдите неподключенные диски виртуальной машины в учетной записи хранения с помощью следующей команды:

          $storageAccountName = 'yourStorageAccountName'
          Get-AzureDisk | where-Object {$_.MediaLink.Host.Contains($storageAccountName)} | Where-Object -Property AttachedTo -EQ $null | Format-List -Property DiskName  
      
      

      Если предыдущая команда возвращает диски, удалите эти диски с помощью следующей команды:

         Remove-AzureDisk -DiskName 'yourDiskName'
      
    • Удалите образы виртуальных машин, хранящиеся в учетной записи хранения.

      Приведенная ниже команда возвращает все образы виртуальных машин с дисками ОС, которые хранятся в учетной записи хранения.

         Get-AzureVmImage | Where-Object { $_.OSDiskConfiguration.MediaLink -ne $null -and $_.OSDiskConfiguration.MediaLink.Host.Contains($storageAccountName)`
                                 } | Select-Object -Property ImageName, ImageLabel
      

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

      
         Get-AzureVmImage | Where-Object {$_.DataDiskConfigurations -ne $null `
                                          -and ($_.DataDiskConfigurations | Where-Object {$_.MediaLink -ne $null -and $_.MediaLink.Host.Contains($storageAccountName)}).Count -gt 0 `
                                         } | Select-Object -Property ImageName, ImageLabel
      

      Удалите все образы виртуальных машин, возвращенные предыдущими командами, с помощью этой команды:

      Remove-AzureVMImage -ImageName 'yourImageName'
      
  • Проверка учетной записи хранения и запуск миграции.

    Подготовьте каждую учетную запись хранения к переносу, используя следующую команду. В этом примере имя учетной записи хранения — myStorageAccount. Замените имя в примере именем своей учетной записи хранения.

        $storageAccountName = "myStorageAccount"
        Move-AzureStorageAccount -Validate -StorageAccountName $storageAccountName
    

    Далее необходимо подготовить учетную запись хранения к миграции.

        $storageAccountName = "myStorageAccount"
        Move-AzureStorageAccount -Prepare -StorageAccountName $storageAccountName
    

    Проверьте конфигурацию для подготовленной учетной записи хранения с помощью Azure PowerShell или портала Azure. Если вы не готовы к миграции и хотите вернуть предыдущее состояние, используйте следующую команду.

        Move-AzureStorageAccount -Abort -StorageAccountName $storageAccountName
    

    Если подготовленная конфигурация вас устраивает, можете продолжить процесс. Выполните следующую команду, чтобы зафиксировать ресурсы.

        Move-AzureStorageAccount -Commit -StorageAccountName $storageAccountName
    

Дальнейшие действия