Azure. Automation para no dejarte una VM de desarrollo encendida

Para los que usamos máquinas virtuales en Azure para desarrollar, nos preocupa enormemente dejarnos encendida una VM cuando terminamos el día de trabajo. Sobre todo, cuando llegan días festivos y en medio de la cena de navidad nos llega el flash ‘¿He apagado las VM?, ups, creo que no L.

Para los despistados como yo, tenemos un servicio en Azure que nos permite automatizar scripts PowerShell. Azure Automation nos ayuda a simplificar la administración de la nube con la automatización de tareas repetitivas.

 

Cuentas de Automatización

El servicio, nos permite crear una o varias cuentas de automatización donde implementaremos los Windows PowerShell Workflows y programaremos la automatización de estos scripts.

 

Runbooks

Los Runbooks contienen los flujos de procesos y las programaciones que permiten ejecutar el scripts cuando sea necesario.

 

En los Runbooks de nuestra cuenta de Automation, creamos un Runbooks que acceda a la suscripción de Azure y obtenga las máquinas virtuales que se encuentren en estado “Ready”.

workflow Get-VMStatusByEmail

{

# Obtenemos de la cuenta de automatización, las credenciales de conexión a Azure

$cred = Get-AutomationPSCredential -Name “automation@adiazcanhotmail.onmicrosoft.com”

# Conectamos a Azure y obtenemos la suscripción activa

Add-AzureAccount -Credential $cred

$currentAzure = Get-AzureSubscription -current

$subject = “Active VM. “ + $currentAzure.SubscriptionName

$vms = “”

#Construimos una variable con las VM que estén encendidas

$vms = InlineScript {

Get-AzureVM | Where-Object {$_.Status -like “Ready*”} | ForEach-Object {

# Hay que tener en cuenta que hay servicios Cloud que también se consideran VM,

# por ejemplo, este corresponde a la web de TenerifeDev y no a una VM

if ($_.ServiceName -ne “tenerifedev”) {

$vms += “ServiceName: “ + $_.ServiceName + ” – Name: “ + $_.Name + “`n”

}

}

Write-Output $vms

}

$vms

}

Si lo probamos, escribirá en el “PANEL DE SALIDA” el listado de VM encendidas de la suscripción a la que nos hemos conectado.

 

Para almacenar las credencias de forma segura, las cuentas de automatización tienen una sección de activos donde se almacenan, junto a otros recursos como módulos PowerShell o Programaciones.

 

Con el comando Get-AutomationPSCredential podemos obtener a las credenciales y hacer uso de ellas en nuestro proceso, como podemos ver en las primeras líneas del script.

Para el envío del email, nos crearemos otros Runbook que recibe por parámetros los datos a enviar, se conecta al SMTP de Office 365 y hace el envío del correo.

workflow Send-Mail

{

param (

[Parameter(Mandatory=$False)]

[string] $MessageBody = “No hay mensaje en el cuerpo del correo”,

[Parameter(Mandatory=$False)]

[string] $MessageSubject = “No hay asunto del mensaje”

)

$AzureO365Credential = Get-AutomationPSCredential -Name “AzureO365Credential”

if ($AzureO365Credential)

{

$MessageFrom = $AzureO365Credential.Username

Write-Output “Enviando email con asunto $MessageSubject…”

Send-MailMessage -To adiazcan@hotmail.com -Subject $MessageSubject -Body $MessageBody -UseSsl -Port 587 -SmtpServer ‘smtp.office365.com’ -From $MessageFrom -BodyAsHtml -Credential $AzureO365Credential

Write-Output “Email enviado correctamente”

}

}

y en nuestro primer script ponemos el siguiente IF que ejecuta el script Send-Mail si existen VM encendidas.

# Si exiesten VM encendidas, enviamos un email ejecutando otro Runbooks de la cuenta de Automation

if ($vms) {

Send-Mail -MessageBody $vms -MessageSubject $subject

}

Programación

Sólo nos queda agregar una programación al primer Runbook para que, con la frecuencia deseada, se ejecute comprobando si tenemos alguna VM encendida y nos envíe un email.

 

Con este pequeño paso, todas las noches se ejecutará el script para que comprueba las VM que me he dejado encendida y me envía un email recordatorio por si las tengo que apagar.

Pensad en todas las tareas que podemos automatizar, desde encendido programado de máquinas virtuales a Warm-Up de Web Sites, etc.

Si necesitamos ejemplos, existe una galería de Runbook bastante completita.

 

Saludos a todos…