Migración de recursos de IaaS del modelo clásico al de Azure Resource Manager mediante PowerShell

Se aplica a: ✔️ Máquinas virtuales Linux ✔️ Máquinas virtuales Windows

Importante

En la actualidad, aproximadamente el 90 % de las VM de IaaS usan Azure Resource Manager. Desde el 28 de febrero de 2020, las máquinas virtuales clásicas han quedado en desuso y se retirarán por completo el 6 de septiembre de 2023. Obtenga más información sobre esta caída en desuso y cómo se va a ver afectado.

En estos pasos se describe cómo utilizar los comandos de Azure PowerShell para migrar los recursos de infraestructura como servicio (IaaS) desde el modelo de implementación clásica al modelo de implementación de Azure Resource Manager.

Si se quiere, también se pueden migrar recursos mediante la CLI de Azure.


Este es un diagrama de flujo para identificar el orden en que tienen que ejecutarse los pasos durante un proceso de migración.

Screenshot that shows the migration steps

Paso 1: Planear la migración

Estos son algunos de los procedimientos recomendados a la hora de evaluar si se migran recursos de IaaS desde el modelo clásico a Resource Manager:

  • Lea el artículo sobre qué características y configuraciones se admiten y cuáles no. Si tiene máquinas virtuales que usan configuraciones o características no admitidas, espere a que se anuncie dicha compatibilidad. De manera alternativa, si se ajusta a sus necesidades, quite esa característica o salga de esa configuración para habilitar la migración.
  • Si tiene actualmente scripts automatizados que implementan la infraestructura y las aplicaciones, intente crear una configuración de prueba similar usando esos scripts para la migración. También puede configurar entornos de ejemplo mediante el Portal de Azure.

Importante

Las puertas de enlace de aplicaciones no se admiten actualmente para realizar migraciones del modelo clásico al de Resource Manager. Si se quiere migrar una red virtual con una instancia de Application Gateway, quite la puerta de enlace antes de ejecutar una operación de preparación para mover la red. Después, cuando termine el proceso de migración, vuelva a conectar la puerta de enlace en Azure Resource Manager.

Las puertas de enlace de Azure ExpressRoute que se conectan con circuitos de ExpressRoute en otra suscripción no se pueden migrar automáticamente. En esos casos, quite la puerta de enlace de ExpressRoute, migre la red virtual y vuelva a crear la puerta de enlace. Para obtener más información, vea Migración de circuitos de ExpressRoute y las redes virtuales asociadas del modelo de implementación clásica al de Resource Manager.

Paso 2: Instalar la versión más reciente de Azure PowerShell

Hay dos opciones principales para instalar Azure PowerShell: Galería de PowerShell o Instalador de plataforma web (WebPI). WebPI recibe actualizaciones mensuales. La galería de PowerShell recibe actualizaciones de forma continua. Este artículo se basa en los cmdlets de la versión 2.1.0 de Azure PowerShell.

Para ver las instrucciones de instalación, consulte Cómo instalar y configurar Azure PowerShell.

Paso 3: Asegurarse de que es administrador de la suscripción

Para realizar esta migración, debe estar agregado como coadministrador de la suscripción en Azure Portal.

  1. Inicie sesión en Azure Portal.
  2. En el menú de Central, seleccione Suscripción. Si no lo ve, haga clic en Todos los servicios.
  3. Busque la entrada de la suscripción adecuada y después examine el campo MI ROL. En el caso de un coadministrador, el valor debe ser Administrador de cuenta.

Si no puede agregar un coadministrador, póngase en contacto con un administrador del servicio o coadministrador de la suscripción para que le agreguen.

Paso 4: Establecer la suscripción y el registro para la migración

En primer lugar, inicie un símbolo del sistema de PowerShell. Para la migración, configure el entorno para el modelo clásico y el de Resource Manager.

Inicie sesión en su cuenta para el modelo de Resource Manager.

    Connect-AzAccount

Puede encontrar las suscripciones disponibles ejecutando el siguiente comando:

    Get-AzSubscription | Sort Name | Select Name

Establezca la suscripción de Azure para la sesión actual. En este ejemplo se establece el nombre de la suscripción predeterminado en My Azure Subscription (Mi suscripción de Azure). Reemplace el nombre de la suscripción de ejemplo por el suyo propio.

    Select-AzSubscription –SubscriptionName "My Azure Subscription"

Nota:

El registro es un paso que solo se realiza una vez, pero debe hacerlo antes de intentar la migración. Si no se registra, recibirá el siguiente mensaje de error:

BadRequest: La suscripción no está registrada para la migración.

Regístrese con el proveedor de recursos de migración ejecutando el comando siguiente:

    Register-AzResourceProvider -ProviderNamespace Microsoft.ClassicInfrastructureMigrate

Espere cinco minutos a que finalice el registro. Compruebe el estado de la aprobación con el comando siguiente:

    Get-AzResourceProvider -ProviderNamespace Microsoft.ClassicInfrastructureMigrate

Asegúrese de que RegistrationState sea Registered antes de continuar.

Antes de cambiar al modelo de implementación clásico, asegúrese de tener suficientes unidades vCPU de máquina virtual de Azure Resource Manager en la región de Azure de su red virtual o implementación actual. Puede usar el siguiente comando de PowerShell para comprobar la cantidad de vCPU que tiene actualmente en Azure Resource Manager. Para obtener más información sobre las cuotas de vCPU, vea Límites y Azure Resource Manager.

En este ejemplo se comprueba la disponibilidad en la región del oeste de EE. UU. Reemplace el nombre de la región de ejemplo por el suyo propio.

    Get-AzVMUsage -Location "West US"

Ahora inicie sesión en su cuenta para el modelo de implementación clásico.

    Add-AzureAccount

Puede encontrar las suscripciones disponibles ejecutando el siguiente comando:

    Get-AzureSubscription | Sort SubscriptionName | Select SubscriptionName

Establezca la suscripción de Azure para la sesión actual. En este ejemplo se establece la suscripción predeterminada en My Azure Subscription (Mi suscripción de Azure). Reemplace el nombre de la suscripción de ejemplo por el suyo propio.

    Select-AzureSubscription –SubscriptionName "My Azure Subscription"

Paso 5: Ejecutar comandos para migrar los recursos de IaaS

Nota

Todas las operaciones que se describen aquí son idempotentes. Si tiene un problema diferente de una función no admitida o un error de configuración, se recomienda que vuelva a intentar la operación de preparación, anulación o confirmación. La plataforma intenta nuevamente la acción.

Paso 5a: Opción 1: Migración de máquinas virtuales en un servicio en la nube (no en una red virtual)

Obtenga la lista de servicios en la nube con el comando siguiente. Después, seleccione el servicio en la nube que se quiere migrar. Si las máquinas virtuales del servicio en la nube están en una red virtual o si tienen roles web o de trabajo, el comando devolverá un mensaje de error.

    Get-AzureService | ft Servicename

Obtenga el nombre de la implementación del servicio en la nube. En este ejemplo, el nombre de servicio es My Service (Mi servicio). Reemplace el nombre del servicio de ejemplo por el suyo propio.

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

Prepare las máquinas virtuales del servicio en la nube para la migración. Tiene dos opciones para elegir.

  • Opción 1: Migrar las máquinas virtuales a una red virtual creada en una plataforma

    Primero, valide que puede migrar el servicio en la nube con los comandos siguientes:

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

    El comando siguiente muestra cualquier advertencia y error que bloquee la migración. Si los mensajes de validación no contienen un mensaje de error de tipo, puede proceder con el paso de preparación.

    Move-AzureService -Prepare -ServiceName $serviceName `
        -DeploymentName $deploymentName -CreateNewVirtualNetwork
    
  • Opción 2: Migrar a una red virtual existente en el modelo de implementación de Resource Manager

    En este ejemplo se establece el nombre del grupo de recursos en myResourceGroup, el nombre de red virtual en myVirtualNetwork y el nombre de la subred en mySubNet. Reemplace los nombres del ejemplo por los nombres de sus propios recursos.

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

    En primer lugar, valide que puede migrar la red virtual con el comando siguiente:

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

    El comando siguiente muestra cualquier advertencia y error que bloquee la migración. Si los mensajes de validación no contienen errores, puede continuar con el siguiente paso de preparación:

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

Cuando la operación de preparación finalice correctamente con cualquiera de las opciones anteriores, consulte el estado de la migración de las máquinas virtuales. Asegúrese de que tienen el estado Prepared.

En este ejemplo se establece el nombre de la máquina virtual en myVM. Reemplace el nombre del ejemplo por su propio nombre de la máquina virtual.

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

Compruebe la configuración de los recursos preparados mediante PowerShell o el Portal de Azure. Si no está preparado para la migración y quiere volver al estado anterior, utilice el comando siguiente:

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

Si la configuración preparada parece correcta, puede continuar y confirmar los recursos mediante el siguiente comando:

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

Paso 5a: Opción 2: Migración de máquinas virtuales en una red virtual

Para migrar máquinas virtuales de una red virtual, migre la red virtual. Las máquinas virtuales se migran automáticamente con la red virtual. Seleccione la red virtual que quiere migrar.

Nota

Migre una sola máquina virtual creada mediante el modelo de implementación clásico creando una nueva máquina virtual de Resource Manager con Managed Disks mediante los archivos de VHD (SO y datos) de la máquina virtual.

Nota

El nombre de red virtual podría ser diferente del que se muestra en el portal nuevo. El nuevo Azure Portal muestra el nombre como [vnet-name] pero el nombre de red virtual real es de tipo Group [resource-group-name] [vnet-name]. Antes de empezar la migración, busque el nombre real de la red virtual con el comando Get-AzureVnetSite | Select -Property Name o consúltelo en el antiguo Azure Portal.

En este ejemplo se establece el nombre de la red virtual en Grupo [resource-group-name][vnet-name]. Reemplace el nombre de la red virtual de ejemplo por el que se devolvió al ejecutar el comando en la sección Nota anterior.

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

Nota

Si la red virtual contiene roles web o de trabajo, o bien máquinas virtuales con configuraciones no admitidas, recibe un mensaje de error de validación.

En primer lugar, valide que puede migrar la red virtual con el comando siguiente:

    Move-AzureVirtualNetwork -Validate -VirtualNetworkName $vnetName

El comando siguiente muestra cualquier advertencia y error que bloquee la migración. Si la validación se realiza correctamente, podrá continuar al paso de preparación siguiente:

    Move-AzureVirtualNetwork -Prepare -VirtualNetworkName $vnetName

Compruebe la configuración de las máquinas virtuales preparadas mediante Azure PowerShell o Azure Portal. Si no está preparado para la migración y quiere volver al estado anterior, utilice el comando siguiente:

    Move-AzureVirtualNetwork -Abort -VirtualNetworkName $vnetName

Si la configuración preparada parece correcta, puede continuar y confirmar los recursos mediante el siguiente comando:

    Move-AzureVirtualNetwork -Commit -VirtualNetworkName $vnetName

Paso 5b: Migración de una cuenta de almacenamiento

Cuando haya terminado de migrar las máquinas virtuales, realice las comprobaciones siguientes de requisitos previos antes de migrar las cuentas de almacenamiento.

Nota

Si su cuenta de almacenamiento no tiene discos asociados ni datos de máquina virtual, puede ir directamente a la sección "Validación de las cuentas de almacenamiento y comienzo de la migración". Tenga en cuenta también que la eliminación de los discos clásicos, las imágenes de máquina virtual o las imágenes de sistema operativo no quita los archivos de VHD de origen de la cuenta de almacenamiento. Sin embargo, interrumpe la concesión en esos archivos de VHD para que se puedan volver a usar para crear discos o imágenes de ARM después de la migración.

  • Comprobación de requisitos previos si ha migrado cualquier máquina virtual o la cuenta de almacenamiento tiene recursos de disco:

    • Migración de máquinas virtuales cuyos discos se almacenan en la cuenta de almacenamiento.

      El comando siguiente devuelve las propiedades RoleName y DiskName de todos los discos de máquinas virtuales en la cuenta de almacenamiento. RoleName es el nombre de la máquina virtual a la que está conectado el disco. Si este comando devuelve discos, asegúrese de que las máquinas virtuales a las que están conectados estos discos se han migrado antes de migrar la cuenta de almacenamiento.

       $storageAccountName = 'yourStorageAccountName'
        Get-AzureDisk | where-Object {$_.MediaLink.Host.Contains($storageAccountName)} | Select-Object -ExpandProperty AttachedTo -Property `
        DiskName | Format-List -Property RoleName, DiskName
      
      
    • Eliminación de discos de máquinas virtuales sin adjuntar almacenados en la cuenta de almacenamiento.

      Busque discos de máquinas virtuales sin adjuntar en la cuenta de almacenamiento con el comando siguiente:

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

      Si el comando anterior devuelve discos, elimínelos con el comando siguiente:

         Remove-AzureDisk -DiskName 'yourDiskName'
      
    • Eliminación de imágenes de máquinas virtuales almacenadas en la cuenta de almacenamiento.

      El comando siguiente devuelve todas las imágenes de máquinas virtuales con los discos de SO almacenados en la cuenta de almacenamiento.

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

      El comando siguiente devuelve todas las imágenes de máquinas virtuales con discos de datos almacenados en la cuenta de almacenamiento.

      
         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
      

      Elimine todas las imágenes de máquinas virtuales que se han devuelto usando este comando:

      Remove-AzureVMImage -ImageName 'yourImageName'
      
  • Validación de las cuentas de almacenamiento y comienzo de la migración.

    Valide cada cuenta de almacenamiento para la migración mediante el siguiente comando. En este ejemplo, el nombre de cuenta de almacenamiento es myStorageAccount. Reemplace el nombre de ejemplo por el nombre de su propia cuenta de almacenamiento.

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

    El paso siguiente consiste en preparar la cuenta de almacenamiento para la migración.

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

    Compruebe la configuración de la cuenta de almacenamiento preparada mediante Azure PowerShell o Azure Portal. Si no está preparado para la migración y quiere volver al estado anterior, utilice el comando siguiente:

        Move-AzureStorageAccount -Abort -StorageAccountName $storageAccountName
    

    Si la configuración preparada parece correcta, puede continuar y confirmar los recursos mediante el siguiente comando:

        Move-AzureStorageAccount -Commit -StorageAccountName $storageAccountName
    

Pasos siguientes