O cómo ver soluciones por todas partes

Azure Automation: Caso Práctico

work_in_progress

Tras el último artículo, donde veíamos a nivel general qué era Azure Automation y a grandes rasgos las cosas que podíamos llegar a hacer con el, me vais a permitir este artículo que ahondemos en el concepto, viendo de una manera práctica como poner en marcha la automatización de nuestro Azure. A continuación vamos ir viéndolo paso a paso

Configurando la subscripción

Para comenzar, vamos a crear una cuenta de Azure Automation. Para ello, en el portal antiguo, pulsar sobre el icono automation, y pulsar en el símbolo «+» en la parte inferior

 CrearCuenta

DatosCuenta OpcionesSuperior

Los datos a introducir para la nueva cuenta serán el nombre y el área geográfica. No todas las áreas geográficas están disponibles.

 

 

 

Una vez generado, al pulsar sobre el nombre de la cuenta nos dará las siguientes opciones:

 

  • La primera pestaña es una hoja de resumen, desde la que podremos acceder a las principales acciones.
  • La pestaña Panel actua a modo de cuadro de mandos desde donde podemos ver como ha ido la ejecución de nuestros runbooks, información del servicio, y de las acciones que hemos realizado en el sistema
  • La pestaña Runbooks nos permite obtener la información de nuestro runbooks filtrando por fechas de ejecución y por estado
  • La pestaña Activos contiene los diferentes módulos que podremos utilizar desde nuestros scripts, y permite así mismo añadir otros módulos estándar o desarrollados por nosotros mismos
  • Por último, la pestaña Escalar actualmente permite cambiar el modo de ejecución entre el gratuito (con limitación de 500 minutos de ejecución de trabajos al mes) y el modo básico, que es facturado y por tanto no tiene limitación, aunque no me extrañaría ver más adelante opciones adicionales de escalado y priorización.

Con esto ya podemos empezar a trabajar

Creando nuestro primer Runbook

Tenemos dos opciones, ambas disponibles en la pestaña de resumen: Crear un nuevo runbook, o bien importar un runbook desde la galería. En nuestro caso, vamos a crear un nuevo runbook denominado «Automation Sample».

CreacionRunbook

Para este ejemplo, vamos a tener un script que nos liste todas las máquinas (servicios) que tenemos disponibles en nuestra subscripción, con su estado, y un segundo runbook que, una vez finalizado el primero, coja el resultado generado y lo mande por correo a la cuenta del administrador de la subscripción.

Para ello, una vez generado el runbook principal, pinchamos sobre la pestaña «Autor». Una vez dentro de ella, podemos empezar a escribir nuestro código en Powershell. Para que no tengáis problemas, os paso el código (recordar cambiar las credenciales)

<#
.SYNOPSIS
    Ejemplo de Azure Automation  

.DESCRIPTION
    Este Runbook hace un inventario de las máquinas de la subscripción junto con su estado,
    y posteriormente envía el archivo generado por correo al usuario administrador de la subscripción

    A modo de ejemplo se proporciona un parámetro para ilustrar el uso de los mismos. En este caso,
    si no se introduce el parámetro, se enviará el correo por defecto.   

.PARAMETER Correo
    Indica si se requiere el envío de correo

.EXAMPLE
    AutomationSample -Correo "Si"

.NOTES
	Author: Fabián Calvo
	Last Updated: 10/07/2015
#>

workflow AutomationSample
{
param ( 

[Parameter(Mandatory=$False)] 

[bool] $Correo = $true
)
    # Cogemos las credenciales
    $user = Get-AutomationPSCredential -Name "fcalvo@encamina.com"

    # Cogemos la subscripción
    Add-AzureAccount -Credential $user 

    $currentAzure = Get-AzureSubscription -current 

    $VirtualMachines = ""

    Get-AzureVm |ForEach-Object {
    $VirtualMachines += $_.Name + " - Status: " + $_.Status + "`n"

    }
   Write-Output $VirtualMachines 

}

Una vez programado, tenemos a nuestra disposición en la parte inferior diferentes opciones:

  • Administrar: Esta opción nos permite importar un nuevo módulo o agregar una nueva configuración
  • Insertar: Esta opción nos permite insertar Actividades (una orden powershell es una actividad) a partir de los activos, Configuraciones, u otros Runbook
  • Guardar: Pues eso… guardar nuestro trabajo 🙂
  • Descartar Borrador: Inicialmente deshabilitado, en caso de tener una versión publicada, nos permitirá descartar los últimos cambios realizados
  • Prueba: Al pulsar esta opción se guardará el runbook y se lanzara, y en caso de que este escriba por consola nos mostrará una consola en la parte inferior. Esta opción es muy válida para validar que obtenemos lo que vamos buscando
  • Publicar: Al pulsar esta opción publicaremos la actual versión borrador

El código incluido lanza el resultado por consola, para poder probarlo adecuadamente. Una vez testeado, vamos con la segunda parte. Vamos a crear un nuevo runbook denominado «sendEmail». Copio el código a continuación (recordar publicarlo para encontrarlo luego):

workflow sendEmail
{
    param ( 

[Parameter(Mandatory=$False)] 

[string] $Cuerpo = "Mandado automáticamente desde Azure", 

[Parameter(Mandatory=$False)] 

[string] $Asunto = "Correo Automático" 

) 

$AzureO365Credential = Get-AutomationPSCredential -Name "AzureO365Credential" 

if ($AzureO365Credential) 

{ 

$MessageFrom = $AzureO365Credential.Username 

Write-Output "Enviando email con asunto $Asunto..." 

Send-MailMessage -To fcalvo@encamina.com -Subject $Asunto -Body $Cuerpo -UseSsl -Port 587 -SmtpServer 'smtp.office365.com' -From $MessageFrom -BodyAsHtml -Credential $AzureO365Credential 

Write-Output "Email enviado correctamente" 

} 

}

y ahora, en nuestro runbook principal, sustituiremos la escritura en la consola por el siguiente código:

 

If (($VirtualMachines)&&($Correo)) {
       $Mensaje= "A continuación se incluye la información de las máquinas actualmente en la subscripción: `n" + $VirtualMachines
       $Asunto = "Información automática de la subscripción Azure " + $currentAzure.Name
       sendEmail $Asunto $Mensaje
   }

y ya solo falta guardar, probar y si es correcto, publicar el runbook.

ProgramacionEl último paso, sería programar su ejecución. Para ello, una vez publicado, pulsaremos sobre la pestaña «Programar», y dentro de ella, pulsaremos en «Vincular a una programación nueva».

 

En la ventana resultante, darle un nombre a la programación, y pulsar aceptar. En la segunda pestaña, seleccionar cuando queremos que se ejecute (en el ejemplo, diariamente a las 11,30, sin fecha de fin)ProgramacionIIy eso es todo!!! ya tendremos un script ejecutándose, utilizando otro genérico de forma sencilla, y que puede ser reutilizado cada vez que tengamos que mandar un correo desde cualquier de nuestros runbooks. Hay miles de cosas que podemos hacer combinando los runbooks que nosotros mismos hagamos, y los disponibles en la galería que no deja de crecer…

Espero que os haya gustado!!!!!

 

 

mm

Sobre Fabián Calvo

Ingeniero en informática con más de 10 años de experiencia en proyectos de desarrollo e implementación de software. Tiene más de 8 años de experiencia en entornos Microsoft, y más específicamente en Internet Information Server, SQL Server y SharePoint Server.
Esta entrada ha sido publicada en Azure, Powershell y etiquetada como , , . Enlace permanente .
ENCAMINA, piensa en colores