Automation Accounts para ahorrar dinero en las vm

Ver las imágenes de origen

El día de hoy vamos a ver como usar Azure Automation Accounts para ahorrar dinero en las vm que tengamos en nuestra infraestructura en azure, si bien es cierto que lo normal es tener un servidor encendido las 24h del día, hay ciertos equipos en nuestra infraestructura que no necesitan el porque estar 24horas encendido, el problema aquí es que, si nos vamos a la configuración de nuestros equipos podemos ver que hay una opción para el apagado automático pero no para un encendido automático, y aquí viene la pregunta como hacemos? nos colocamos una alerta todos los días para encender el equipo? asignamos la tarea al becario de turno? y si un día se nos olvida?

Para configurar un apagado automático, basta con ir a la sección de «Auto-Shutdown» y configurar la forma en que queremos que se apague nuestro equipo en particular, por ejemplo en la siguiente captura podemos ver que este equipo se apaga todos los días a las 6:00 PM de la tarde, a apagarse podemos configurar para que nos llegue un correo de notificación o que la misma se publique el log en alguna web donde se almacena.

Bien por la parte del auto apagado esta ya listo y configurado, siempre se nos apagara el equipo a la hora establecida y nos llegaría un correo notificándonos, pero no hay opción en la configuración de la vm para hacer un Auto-encendido, para esto nos vamos a la sección «Automatic Accounts» del Azure donde podemos configurar acciones automáticas a realizar en nuestro entorno.

Sino tenemos ninguna creada basta con hacer click en «+ Create» y nos aparecera un menu preguntandonos informacion basica, si es verdad que podemos configurar una «AA» para que cumpla varias tareas a la vez, mi recomendacion es que las tengamos separadas segun su funcion, para poder tener un mejor control sobre ellas.

Agregamos un nombre adecuado a la tarea que va a realizar, la suscripción en caso de que tenga varias, un resource group, una localización y aquí en «Create Azure Run as Account» es importante marcarlo porque necesitaras crear o tener una cuenta de servicio que se encargue de ejecutar esta tarea cuando le establezcas las horas, luego le damos a create y ya tenemos la primera parte creada.

Como podemos ver ya tenemos la tarea de cierta forma creada pero, no tiene función alguna definida, para esto nos vamos a donde dice «Runbooks» y desde allí vamos a crear un runbooks nuevo que se ejecute con powershell. Aunque veamos que hay varios runbooks creados de forma automática son de ejemplo en varios lenguajes como python, powershell, Graphical, ruby, etc u otros disponibles, nosotros podemos eliminarlos si queremos o dejarlos allí, para este ejemplo crearemos uno nuevo personalizado.

una vez lo creamos el sistema nos llega automaticamente a una ventana para definir las lineas de comando que queremos ejecutar en el mismo.

En el vamos a escribir las siguientes lineas:

$Conn = Get-AutomationConnection -Name AzureRunAsConnection
$connectionResult = Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
Start-AzVM -Name ‘autostart-test’ -ResourceGroupName ‘tecsun-testlab’

Tenemos que indicar el nombre de la maquina o maquinas virtuales y el resource group donde se encuentran, podemos usar este mismo código para 2 o mas maquinas virtuales, solo hay que agregar 1 línea por cada maquina virtual que quisiéramos configurar aquí

» Start-AzVM -Name ‘autostart-test’ -ResourceGroupName ‘tecsun-testlab’ » esta seria la línea que debemos de repetir por cada maquina adicional configurada para el auto encendido, las otras líneas no es necesario repetirlas.

Por ejemplo si queremos configurar un auto encendido para 3 maquinas diferentes:

$connectionResult = Connect-AzAccount -ServicePrincipal -Tenant $Conn.TenantID -ApplicationId $Conn.ApplicationID -CertificateThumbprint $Conn.CertificateThumbprint
Start-AzVM -Name ‘VM01’ -ResourceGroupName ‘RG01’
Start-AzVM -Name ‘VM02’ -ResourceGroupName ‘RG02’
Start-AzVM -Name ‘VM03’ -ResourceGroupName ‘RG03’

una vez que tengamos el código, lo salvamos y hacemos un «test pane» para comprobar que funciona el mismo. Lo mas seguro en este punto nos saldrá una pantalla de error al hacer click en «Start» el cual comprobara el código escrito este correcto, como la siguiente:

Este error es debido a que al igual que el powershell que tenemos en nuestros equipos locales, tenemos que descargar o actualizar los módulos de powershell que tenemos en nuestro entorno Azure, para esto, salvamos el código y nos vamos al menú principal del «AA», desde allí nos vamos a la sección de «Shared Resources» y la opcion «Modules gallery»

Tenemos que instalar 3 módulos adicionales, ellos son Az.Accounts, Az.Automation y Az.Compute, es solo buscar 1 a 1 e indicarle al Azure que lo importe y lo cargara de cierta forma a tu entorno.

Le damos a la opción «Import» y este modulo se agrega como dije unos pasos arriba a tu entorno, a veces suele tardar un par de minutos entre 2 a 5 minutos en cargar el modulo de forma correcta, por lo que si van directo a probar el runbooks sin esperar por lo menos unos 5 minutos o mas, lo mas seguro les volverá a dar error.

Para comprobar que el modulo esta instalado, nos vamos a la sección «Shared Resources» -> «Modules» y alli veremos todos los modulos instalados, si elegimos el que acabamos de instalar «Az.Accounts» nos mostrara la siguiente informacion e incluso nos da la opcion de quitarlo si queremos hacerlo.

Una vez que confirmemos que ya disponemos de los modulos necesarios nos vamos una vez mas al runbooks que hemos creado, le damos a la opcion «Editar» esto a su vez nos lleva a la pantalla donde hemos editado las lineas segun la maquina o maquinas que tengamos que encender de forma automática, otra vez nos vamos al «test pane» y ahora si lo hemos realizado todo de forma correcta, al hacer la prueba debería de indicarnos que esta el runbooks de forma correcta.

regresamos a la pantalla donde editamos las líneas y desde allí le damos a la opción «publicar» por de esta forma el runbook lo tomara en cuenta, si se queda con la opción de «edición» no se ejecutara, aunque el script este de forma correcta. Luego nos vamos a «Shared Resources» -> «Schedules» donde vamos a configurar el horario en el que queramos que se encienda la maquina, si diario o semana, es sencillo de configurar.

Por ultimo lo que hacemos en que desde nuestro «runbooks» creado y personalizado le damos a «Link to Schedules» y elegimos el que hemos creado recientemente, de esa forma linkeamos el runbooks con el horario establecido de forma personalizada para el encendidos de la maquinas y ya eso es todo.

Si regresamos a los días, podemos ver que la maquina a sido encendida en el horario establecido, en caso de que falle en algún momento nos debería de llegar una notificación por correo.

Imagen de cortesía

Y hasta aquí la entrada del día de hoy, muchas gracias y síganme en mis redes y en mi blogs para mas tips del mundo Onpremise & cloud