Crear una máquina virtual a partir de un VHD especializado en una cuenta de almacenamiento

Cree una máquina virtual mediante la asociación de un disco no administrado especializado como disco del sistema operativo mediante PowerShell. Un disco especializado es una copia del VHD de una máquina virtual existente que mantiene las cuentas de usuario, las aplicaciones y otros datos de estado de la máquina virtual original.

Tiene dos opciones:

Opción 1: Cargar un VHD especializado

Puede cargar el VHD de una máquina virtual especializada creada con una herramienta de virtualización local, como Hyper-V, o de una máquina virtual exportada desde otra nube.

Preparación de la VM

Puede cargar un VHD especializado que se haya creado con una máquina virtual local o un VHD exportado desde otra nube. Un disco duro virtual especializado mantiene las cuentas de usuario, las aplicaciones y otros datos de estado de la máquina virtual original. Si tiene previsto usar el VHD como está para crear una nueva VM, asegúrese de completar los pasos siguientes.

  • Preparar de un VHD de Windows para cargar en Azure. No generalice la VM mediante Sysprep.
  • Quite todas las herramientas de virtualización de invitado y los agentes instalados en la VM (es decir, herramientas de VMware).
  • Asegúrese de que la VM se configura para extraer su dirección IP y la configuración de DNS a través de DHCP. Esto garantiza que el servidor obtiene una dirección IP dentro de la red virtual cuando se inicia.

Obtención de la cuenta de almacenamiento

Necesita una cuenta de almacenamiento de Azure para almacenar la imagen de VM cargada. Puede usar una cuenta de almacenamiento existente o crear una nueva.

Para mostrar las cuentas de almacenamiento disponibles, escriba:

Get-AzStorageAccount

Si desea utilizar una cuenta de almacenamiento existente, puede continuar con la sección Carga de la imagen de VM en la cuenta de almacenamiento.

Si necesita crear una nueva cuenta de almacenamiento, siga estos pasos:

  1. Necesita el nombre del grupo de recursos donde se debe crear la cuenta de almacenamiento. Para averiguar todos los grupos de recursos que están en la suscripción, escriba:

    Get-AzResourceGroup
    

    Para crear un grupo de recursos denominado myResourceGroup en la región Oeste de EE. UU. , escriba:

    New-AzResourceGroup -Name myResourceGroup -Location "West US"
    
  2. Cree una cuenta de almacenamiento denominada mystorageaccount en este grupo de recursos con el cmdlet New-AzStorageAccount:

    New-AzStorageAccount -ResourceGroupName myResourceGroup -Name mystorageaccount -Location "West US" `
        -SkuName "Standard_LRS" -Kind "Storage"
    

Carga del VHD en la cuenta de almacenamiento

Use el cmdlet Add-AzVhd para cargar la imagen en un contenedor de su cuenta de almacenamiento. En este ejemplo se carga el archivo myVHD.vhd de "C:\Users\Public\Documents\Virtual hard disks\" para una cuenta de almacenamiento denominada mystorageaccount en el grupo de recursos myResourceGroup. El archivo se colocará en el contenedor llamado mycontainer y el nuevo nombre de archivo será myUploadedVHD.vhd.

$rgName = "myResourceGroup"
$urlOfUploadedImageVhd = "https://mystorageaccount.blob.core.windows.net/mycontainer/myUploadedVHD.vhd"
Add-AzVhd -ResourceGroupName $rgName -Destination $urlOfUploadedImageVhd `
    -LocalFilePath "C:\Users\Public\Documents\Virtual hard disks\myVHD.vhd"

Si se realiza correctamente, obtendrá una respuesta similar a la siguiente:

MD5 hash is being calculated for the file C:\Users\Public\Documents\Virtual hard disks\myVHD.vhd.
MD5 hash calculation is completed.
Elapsed time for the operation: 00:03:35
Creating new page blob of size 53687091712...
Elapsed time for upload: 01:12:49

LocalFilePath           DestinationUri
-------------           --------------
C:\Users\Public\Doc...  https://mystorageaccount.blob.core.windows.net/mycontainer/myUploadedVHD.vhd

Dependiendo de la conexión de red y del tamaño del archivo VHD, este comando puede tardar algún tiempo en completarse.

Opción 2: copiar el VHD de una máquina virtual de Azure existente

Puede copiar un VHD a otra cuenta de almacenamiento para que se use al crear una máquina virtual duplicada.

Antes de empezar

Asegúrese de todo esto:

  • Tener información sobre las cuentas de almacenamiento de origen y de destino. Para la máquina virtual de origen, necesitará los nombres del contenedor y la cuenta de almacenamiento. Normalmente, el nombre del contenedor será vhds. También debe tener una cuenta de almacenamiento de destino. Si aún no tiene una, puede crearla mediante el portal (>Agregar todos los servicios Storage cuentas>) o mediante el cmdlet New-AzStorageAccount.
  • Tener descargada e instalada la herramienta AzCopy.

Desasignación de la máquina virtual

Desasigne la máquina virtual para liberar espacio en el VHD que se va a copiar.

  • Portal: haga clic en MáquinasvirtualesmyVM>> Stop
  • Powershell: use Stop-AzVM para detener (desasignar) la máquina virtual denominada myVM en el grupo de recursos myResourceGroup.
Stop-AzVM -ResourceGroupName myResourceGroup -Name myVM

El estado de la máquina virtual en Azure Portal cambia de Detenido a Detenido (desasignado) .

Obtención de las URL de las cuentas de almacenamiento

Necesita las URL de las cuentas de almacenamiento de origen y de destino. Las direcciones URL se verán así: https://<storageaccount>.blob.core.windows.net/<containerName>/. Si ya conoce el nombre de la cuenta de almacenamiento y el contenedor, puede reemplazar simplemente la información entre corchetes para crear la dirección URL.

Puede usar Azure Portal o Azure PowerShell para obtener la URL:

  • Portal: haga clic en > para ir a Todos los servicios>Cuentas de almacenamiento>cuenta de almacenamiento>Blobs. El archivo VHD de origen probablemente está en el contenedor vhds. Haga clic en la opción Propiedades del contenedor y copie el texto etiquetado como Dirección URL. Necesitará las direcciones URL de los contenedores de origen y de destino.
  • Powershell: use Get-AzVM para obtener la información de la máquina virtual denominada myVM en el grupo de recursos myResourceGroup. En los resultados, busque la sección Perfil de almacenamiento del URI del VHD. La primera parte del URI es la dirección URL al contenedor, y la última, el nombre del VHD del sistema operativo de la máquina virtual.
Get-AzVM -ResourceGroupName "myResourceGroup" -Name "myVM"

Obtención de las claves de acceso de almacenamiento

Busque las claves de acceso de las cuentas de almacenamiento de origen y de destino. Para más información acerca de las claves de acceso, consulte Acerca de las cuentas de almacenamiento de Azure.

  • Portal: haga clic en Todos los servicios>Cuentas de almacenamiento>cuenta de almacenamiento>Claves de acceso. Copie la clave etiquetada como clave1.
  • Powershell: use Get-AzStorageAccountKey para obtener la clave de almacenamiento de la cuenta de almacenamiento mystorageaccount en el grupo de recursos myResourceGroup. Copie la clave etiquetada como clave1.
Get-AzStorageAccountKey -Name mystorageaccount -ResourceGroupName myResourceGroup

Copia del VHD

Puede copiar archivos entre cuentas de almacenamiento con AzCopy. Para el contenedor de destino, si el contenedor especificado no existe, se creará automáticamente.

Para usar AzCopy, abra una ventana de comandos en el equipo local y navegue hasta la carpeta donde está instalada dicha herramienta. Será similar a C:\Archivos de programa (x86)\Microsoft SDKs\Azure\AzCopy.

Para copiar todos los archivos dentro de un contenedor, use el modificador /S. Esto puede utilizarse para copiar el VHD del sistema operativo y todos los discos de datos si están en el mismo contenedor. En este ejemplo se muestra cómo copiar todos los archivos del contenedor mysourcecontainer de la cuenta de almacenamiento mysourcestorageaccount en el contenedor mydestinationcontainer de la cuenta de almacenamiento mydestinationstorageaccount. Reemplace los nombres de las cuentas de almacenamiento y los contenedores por los suyos. Reemplace <sourceStorageAccountKey1> y <destinationStorageAccountKey1> por sus propias claves.

AzCopy /Source:https://mysourcestorageaccount.blob.core.windows.net/mysourcecontainer `
    /Dest:https://mydestinationatorageaccount.blob.core.windows.net/mydestinationcontainer `
    /SourceKey:<sourceStorageAccountKey1> /DestKey:<destinationStorageAccountKey1> /S

Si solo quiere copiar un VHD específico en un contenedor con varios archivos, también puede especificar el nombre de archivo con el modificador /Pattern. En este ejemplo, solo se copiará el archivo denominado "myFileName.vhd".

AzCopy /Source:https://mysourcestorageaccount.blob.core.windows.net/mysourcecontainer `
  /Dest:https://mydestinationatorageaccount.blob.core.windows.net/mydestinationcontainer `
  /SourceKey:<sourceStorageAccountKey1> /DestKey:<destinationStorageAccountKey1> `
  /Pattern:myFileName.vhd

Cuando haya finalizado, obtendrá un mensaje parecido a este:

Finished 2 of total 2 file(s).
[2016/10/07 17:37:41] Transfer summary:
-----------------
Total files transferred: 2
Transfer successfully:   2
Transfer skipped:        0
Transfer failed:         0
Elapsed time:            00.00:13:07

Solución de problemas

  • Cuando use AZCopy, si ve el error El servidor no pudo autenticar la solicitud, asegúrese de que el valor del encabezado de autenticación tenga el formato correcto, incluida la firma, y, si usa la clave 2 o la clave de almacenamiento secundaria, pruebe a utilizar la clave de almacenamiento principal o 1.

Creación de la máquina virtual

Debe crear recursos de red y otros recursos de máquina virtual para que los use la nueva máquina virtual.

Creación de la subred y la red virtual

Cree la red virtual y la subnet de la red virtual.

  1. Cree la subred. En este ejemplo se crea una subred llamada mySubNet, en el grupo de recursos myResourceGroup y se establece el prefijo de la dirección de subred en 10.0.0.0/24.

    $rgName = "myResourceGroup"
    $subnetName = "mySubNet"
    $singleSubnet = New-AzVirtualNetworkSubnetConfig -Name $subnetName -AddressPrefix 10.0.0.0/24
    
  2. Cree la red virtual. En este ejemplo se establece el nombre de la red virtual en myVnetName, la ubicación en Oeste de EE. UU. y el prefijo de dirección de la red virtual en 10.0.0.0/16.

    $location = "West US"
    $vnetName = "myVnetName"
    $vnet = New-AzVirtualNetwork -Name $vnetName -ResourceGroupName $rgName -Location $location `
        -AddressPrefix 10.0.0.0/16 -Subnet $singleSubnet
    

    Creación del grupo de seguridad de red y las reglas de RDP

    Para poder iniciar sesión en la máquina virtual mediante RDP, debe tener una regla de seguridad que permita el acceso RDP en el puerto 3389. Como el disco duro virtual de la nueva máquina virtual se creó a partir de una máquina virtual especializada existente, después de crear la máquina virtual puede usar una cuenta existente de la máquina virtual de origen que tenga permiso para iniciar sesión mediante RDP. Esto se debe completar antes de crear la interfaz de red con la que estará asociado.
    En este ejemplo se establece el nombre de NSG en myNsg y el nombre de la regla de RDP en myRdpRule.

$nsgName = "myNsg"

$rdpRule = New-AzNetworkSecurityRuleConfig -Name myRdpRule -Description "Allow RDP" `
    -Access Allow -Protocol Tcp -Direction Inbound -Priority 110 `
    -SourceAddressPrefix Internet -SourcePortRange * `
    -DestinationAddressPrefix * -DestinationPortRange 3389
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $rgName -Location $location `
    -Name $nsgName -SecurityRules $rdpRule
	

Para más información sobre puntos de conexión y reglas NSG, consulte Apertura de puertos para una máquina virtual en Azure mediante PowerShell.

Creación de una dirección IP pública y una NIC

Para permitir la comunicación con la máquina virtual en la red virtual, necesitará una dirección IP pública y una interfaz de red.

  1. Cree la dirección IP pública. En este ejemplo, el nombre de la dirección IP pública se establece en myIP.

    $ipName = "myIP"
    $pip = New-AzPublicIpAddress -Name $ipName -ResourceGroupName $rgName -Location $location `
        -AllocationMethod Dynamic
    
  2. Cree la NIC. En este ejemplo, el nombre de la NIC se establece en myNicName. Este paso también asocia el grupo de seguridad de red que creó anteriormente con esta NIC.

    $nicName = "myNicName"
    $nic = New-AzNetworkInterface -Name $nicName -ResourceGroupName $rgName `
     -Location $location -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id
    

Establecimiento del nombre de VM y el tamaño

Este ejemplo establece el nombre de VM en "myVM" y el tamaño de VM en "Standard_A2".

$vmName = "myVM"
$vmConfig = New-AzVMConfig -VMName $vmName -VMSize "Standard_A2"

Incorporación de la NIC

$vm = Add-AzVMNetworkInterface -VM $vmConfig -Id $nic.Id

Configuración del disco del SO

  1. Establezca el URI para el VHD que ha cargado o copiado. En este ejemplo, el archivo de VHD denominado myOsDisk.vhd se mantiene en una cuenta de almacenamiento llamada myStorageAccount en un contenedor denominado myContainer.

    $osDiskUri = "https://myStorageAccount.blob.core.windows.net/myContainer/myOsDisk.vhd"
    
  2. Agregue el disco del sistema operativo. En este ejemplo, cuando se crea el disco del SO, el término "osDisk" se anexa al nombre de la VM para crear el nombre del disco de SO. En este ejemplo también se especifica que este VHD basado en Windows debería asociarse a la VM como el disco del SO.

    $osDiskName = $vmName + "osDisk"
    $vm = Set-AzVMOSDisk -VM $vm -Name $osDiskName -VhdUri $osDiskUri -CreateOption attach -Windows
    

Opcional: si tiene discos de datos que necesitan estar conectados a la VM, agregue los discos de datos mediante el uso de las direcciones URL de VHD de datos y el número de unidad lógica (LUN) correspondiente.

$dataDiskName = $vmName + "dataDisk"
$vm = Add-AzVMDataDisk -VM $vm -Name $dataDiskName -VhdUri $dataDiskUri -Lun 1 -CreateOption attach

Cuando se use una cuenta de almacenamiento, las direcciones URL de los discos de datos y del sistema operativo tienen un formato similar al siguiente: https://StorageAccountName.blob.core.windows.net/BlobContainerName/DiskName.vhd. Para encontrarla en el portal, diríjase al contenedor de almacenamiento de destino, haga clic en el VHD de datos o del sistema operativo que se ha copiado y copie el contenido de la dirección URL.

Finalización de la máquina virtual

Cree la máquina virtual con las configuraciones que acaba de crear.

#Create the new VM
New-AzVM -ResourceGroupName $rgName -Location $location -VM $vm

Si este comando es correcto, verá un resultado similar al siguiente:

RequestId IsSuccessStatusCode StatusCode ReasonPhrase
--------- ------------------- ---------- ------------
                         True         OK OK   

Comprobación de que se creó la máquina virtual

Debería ver la máquina virtual recién creada en Azure Portal, en Todos los servicios>Máquinas virtuales o mediante los comandos de PowerShell siguientes:

$vmList = Get-AzVM -ResourceGroupName $rgName
$vmList.Name

Pasos siguientes

Inicie sesión en la nueva máquina virtual. Para más información, consulte Conexión a una máquina virtual de Azure donde se ejecuta Windows Server e inicio de sesión en ella.