PS2

Máquinas Virtuales en Azure

01-deploy

Azure cuenta con múltiples recursos y servicios. Uno de ellos son las “Máquinas Virtuales” y un buen metodo para desplegarlas el uso de Powershell con el modulo AzureRM (o Az).

La principal ventaja de desplegar un entorno con máquinas virtuales en la nube es la “Elasticidad” que ofrece.

Esto es, nos permite hacer “Scale-Up” y “Scale-Out” de un modo sencillo y dinámico (aumentar o disminuir los recursos y tamaño de las maquinas, asi como el número de los mismos para adaptarnos a la demanda temporal haciendo uso de “Availability Set” o “Scale Set”).

Con ello nos ahorramos el quebradero de cabeza y los gastos de adquirir y mantener hardware físico que muchas veces no es necesario.

Como ya sabemos, disponemos de servicios SaaS, IaaS y PaaS.

Cuando nos decantamos por un Saas o Paas para dar solución a unas necesidades, el control sobre el entorno es menor ya que las maquinas que dan soporte a estos servicios están gestionadas por Azure y no podemos meterle mano.

Entonces, crearemos nuestras maquinas virtuales cuando necesitemos un completo control en el entorno a desplegar, para poder configurar los servidores como lo hacíamos on-premises (IaaS).

Gestion de Recursos en Azure con Powershell

Actualmente disponemos dos módulos para la gestión de recursos en Azure desde Powershell: “Az” y “AzureRM”.

Ambos módulos de PoweShell sirven para crear y administrar los recursos de nuestra organización (o la de un cliente) en Azure, reunidos en grupos que forman una solución.

Azure RM nos proporciona flexibilidad a la hora de implementar, eliminar, actualizar, etiquetar, …los recursos de un modo limpio y ordenado, facilitando asi su gestión.

Esto nos permitirá crear Scripts personalizados para distintos propósitos que nos facilitará la vida.

Para trabajar en Azure con Powershell, lo podemos hacer desde:

  • La consola de Powershell o ISE Powershell
  • Azure CLI (se integra con ‘cmd’)
  • CloudShell de Azure
  • Otras herramientas de Microsoft o de terceros compatibles

¿“AzureRM” o «Az»?

Si bien a dia de hoy es muy probable que en producción usemos código basado en los comandos del módulo AzureRM, la realidad es que se hace más cómodo el uso de «Az» y deberíamos ir adaptando el código que tengamos al nuevo módulo.

Principales ventajas para empezar a sustituir los comandos del modulo AzureRM por los de AZ:

  • Comandos más cortos
  • Estabilidad mejorada
  • Dentro de poco será soportado por Linux y MAC
  • Compatible con los comandos de AzureRM
  • AzureRM ya no recibirá nuevos módulos y solo tendrá mantenimiento hasta diciembre de 2020

¿Por qué usar Powershell en vez del Portal de Azure?

Gracias al scripting, podemos crear código que nos permita desplegar un mayor numero de recursos, con una mayor personalización y de un modo mucho más rápido que si lo hiciéramos todo desde el portal.

Esto se acentua cuando vayamos creando un repositorio con Scripts con distintos propósitos, de modo que para replicar un despliegue, tan solo tengamos que cambiar ciertas variables y parámetros.

Powershell nos brinda “automatización”.

Un ejemplo básico puede ser la creación de un servicio web balanceado:

Haciéndolo desde el portal, tendras que ir creando cada elemento por separado, ya sea, por ejemplo, un balanceador de carga, un Scale Set, puede que una máquina virtual base personalizada, incrustar un DSC, puede que un firewall, seguramente monitorizar el servicio con una sonda de salud, …lo que se os ocurra.

Si operaciones de este tipo las tenemos que hacer asiduamente, aunque sea con ciertas variaciones, el disponer de un script en el que para replicarlo solo tengamos que cambiar algunas variables o parámetros, facilita mucho la labor.

Esto se traduce implícitamente en una mejora de rendimiento y eficacia, abaratando costos operacionales en los proyectos y aumentando el tiempo que podemos dedicar en otros aspectos que dan un valor añadido.

Aunque no es el tema de este artículo, os invito a que le echéis un ojo a Azure Automation, que permite, entre otras, olvidarnos de ciertas tareas.

Orden en las Sentencias de PowerShell a la hora de crear una Maquina Virtual u otros objetos en Azure:

Antes de desplegar una solución en Azure, sobre todo si usamos PowerShell, a la hora de crear los recursos necesarios, debemos pensar la estructura y hacerlo en un orden lógico.

Si un recurso es dependiente de otros o va a contener un objeto que se incluirá en la sentencia de creación, estos deberemos crearlos con anterioridad.

Ejemplos de ello pueden ser:

  • Creación de una Red Virtual:
    • Creación de las Subredes Virtuales
    • Creación de la Red Virtual que contendrá dichas Subredes Virtuales
  • Creación de una Tarjeta de Red:
    • Creación de la Red Virtual
    • Creación de la IP Publica

Según lo que vayamos a desplegar, asi deberemos pensar en el orden de creación, adición y configuración de los distintos elementos.

Al principio requiere más tiempo que hacerlo desde el portal, pero cuando aprendes el mecanismo y, sobre todo, cuando te has creado plantillas para despliegues masivos en los que simplemente has de cambiar los nombres de las variables, la velocidad es muchísimo mayor que haciéndolo desde el portal a golpe de ratón.

Conclusiones:

Creo que no digo nada nuevo si deduzco que, gracias al scripting con PowerShell (del mismo modo que si hiciéramos con plantillas JSON), a la hora de desplegar en Azure una solución, nos permite ahorrar mucho tiempo.

Aademás, el nivel de personalización que podemos obtener es mayor que a través del portal (hay muchas configuraciones que solo son configurables mediante comandos).

Usar «AzureRM» o «Az»… yo a me decanto por «Az» por la simplicidad en la nomenclatura, y porque ahora que estoy empezando, ¿para que usar un modulo que va a quedar obsoleto, no?

Más abajo os dejo un ejemplo de despliegue con PowerShell AzureRM, por si os suena más , pero la adaptacion a Az es casi inmediata.

Propuesta:

Os invito a pasar por mi espacio en Git-Hub y uséis el script que he dejado para que practiquéis.

https://github.com/jorgeagudom/vm_basic_deployment_within_availability_set

Podéis modificar lo que queráis, aumentar su complejidad, …

En este caso, con el script se despliega una Máquina Virtual con sistema operativo Windows Server Core 2016 accesible por RDP dentro de un Conjunto de Disponibilidad.

En el video de Youtube al inicio de este articulo, describo el codigo usado.

Importante:

Si no tenéis instalado ya el módulo, usad previamente el comando:

Install-Module AzureRM

Si tenéis problemas y recibís un mensaje diciendo algo como que «vuestro equipo no permite ejecutar código remoto», se soluciona fácilmente. Ejecutad:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

En el siguiente enlace se habla más al respecto:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy?view=powershell-6

Muchas gracias por visitar mi post, y espero que si todavia no os habéis atrevido con PowerShell, que empecéis desde ya.

Nos vemos!

Autor: Jorge Agudo Martin

Curso: Microsoft MCSA Windows Server 2016 + MCSE Cloud Platform & Infrastructure

Centro: Tajamar

Año académico: 2018-2019

www.linkedin.com/in/jorge-agudo-m

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.