Ahorrando en máquina virtuales de Azure

Cuando nos surge la necesidad de montar una máquina virtual en Azure resulta interesante hacer que esa máquina se apague y se encienda automáticamente en los horarios que la solemos usar, típicamente en horario de oficina.

En Azure podemos configurar que nuestras máquinas virtuales se apaguen y enciendan cuando queramos, permitiéndonos ahorrar un coste interesante.

Por ejemplo, si sólo nos interesa que nuestra máquina virtual esté sólo disponible en horario de oficina de lunes a viernes, normalmente son 160 horas al mes, si usamos la Calculadora de Precios de Azure podemos ver cuánto costaría aproximadamente una máquina de 8 núcleos, 56 Gigas de Ram:

Esto lo conseguiremos a base de configurar una serie de tareas y servicios disponibles en el marketplace de Azure.

1 Crear una cuenta de automatización

Lo primero será crear una cuenta de automatización, es un servicio de Azure que nos permitirá configurar y automatizar nuestros recursos de Azure.

Para crearlo, desde nuestro Dashboard de Azure, nos vamos al Marketplace y buscaremos por la palabra Automation:

Lo creamos y configuramos con el nombre y grupo de recursos que queramos:

Después de darle al botón "Create" tendremos listo un sistema de automatización de scripts con dos Runbooks de ejemplo:

Podemos borrar los runbooks que se han creado, ya que lo que vamos a hacer es crear dos runbooks desde cero, uno para arrancar la máquina y otro para apagarla.

2 Crear runbooks

Para añadir los runbooks que necesitamos, no tenemos que crearlos desde cero, usaremos unos existentes en la galería. Para ello, entramos en el detalle de la "Automation Account" que acabamos de crear y seleccionamos "Runbooks Gallery":

Los que nos interesan son "Start Azure V2 VMs" y "Stop Azure V2 VMs". Como habrás podido adivinar, el primero es el que usaremos para arrancar una máquina virtual, y el segundo para pararla.

3 Configurar un runbook

Seleccionaremos el runbook de "Start Azure v2 VMs". Para añadirlo a nuestra tarea de automatización pulsamos el botón de "Import" y le daremos un nombre:

Una vez que le demos a "Ok" tenemos que editarlo, ya que como habéis leído, los runbooks no son mantenidos por Microsoft, sino por el creador, y a estos dos runbooks hay que hacerles un par de modificaciones.

En cuanto esté creado, vamos a editarlo:

Una vez que veamos el script gráfico del runbook, debemos modificar los dos ramales que hay tras el paso de "Start VM":

Cuando seleccionemos cada una de las ramas podremos editar la "Condition Expression"

En la rama que va al nodo "Notify VM Started" debemos sustituir el valor de Condition expression por este valor:  $ActivityOutput['Start VM'].IsSuccessStatusCode -eq 'True'

En el caso de la rama que va al nodo "Notify Failed To Start" debemos poner: $ActivityOutput['Start VM'].IsSuccessStatusCode -ne 'True'

Una vez modificado debemos publicar el runbook:

De esta forma ya tenemos el runbook configurado y publicado, que podrá iniciar una máquina virtual.

Para el caso del runbook "Stop Azure V2 VMs" los pasos son exáctamente los mismos y también hay que modificar las últimas ramas del script gráfico, pero en este caso, para la rama que va al nodo "Notify VM Stopped" debemos modificarlo por: "$ActivityOutput['Stop VM'].IsSuccessStatusCode -eq 'True'

Y para la rama "Notify Failed Stop" lo modificaremo por: $ActivityOutput['Stop VM'].IsSuccessStatusCode -ne 'True'

4 Programar los encendidos y apagados

El último paso es programar cuándo se van a ejecutar estos runbooks que acabamos de configurar y publicar.

En la sección de "Overview" de cada uno de los runbooks podemos ver la opción de "Schedules":

En este punto ya podemos configurar cuándo se lanzaran los runbooks y sobre qué grupo de recursos y máquinas virtuales que queramos arrancar o detener.

Espero que os sirva.

Gracias a @danielcaceresm por enseñarme esto.

Más info: https://blogs.endjin.com/2016/03/using-azure-automation-to-run-vms-during-office-hours-only-using-graphical-runbooks/

 

Deja un comentario