Zerkana

viernes, 3 de mayo de 2019

Azure Automation - Parte 2 - Configurando un Runbook

Hi,

Continuamos con la segunda parte de esta serie de post dedicados a Azure Automation, uno mas de los tantos servicios que hospeda el Cloud público, en este caso de Microsoft. 

Comenzamos enumerando las opciones más relevantes que tenemos dentro de la cuenta de automatización, imprescindibles para poder configurar y ejecutar nuestros Runbooks:

  • Runbook: Se pueden generar nuevos o importar desde archivo o galería, basados en powershell, Python 2 o gráficos. El runbook contiene las secuencias necesarias para realizar el proceso que queremos automatizar mediante ejecución manual o programación.

  • Grupos de Hybrid Worker: La función Hybrid Worker nos permite usar automation para automatizar procesos que se ejecutan onpremises u otras nubes. Podemos instalar el rol de Hybrid worker en un equipo físico o virtual, Windows o Linux que se ejecuta en nuestro Datacenter. El requisito fundamental es la conexión puerto 445 de salida hacia las url de azure. Esta función daría para un post entero, aquí os dejo mas información: https://docs.microsoft.com/es-es/azure/automation/automation-hybrid-runbook-worker

  • Tareas de monitor: Función muy interesante, consta de 2 runbook, uno de monitorización y otro de acción. Un claro ejemplo seria, si en una carpeta aparece un archivo nuevo (runbook monitor) crea una copia de seguridad automáticamente (runbook de acción)

  • Módulos: Necesarios para poder confeccionar nuestros script de powershell, al igual que los instalamos en nuestro equipo, también debemos añadirlo a automation (Por ejemplo el modulo MSONLINE para ejecutar procesos en Office 365). Podemos agregarlos desde local en formato zip o bien instalarlos desde la "galería de módulos".

  • Credenciales: Se trata de nuestro "almacén seguro" de credenciales, donde las damos de alta para después poder añadirlas a nuestro código que conforma el runbook en cuestión. Un claro ejemplo sería unas credenciales de Administrador de algún servicio de Office 365.


Una vez descritos los fundamentos, vamos a crear nuestro runbook partiendo del siguiente escenario real:

"Usamos las reglas de transporte de Exchange Online para el tratamiento de mensajes enviados/recibidos a miembros de ciertos grupos de seguridad habilitados para correo. El mantenimiento de la membresía de estos grupos lo realizamos mediante script para la creación y actualización de contactos externos, el cual lanzamos manualmente cada día, tras la exportación de archivos CSV con estos contactos desde nuestro CRM" 

A priori simplemente deberíamos importar a automation nuestro script powershell (.ps1), crear el runbook y programar su ejecución ¿verdad? pero... nuestro script usa un archivo CSV local, el cual tenemos que ubicar en algún lugar accesible para el servicio de automation. En este caso pensamos en Hybrid Worker, no obstante no queremos instalar roles en maquinas locales y crear dependencias, nos interesa que la ejecución sea puramente en la nube así que vamos a usar el storage de azure, en concreto un File Share, para cargar ahí nuestros CSV y que estos sean consumidos por el runbook 👌



  1. Creación de un File Share dentro de nuestra cuenta de almacenamiento y carga de archivos CSV

Doy por supuesto que tenemos una cuenta de storage en Azure por lo que no veremos el proceso de creación, tan sencillo como cualquier otra tarea de infraestructura en Azure

Para crear un recurso de archivos accedemos a la cuenta de almacenamiento y en el panel principal seleccionamos "Archivos", creamos un nuevo recurso indicando nombre y cuota si lo requerimos:



Una vez creado el recurso tenemos 2 opciones para cargar el/los archivos CSV requeridos por nuestro script, bien manual con el botón de carga o una idea sería usar el botón "conectar" que nos permite crear una unidad de red conectada al recurso en cualquiera de nuestras maquinas locales, tras esta conexión persistente podríamos automatizar la copia o exportación de archivos CSV a esta ubicación que a su vez sería el storage de azure 👀



       2.  Creación del runbook

Accedemos a la cuenta de automatización-->Runbooks e importamos nuestro script sin modificar su código, tal cual funciona en local, debemos seleccionar el achivo .ps1 e indicar el tipo "powershell", además de ponerle nombre:





Una vez cargado nos aparecerá disponible y podremos ver, editar, publicar, iniciar....
*Cada vez que editamos el runbook es necesario publicarlo para que sea funcional. Si no vamos a modificar nada es recomendable usar la opción "Ver"



Bien, una vez importado es necesario adecuar el script para que pueda conectar a la cuenta de almacenamiento, teniendo en cuenta que el servicio de automation no puede leer o escribir directamente en el storage de azure, da igual si son blob, table o files...así que la solución es descargar el archivo a ubicación TEMP durante la ejecución del runbook para que este pueda ser leído y por tanto crear los contactos en Exchange online a partir de el. 

Este sería nuestro resumen de edición y adecuación del script que ejecutará automation para conseguir nuestro cometido y usar ese tiempo tan preciado en otros temas de mas valor para el negocio: 

  •  Variables para conectar a nuestra cuenta de almacenamiento:
$storageAccountName ="nombredelacuentadestorage"
$storageAccountKey ="clavealfanumericadelacuentadestorage"
$context = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey 

  • Variable donde se almacena la ubicación temporal donde se descarga el archivo CSV
$TempStorage=$env:TEMP + "\ExternalContacts.csv"

  • Instrucción para la descarga desde File Share a ubicación temporal del archivo csv en cuestión:
Get-AzureStorageFileContent -ShareName nombrefileshare -Path "ExternalContacts.csv" -Destination $env:temp -Context $context
  • Conexión a Exchange online donde se indica el nombre de unas credenciales que se han generado previamente con los permisos de Administrador de Exchange. De este modo evitamos escribir en nuestro código el usuario y la contraseña (explicado al inicio del post):
$UserCredential = Get-AutomationPSCredential -Name 'adm365'
$Session = New-PSSession –ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid -Credential $UserCredential -Authentication Basic -AllowRedirection
Import-PSSession -Session $Session -DisableNameChecking:$true -AllowClobber:$true | Out-Null

En el resto de script, donde no vamos a profundizar,  para conseguir la lectura del CSV y por tanto la  creación y adición de contactos a grupos habilitados para correo, tan solo debemos indicar como path del CSV esta variable $TempStorage 👌

Import-Csv $TempStorage | ForEach {New-MailContact ……………….


Solo nos quedaría probar, para ello tenemos el panel de prueba como recomendación previa a la publicación:



Y por ultimo "PUBLICAR"






        

      

      

       3. Programación del runbook 

Una vez lo tenemos testeado y publicado, es hora de programar su ejecución, en este caso será diaria a las 20:30 PM. Para ello debemos vincular una programación y si no existe ninguna, crearla. Las programaciones generadas pueden ser vinculadas o desvinculadas fácilmente a nuestros runbook






Hasta aquí este segundo post de la serie, en próximos post veremos lo más importante, monitorización y alertas sobre nuestros runbook integrando Azure Automation con Azure Monitor 


¡Un Saludo y Feliz automatización!






No hay comentarios: