A la hora de gestionar nuestras máquinas virtuales (VM) tenemos diversas opciones, una de ellas es Azure CLI, una interfaz de línea de comandos multiplataforma para gestionar los recursos en Azure. Vamos a ver toda una serie de ejemplos con comandos a través de Azure CLI que nos servirán para gestionar nuestras VM.
En Azure CLI encontramos una alternativa a Powershell a la hora de gestionar a través de scripts nuestros recursos en Azure, más sencilla y menos potente que Powershell a la hora de crear scripts avanzados, pero a la vez muy útil dada su disponibilidad multiplataforma tanto para ser usada a través del propio portal de Azure como para instalar en macOS, Linux o Windows.Vamos a ver toda una serie de ejemplos de su uso básico con máquinas virtuales.
Crear VM
Vamos a empezar creando una VM con el comando az vm create. Este comando requiere algunos parámetros como son --resource-group para indicar el grupo de recursos donde la queremos crear, --name que es el nombre de nuestra VM y por último --image donde especificamos la imagen a utilizar (en caso que no indiquemos un disco ya creado).
Alternativamente también hemos indicado en el ejemplo los parámetros --admin-username donde definimos el nombre de usuario administrador, --generate-ssh-keys para la generación de clave pública y privada SSH, --size para indicar un tamaño predefinido de VM y finalmente --location para definir la localización de la VM, en caso de no indicar este último cogerá por defecto la localización del grupo de recursos.
az vm create --resource-group nombregrupoderecursos --name nombrevm --image RedHat --admin-username nombredeusuario --generate-ssh-keys --size “standard_DS3_v2” --location westeurope
Una vez creada la VM, Azure CLI mostrará en pantalla las IPs públicas (en caso de existir) y privada para poder conectar a la máquina por SSH con el siguiente comando
ssh IP -l nombredeusuario
Gestionar estado de las VM
Seguimos con tareas básicas, para parar una VM usaremos az vm stop
az vm stop -n nombrevm -g nombregrupoderecursos
Para arrancar una VM, cuando esta se encuentre parada, usaremos az vm start
az vm start -n nombrevm -g nombregrupoderecursos
Finalmente para reiniciarla usaremos az vm restart, facil.
az vm restart -n nombrevm -g nombregrupoderecursos
Obviamente para estas acciones nos será útil conocer de antemano el estado de una VM pero para ello ya tendremos que echar mano del comando de información de las VM que vemos a continuación
Información de las VM
La información de las VM en Azure CLI se proporciona en formato JSON, afortunadamente tenemos disponibles el parámetro --query para ejecutar consultas JMESPATH sobre estos datos. Esto lo veremos claramente en los ejemplos siguientes
Podemos listar todas nuestras VM por grupo de recursos (opcional) con el siguiente comando
az vm list --resource-group
Esto nos devuelve como decimos un montón de información en formato JSON. Si nos fijamos toda la información está jerarquizada y es en base a esta estructura, como podremos consultar cualquiera de los datos. En los siguientes ejemplos utilizaremos el comando az vm show para obtener información de una de nuestras VM. El siguiente comando sin filtrado muestra toda una serie de información de nuestra VM.
az vm show --resource-group nombregrupoderecursos --name nombrevm
Para obtener el nombre de administrador de la VM lanzaremos el comando ya usando el parámetro query
az vm show --resource-group nombregrupoderecursos --name nombrevm --query “osprofile.adminusername”
Para obtener el tamaño ejecutamos
az vm show --resource-group nombregrupoderecursos --name nombrevm --query “hardware.Profile.vmSize”
Para obtener el SKU
az vm show --resource-group nombregrupoderecursos --name nombrevm --query “storage.Profile.imageReference.sku”
Pero aquí no se acaba la cosa porque el comando az vm show no muestra por defecto toda la información, para ello tenemos que especificar el parámetro --show-details. Sin este, si lanzamos por ejemplo una consulta para obtener el estado de la VM no obtendremos respuesta aunque exista la propiedad en sí...
Para obtener el estado de una VM ejecutaremos
az vm show --resource-group nombregrupoderecursos --name nombrevm --show-details --query “powerState”
Para obtener la(s) IP privadas de una VM
az vm show --resource-group nombregrupoderecursos --name nombrevm --show-details --query “privateIps”
Para obtener la(s) IP públicas de una VM
az vm show --resource-group nombregrupoderecursos --name nombrevm --show-details --query “publicIps”
Estos últimos datos también los podemos recoger y de manera conjunta con
az vm list-ip-addresses --name nombrevm --output table
Imágenes disponibles
A la hora de crear una VM en el primer ejemplo, seleccionabamos una imagen RedHat pero en Azure tenemos un amplio abanico de opciones. Para ver las opciones disponibles ejecutaremos el comando
az vm image list --output table
Podemos a la vez filtrar por sku, región, fabricante...
Listar imágenes disponibles de Wordpress
az vm image list --sku wordpress --output table -all
Listar imágenes de Microsoft
az vm image list --publisher microsoft --output table -all
Listar imágenes disponibles en una determinada región
az vm image list --location westeurope --output table -all
Tamaños disponibles
Podemos configurar nuestra VM totalmente pero por lo general nos servirá con alguno de los tamaños predefinidos, para listarlos ejecutaremos el siguiente comando
az vm list-sizes --location westeurope --output table
Cambiar tamaño de vm
Una vez creada, una VM puede cambiarse de tamaño en cualquier momento. Mientras sigue funcionando en caso que el nuevo tamaño se encuentre disponible en el mismo cluster o apagando la VM para cualquier otro tamaño. Obviamente y sobretodo si está en producción, lo ideal será cambiar el tamaño “al vuelo” sin que nuestra vm o servicios caigan, para ello podemos consultar que tamaños hay disponibles en el cluster con el siguiente comando
az vm list-vm-resize-options --resource-group nombredegrupoderecursos --name nombrevm --output table
Con los resultados en mente, podemos lanzar una orden de cambio de tamaño con
az vm resize --resource-group nombredegrupoderecursos --name nombrevm --size “standard_DS5_v2”
Espero que estos ejemplos os sean útiles para comenzar a trabajar con Azure CLI.