En Azure podemos gestionar máquinas virtuales, y tenemos muchas y diferentes opciones para poder realizar sobre ellas, y una de ellas es que podemos crear una imagen de una máquina virtual personalizada, donde ya hayamos creado una configuración previa, es decir, que ya hemos dedicado mucho tiempo a esperar a que se instalen las diferentes aplicaciones, algunas de ellas donde se necesitan horas de preparación para su uso. Pues esta imagen es una plantilla para desplegar nuevas máquinas y ahorraremos todos estos pasos, una manera perfecta de reducir tiempo del despliegue de una infraestructura. El único inconveniente es que la máquina virtual sobre la que se va basar la imagen pasa a ser inservible.

Crear una imagen personalizada de una VM ARM tipo Windows en Azure mediante PowerShell

Para crear una plantilla de una maquina virtual en Azure, como siempre tenemos varias opciones, una de ellas, mediante el Portal de la plataforma, lo explico en el vídeo del post, otra de ellas es mediante Powershell, que es la que vamos a explicar aquí.

Lo primero que tendremos que tener es crear una máquina virtual donde ya hayamos realizado una configuración, una vez que este preparada la configuración, ejecutaremos el programa interno del sistema, Sysprep, deberemos movernos a la ruta «C:\Windows\System32\Sysprep» y usar el comando siguiente:

  • Sysprep /generalize /shutdown /oobe

Con Sysprep generalizaremos la maquina, lo que significa que eliminaremos toda configuración de usuario (personalización de usuario, licencia, etc …), que no es lo mismo que la configuración de la maquina (aplicaciones, roles, etc …). A continuación deberemos conectarnos a nuestro Tenant de Azure y realizaremos una captura de la maquina usando los siguientes comando:

  1. Nos seguraremos que la maquina virtual esta apagada y desasignada:
    • Stop-AzureRmVM -ResourceGroupName [Nombre_RG] -Name [Nombre_VM] -Force
  2. Estableceremos el estado de la maquina virtual en modo generalizado:
    • Set-AzureRmVm -ResourceGroupName [Nombre_RG] -Name [Nombre_VM] -Generalized
  3. Despues guardaremos en una variable la máquina virtual:
    • $VM = Get-AzureRmVM -Name [Nombre_VM] -ResourceGroupName [Nombre_RG]
  4. A continuación deberemos crear la configuración de la imagen y la guardaremos en otra variable:
    • $IMAGE = New-AzureRmImageConfig -Locatio [Localización] -SourceVirtualMachineId $VM.Id
  5. Y por ultimo crearemos la imagen de la máquina virtual:
    • New-AzureRmImage -Image $IMAGE -ImageName [Nombre_Imagen] -ResourceGroupName [Nombre_RG]

Y una vez que termine el proceso, la imagen estará lista para usarse y la maquina virtual en la que se a basado se habrá quedado inservible.

Variaciones a la hora de crear la imagen

En caso de que las máquinas virtuales sobre las que vamos a realizar la imagen sean a partir de un disco gestionado o a partir de una instantánea, lo pasos son prácticamente los mismos, aunque con algun cambio en el paso 3:

  • Disco gestionado -> Obtendremos el identificador del disco:
    • $DISKID = $VM.StorageProfile.OsDisk.ManagedDisk.Id
  • Instantánea -> Obtendremos la instantanea:
    • $SNAPSHOT = Get-AzureRmSnapshot -ResourceGroupName [Nombre_RG] -SnapshotName [Nombre_Snapshot]

Crear una maquina virtual usando la imagen

Una vez que tenemos creada una imagen personalizada, podemos usarla para desplegar maquinas en el estado exacto en el que dejamos la maquina en la que se basa la imagen, para ello simplemente tendremos que crear una máquina virtual de la misma manera simple que lo hacemos siempre por Powershell a excepción de añadiendo el parámetro «-ImageName». Un ejemplo del comando para el despliegue de una maquina virtual seria el siguiente:

  • New-AzureRmVm -ResourceGroupName [Nombre_RG] -Name [Nombre_VM] -ImageName [Nombre_Imagen] -Location [Localización] -VirtualNetworkName [Nombre_VNET] -SubnetName [Nombre_Subnet] -SecurityGroupName [Nombre_NSG] -PublicIpAddressName [Nombre_IP_Publica] -OpenPorts 3389

Una vez que lancemos el comando, el despliegue de la máquina sera un proceso normal al despliegue de cualquier otra.

 

Autor/a: Daniel Garrido Sánchez
Curso: Microsoft MCSA Windows Server + MCSE Cloud Platform & Infrastructure
Centro: Tajamar
Año académico: 2017-2018
LinkedIn: https://www.linkedin.com/in/danielgarridosanchez/

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.