Dave Rendón Microsoft Azure MVP, embracing and fostering tech intensity to benefit society and thrive in a digital world.

Mover VHD hacia Azure usando PowerShell ARM 5.1

3 min read

Mover VHD hacia Azure

Este artículo es una guía para cargar/mover un VHD de una VM generalizada hacia Azure usando PowerShell con el módulo ARM 5.1. Luego en el portal de Azure voy a crear una imagen desde el VHD, esto nos ayudará a poder provisionar VMs desde esa imagen.

**English version: Migrate VHD to Azure and create VM image using PowerShell ARM 5.x

El Problema

Este artículo se proporciona como una solución alternativa paraa provisionar una máquina virtual del KEMP LoadMaster en una suscripción de Azure con Enterprise Agreement en caso que existan limitantes para por la región para provisionar el LoadMaster desde el marketplace.

Notas:
Puedes mover un VHD exportado desde una herramienta de virtualización local o desde otra nube.

El uso de los discos administrados para la nueva máquina virtual simplifica la administración de la máquina virtual y proporciona una mejor disponibilidad cuando la máquina virtual se coloca en un conjunto de disponibilidad(Av. Set).

Solución: Mover VHD hacia Azure usando PowerShell

Pre-requisitos:

  • Suscripción activa de Azure
  • Azure Powershell 5.x
  • VHD del KEMP LoadMaster – Descarga
  • Un grupo de recursos previamente provisionado en la suscripción de Azure
  • Valide que el VHD sea de tamaño fijo(fixed size), lo que significa que no puede ser de 10.1GB o 10.01GB en ese caso, expanda el tamaño del disco a 11GB usando el hyper-v manager

Pasos.

  1. Vamos a ir a abrir Powershell en nuestro equipo local y acceder a nuestra suscripción de Azure a través del comando: “AzureRM.Profile\Login-AzureRmAccount

move-vhd-to-Azure-daverendon-wikiazure

2. Para simplicar el proceso vamos a almancenar 2 variables: El nombre de la suscripción de Azure y el ID de la suscripción de Azure ejecutando los siguientes comandos (reemplaza el nombre y ID de tu suscripción):


$Subscription = "Your Subscription name"
$SubscriptionId = "4d278909-xxxx-xxxx-b346-6c7922e8cd8e"

move-vhd-to-Azure-2-daverendon-wikiazure

3. Vamos a seleccionar la suscripción actual como Default, para eso ejecutamos el siguiente comando:

"Get-AzureRmSubscription -SubscriptionId "4d278909-xxxx-xxxx-xxxx-xxxxxxxx" -TenantId "683bfafa-xxxx-xxxx-a787-xxxxxxxxx" | Set-AzureRmContext"

4. Procedemos a crear una cuenta de almancenamiento / Storage Account a través del siguiente comando:


$storageAccount = New-AzureRmStorageAccount -ResourceGroupName "DRendon" `
-Name "kempvdhtestingdr" `
-SkuName Standard_LRS `
-Location "eastus" 
$ctx = $storageAccount.Context

https://wikiazurerep.azureedge.net/wp-content/uploads/2019/01/04-move-vhd-to-Azure-DaveRendon-wikiazure.jpg

5. Ahora vamos a generar el contenedor para nuestro blob storage:

$containerName = "kempvdhcontainerdr"
new-azurestoragecontainer -Name $containerName -Context $ctx -Permission blob

6. Almacenamos en una variable la dirección local de nuestro VHD:

$localPath = 'C:\Users\daver\Downloads\VLM-trial\LoadMaster-VLM-Microsoft-HyperV\vlm2.vhd'

7. Asignamos una variable para nombrar nuestro VHD:

$vhdName = 'kempVhdtest.vhd'

8. Procedemos a cargar el VHD hacia la suscripción de Azure:

$urlOfUploadedImageVhd = ('https://kempvdhtestingdr.blob.core.windows.net/kempvdhcontainerdr' + '/' + $vhdName)
Add-AzureRmVhd -ResourceGroupName "DRendon" -Destination $urlOfUploadedImageVhd `
-LocalFilePath $localPath -OverWrite

La carga del VHD comenzará dependiendo del tamaño podría tomar 2 – 3 minutos:

06-move-vhd-to-Azure-DaveRendon-wikiazure

Una vez que la carga ha sido exitosa deberás ver algo así:

https://wikiazurerep.azureedge.net/wp-content/uploads/2019/01/07-move-vhd-to-Azure-DaveRendon-wikiazure.jpg

9. Ahora vamos  a crear un objeto de imagen y luego lo almacenamos en la variable $imageConfig

$location = 'EastUS'
$imageConfig = New-AzureRmImageConfig -Location $location

13-move-vhd-to-Azure-DaveRendon-wikiazure

10. Por último vamos a establecer las propiedades del disco del sistema operativo en ul objeto de la imagen usando el comando Set-AzureRmImageOsDisk y crear la imagen:

$imageConfig = Set-AzureRmImageOsDisk -Image $imageConfig -OsType Windows -OsState Generalized `
-BlobUri $urlOfUploadedImageVhd 

$image = New-AzureRmImage -ImageName $imageName -ResourceGroupName $resourceGroupName -Image $imageConfig

Creando la imagen de la Máquina Virtual en Azure

Otra opción es crear la imagen a través del portal de Azure.

  1. Una vez que hemos completado la carga del VHD en Azure, vamos a la cuenta de almacenamiento a verificar que nuestro VHD está listado correctamente:

08-move-vhd-to-Azure-DaveRendon-wikiazure

2. Vamos a crear nuevo recurso > buscar imagen > click en imagen

09-move-vhd-to-Azure-DaveRendon-wikiazure

3. Proporciona los parámetros requeridos para provisionar la imagen desdel el VHD como sigue:

10-move-vhd-to-Azure-DaveRendon-wikiazure

Verás una notificación si la imagen se creó correctamente:

11-move-vhd-to-Azure-DaveRendon-wikiazure

Ahora podrás crear las máquinas virtuales a partir de esta imagen cuando lo requieras:

12-move-vhd-to-Azure-DaveRendon-wikiazure

14-move-vhd-to-Azure-DaveRendon-wikiazure

Script completo sobre la migración del VHD con Azure Powershell 5.x: DESCARGA

AzureRM.Profile\Login-AzureRmAccount
$subscriptionName = "Your Subscription Name"
$subscriptionId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$tenantId ="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$resourceGroupName = 'DRendon'
$location = 'EastUS'
$vhdName = 'kemp360central-v1.25.vhd'
$imageName = 'kempcentral25'
$containerName = "kempcentraldrtestcontainer"
$storageAccountName = "kempcentraldrtest"

Select-AzureRmSubscription -SubscriptionId $subscriptionId

#Select your default subscription on ARM
Get-AzureRmSubscription -SubscriptionId $subscriptionId -TenantId $tenantId | Set-AzureRmContext

#create new storage account
$storageAccount = New-AzureRmStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName -SkuName Standard_LRS -Location $location
$ctx = $storageAccount.Context

#create container

new-azurestoragecontainer -Name $containerName -Context $ctx -Permission blob

#set the local path from the vhd
$localPath = 'C:\Users\daver\Downloads\kemp360central\kemp360central-v1.25.vhd'

# set the url of the image and move the vhd, also use the -overwrite option since process might fail sporadically
# -overwrite solves the error Add-AzureRmVhd : The pipeline was not run because a pipeline is already running.
# Pipelines cannot be run concurrently
$urlOfUploadedImageVhd = ('https://' + $storageAccountName + '.blob.core.windows.net/' + $containerName  + '/' + $vhdName)
Add-AzureRmVhd -ResourceGroupName $resourceGroupName -Destination $urlOfUploadedImageVhd `
-LocalFilePath $localPath -OverWrite

# Create a managed image from the uploaded VHD
$imageConfig = New-AzureRmImageConfig -Location $location

#set the managed disk from the image
$imageConfig = Set-AzureRmImageOsDisk -Image $imageConfig -OsType Windows -OsState Generalized `
-BlobUri $urlOfUploadedImageVhd

$image = New-AzureRmImage -ImageName $imageName -ResourceGroupName $resourceGroupName -Image $imageConfig

Dave Rendón Microsoft Azure MVP, embracing and fostering tech intensity to benefit society and thrive in a digital world.

Leave a Reply

Your email address will not be published. Required fields are marked *