En ocasiones se hace necesario importar en Azure una imagen de una VM externa, ya sea de un Hyper-V local... o de otra región o entre diferentes cuentas de Azure.... (por ejemplo para ir empalmando los free trials de $200 )

Lo primer que haremos es exportar la VM en cuestión (si ya tienes la imagen VHD puedes saltarte esta sección y continuar en el punto 2), si es en local ya tendremos la imagen VHD, pero si está en otra cuenta de azure tenemos que activar la exportación para generar un enlace SAS (Shared Access Signature, que permite delegar acceso a recursos de tu Aure storage):

1. Exportar una imagen de una VM de Azure

  • Vamos a Máquinas Virtuales y hacemos click en la VM que queramos exportar:



  • Entramos en el apartado Discos y hacemos click en el disco que queremos exportar, en este caso de ejemplo, WS1-vm_hdd_datos:



  • Una vez estamos dentro del disco, vamos a la opción Exportación del disco , click en Generar dirección URL , el tiempo de expiración lo podemos dejar al valor por defecto:



  • Esto generará una URL a través de la cual podemos descargar la imagen desde otra máquina, o cloud, o donde sea (con un wget o como origen de una copia... que veremos mas adelante), o descargar la imagen en local haciendo click en Descargar el archivo VHD (por si quisiésemos montar la imagen en una VM local en nuestro PC o en un Hyper-V local...). Como vamos a copiar la imagen a otra cuenta de Azure copiaremos la URL al portapapeles:




Una vez tenemos la URL de la imagen VHD, vamos a importarla en Azure.

2. Importar imagen VHD en Azure
Resumo los pasos de la documentación oficial:

Azure a día de hoy no permite importar imagenes a través de la GUI, hay que hacerlo por CLI (podéis usar la consola que trae el propio panel de Azure llamada Cloud Shell):

Primero crearemos una imagen vacía con el flag de upload activado, y con el tamaño exacto de la imagen que vayamos a importar. Para mi ejemplo es una imagen de 200Gb (podéis usar una convertido inline para pasar de Gbs a Bytes...)
Código:
az disk create -n <yourdiskname> -g <yourresourcegroupname> -l <yourregion> --os-type Linux --for-upload --upload-size-bytes 34359738880 --sku standard_lrs
Mi ejemplo de 200Gb:
Código:
az disk create -n vmtest-disk1 -g luk-resource-group -l westeurope --os-type Linux --for-upload --upload-size-bytes 214748365312  --sku standardssd_lrs
*El último flag es el tipo de disco, permite tanto standard_lrs para HDD, como premium_LRS o standardssd_lrs para los SSDs

Ahora le daremos al disco permisos para escribir sobre el:
Código:
az disk grant-access -n <yourdiskname> -g <yourresourcegroupname> --access-level Write --duration-in-seconds 86400
Mi ejemplo:
Código:
az disk grant-access -n vmtest-disk1 -g luk-resource-group --access-level Write --duration-in-seconds 86400
Este comando nos devolverá una URL SAS para escritura sobre el disco.

Ahora importaremos la imagen VHD al disco vacío que hemos creado:
Si tenemos una imagen en local podemos hacerlo con:
Código:
AzCopy.exe copy "c:\carpetaejemplo\mydisk.vhd" "SAS-URL-ESCRITURA-NUEVO-DISCO" --blob-type PageBlob
Pero en caso de querer pasar la imagen entre cuentas usaremos la URL SAS que creamos al principio (cuando exportamos el disco origen), y haremos la copia desde el CLI de Azure (Cloud Shell):
Código:
azcopy copy "SAS_URL_ORIGEN" "SAS_URL_DESTINO"
El origen será la URL SAS que creamos al principio (cuando exportamos el disco origen).
El destino será la URL SAS que nos devolvió el comando de az disk grant-access.

Nota:Puede devolver un error de que la imagen destino no tiene el mismo tamaño que la que creamos vacía, os dará una pista del tamaño exacto que ha de tener el disco en caso de haberlo hemo con el valor incorrecto.

Una vez termine la copia tenemos que revocar el permiso de escritura sobre el disco creado para que sea posible conectarlo a una VM:
Código:
az disk revoke-access -n <yourdiskname> -g <yourresourcegroupname>
Mi ejemplo:
Código:
az disk revoke-access -n vmtest-disk1 -g luk-resource-group
Ya podemos ir a la sección de Discos, seleccionar el disco nuevo que hemos creado, y crear una VM desde ahi con el disco ya conectado

Fuentes:
https://docs.microsoft.com/en-us/azu...i#upload-a-vhd
https://blog.ragasys.es/azure-maquinas-virtuales-exportar-discos-de-azure-a-discos-vhd