Migrar/Copiar Discos de Azure entre Regiones utilizando PowerShell

Para un laboratorio personal tuve que cambiar de region un Az Managed Disk.

Para realizar el cambio de región de un disco en Azure no existe un proceso automatizado en el background de Azure. Para esto debemos utilizar la siguiente documentación:

https://learn.microsoft.com/en-us/azure/virtual-machines/windows/disks-upload-vhd-to-managed-disk-powershell#copy-a-managed-disk

En esta documentación nos proveen de un script simplificado que realiza la copia del disco a través de AzCopy:

$sourceRG = <sourceResourceGroupHere>
$sourceDiskName = <sourceDiskNameHere>
$targetDiskName = <targetDiskNameHere>
$targetRG = <targetResourceGroupHere>
$targetLocate = <yourTargetLocationHere>
$targetVmGeneration = "V1" # either V1 or V2
#Expected value for OS is either "Windows" or "Linux"
$targetOS = <yourOSTypeHere>

$sourceDisk = Get-AzDisk -ResourceGroupName $sourceRG -DiskName $sourceDiskName

# Adding the sizeInBytes with the 512 offset, and the -Upload flag
$targetDiskconfig = New-AzDiskConfig -SkuName 'Standard_LRS' -osType $targetOS -UploadSizeInBytes $($sourceDisk.DiskSizeBytes+512) -Location $targetLocate -CreateOption 'Upload' -HyperVGeneration $targetVmGeneration

$targetDisk = New-AzDisk -ResourceGroupName $targetRG -DiskName $targetDiskName -Disk $targetDiskconfig

$sourceDiskSas = Grant-AzDiskAccess -ResourceGroupName $sourceRG -DiskName $sourceDiskName -DurationInSecond 86400 -Access 'Read'

$targetDiskSas = Grant-AzDiskAccess -ResourceGroupName $targetRG -DiskName $targetDiskName -DurationInSecond 86400 -Access 'Write'

azcopy copy $sourceDiskSas.AccessSAS $targetDiskSas.AccessSAS --blob-type PageBlob

Revoke-AzDiskAccess -ResourceGroupName $sourceRG -DiskName $sourceDiskName

Revoke-AzDiskAccess -ResourceGroupName $targetRG -DiskName $targetDiskName

Basado en este script cree el siguiente repo:

https://github.com/mdiloreto/copy-azdisk-from-region

Que contiene un script con mayor elaboración basado en este que nos permite simplificar el proceso de ejecución utilizando una función que tiene las siguientes caracteristicas:

Caracteristicas:

  • Verificación de Módulos Azure PowerShell: Antes de iniciar las operaciones de copia, el script verifica si los módulos específicos de Azure PowerShell (Az.Accounts y Az.Compute) están instalados y son de la versión requerida. Si no están presentes o están desactualizados, los instala automáticamente.
  • Autenticación y Contexto de Azure: El script se conecta a la cuenta de Azure utilizando las credenciales proporcionadas (ID del inquilino y ID de la suscripción) y establece el contexto para los comandos posteriores de Azure PowerShell.
  • Comprobación e Instalación de AzCopy: Se realiza una verificación para determinar si AzCopy, una herramienta de línea de comandos para mover datos hacia y desde contenedores de almacenamiento de Azure, está instalado. Si no lo está, el script procede con su instalación.
  • Operaciones de Copia de Discos: se obtiene la información del disco de origen en la región actual. Se configura el disco de destino en la nueva región con las características del disco de origen. Si el disco fuente tiene un perfil de seguridad, este se transfiere al disco destino.
  • Acceso Seguro a los Discos: El script genera tokens de Acceso Firma de Servicio Compartido (SAS) tanto para el disco fuente como para el disco de destino, permitiendo una transferencia segura.
  • Uso de AzCopy para la Transferencia de Datos: Utiliza la herramienta AzCopy para mover los datos del disco de forma eficiente de la región de origen a la región de destino.
  • Limpieza: Una vez completada la transferencia, el script revoca los accesos SAS para mantener la seguridad.
  • Manejo de Errores: El script está diseñado con bloques try-catch para manejar excepciones y errores que puedan surgir durante la ejecución, proporcionando mensajes de error descriptivos para facilitar la depuración.
  • Configuración del Disco Destino: Se configura el disco de destino en la nueva región con las características del disco de origen.
  • Perfil de Seguridad: Si el disco fuente tiene un perfil de seguridad, este se transfiere al disco destino.

Demo de uso

Prerrequisitios:

  • Realizar un Snapshot del disco en cuestion.
  • Crear un disco a partir del snapshot.
  • Clonar el repositorio:
git clone https://github.com/mdiloreto/copy-azdisk-from-region
cd copy-azdisk-from-region

Realizaremos una demo de la utilización:

  • Basicamente, vamos a copiar el disco “latest_tw_admin_vm-osdisk” que se encuentra en la región East US a Brazil South.
  • Lo primero que debemos hacer es setear los parametros de la función que se encuentran en las lineas finales de codigo antes de ser llamada.
  • Podemos correr el script, tal como en este ejemplo, simplementa llamando al archivo .ps1.
  • En primer lugar nos solicitará iniciar sesión para setear el Contexto del modulo Az de Azure.
  • Setea el contexto correctamente.
  • Realiza la copia del Security Profile. Especificamente el Security Type (esto no estaba en el script original provisto por microsoft).
  • Inicia la copia de los archivos a través de las SAS URLs de cada uno (para ver mas detalles de como lo hace revisar el script y readme.md).
  • Luego del tiempo necesario se copian correctamente los contenidos del disco y finaliza la operación:
  • Podemos verificar que el disco se copio correctamente a la región especificada.


Posted

in

, , ,

by

Comments

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.