Cerrar
InicioAzureMicrosoft Azure: Iniciar un Runbook desde un Webhook llamado desde PowerShell

Microsoft Azure: Iniciar un Runbook desde un Webhook llamado desde PowerShell

Seguro que muchos de vosotros habéis creado/configurado diferentes runbooks de iniciado o apagado de servidores en Azure, algo que nos viene muy bien desde el punto de la automatización y del gobierno del coste en Azure. Entiendo que, sabéis que “todo” runbook tiene un webhook (un webhook permite que un servicio externo inicie un runbook determinado en Azure Automation mediante una sola solicitud HTTP) al cual podemos “llamar” desde una solicitud HTTP POST, por lo que nos permite infinidad de posibilidades de ejecutarlo desde Internet y con seguridad.

Hoy voy a mostraros algo muy sencillo, pero que a buen seguro os dará  ideas para todos los automatismos que queráis preparar. La idea es poder ejecutar una Webhook para iniciar un Runbook desde un simple script de PowerShell (Invoke-RestMethod), algo que podemos ejecutar en On-Premises (si, parece contradictorio, pero es solo para que veáis que es posible) desde una tarea programa en nuestros servidores.  Desde apagar hasta cambiar de tamaño un servidor o ejecutar cualquier proceso en Azure, lo que se os ocurra que podáis configurar en vuestras cuentas de automatización y lanzar desde Azure pero ahora invocándolo desde una solicitud HTTP POST vía PowerShell. Aquí la “infografía” para esta ocasión:

A continuación os cuento lo que haremos en este artículo:

  1. Crear una cuenta de automatización en Azure
  2. Configurar un Runbook para encender un servidor
  3. Crear un Webhook para lanzar el Runbook creado anteriormente
  4. Ejecutar el Runbook llamando al Webhook desde PowerShell

Creación de una cuenta de automatización:

Yo como ya tengo un grupo de recursos creado para almacenar la cuenta de automatización, simplemente pulsaré en Agregar para acceder al Marketplace:

Buscamos por Automatización (automation en inglés) y pulsamos en Crear:

Escribimos un nombre para la cuenta de almacenamiento, elegimos la suscripción, grupo de recursos y región donde vamos a crear dicha cuenta y pulsamos en Crear:

Una vez hemos pulsado en crear se iniciará el proceso de creación de nuestra cuenta de automatización.

En cuestión de segundos ya tenemos nuestra cuenta, pulsamos en Ir al recurso para acceder a su configuración:

Una vez dentro de la cuenta de automatización pulsamos en Runbooks en la sección de Automatización de procesos:

Por defecto, el sistema tiene varios ejemplos creados, los cuales podemos ver para revisar el código que tienen y que nos vendrá muy bien para conocer como iniciar sesión en Azure desde las diferentes plataformas.

Creación de un runbook para iniciar un servidor

Una vez que ya tenemos nuestra cuenta de automatización preparada, pulsamos en Crear un runbook

Nuestro script será de PowerShell, por lo que en Tipo de Runbook elegimos PowerShell:

Escribimos un nombre para el script, elegimos como hemos comentado PowerShell y pulsamos en Crear:

Una vez que se ha creado lo primero que hará será llevarnos al editor del script de PowerShell, en cual podemos escribir nuestro script:

Aquí os dejo mi “código” de PowerShell para conectarse

$connectionName = “AzureRunAsConnection”
$servicePrincipalConnection=Get-AutomationConnection -Name $connectionName
“Logging in to Azure…”
Add-AzureRmAccount `
-ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
Start-AzureRmVM -ResourceGroupName “RG-NorthEurope-VM-Identity” -Name “SRV-DC01” -Force

Una vez tengamos nuestro script, podemos pulsar en Panel de prueba (captura anterior) y podemos ejecutar nuestro script y ver los resultados de su ejecución:

Una vez se haya completado la ejecución, nos mostrará una pantalla con la información resultante:

Si todo está correcto, pulsamos en Publicar para dejar listo para ejecutarse nuestro script de iniciado de servidor:

Una vez publicado, si queremos, podemos planificar su ejecución automática (desde Azure) pulsando en Vincular a una programación:

Ahora pulsamos en Programar (Vincular una programación a su Runbook)

Si tuviéramos alguna programación creada, la podríamos seleccionar, en caso contrario pulsamos en Crear una programación nueva:

Escribimos un nombre y ajustamos los siguientes parámetros según nuestras necesidades:

Podemos configurar que la tarea expire en algún momento, pero sino es lo que queremos, dejamos marcado No (opción por defecto) en la sección de Configurar expiración y pulsamos en Crear:

Automáticamente se ha creado y la tenemos ya seleccionado, ahora pulsamos en Aceptar para finalizar la configuración.

Y listo, ya tenemos nuestro script publicado y con su programación.

Siempre es recomendable probar que funciona correctamente, para ello pulsamos en Inicio en nuestro runbook:

Pulsamos en Sí  y se iniciará automáticamente el runbook:

Si accedemos al proceso de ejecución, podemos ver el detalle de la ejecución del runbook:

Y claro, para corroborar que el script ha funciona bien, accedemos al servidor en cuestión y verificamos su estado, comprobando que está En ejecución:

Y por último, si accedemos a su Registro de actividad, vemos que se ha iniciado el servidor y ha sido por la cuenta de automatización que hemos configurado anteriormente:

Creación de un Webhook de nuestro Runbook

Ahora que ya tenemos nuestro runbook creado y configurado (la planificación no era necesaria, solo era para que vierais como se configura), vamos a crear nuestro Webhook (webhook permite que un servicio externo inicie un runbook determinado en Azure Automation mediante una sola solicitud HTTP POST), para ello accedemos nuestro runbook y pulsamos en Agregar webhook:

Pulsamos en Webhook (Crear nuevo Webhook):

Escribimos un nombre para nuestro Webhook, el estado lo dejamos habilitado  y especificamos una fecha de expiración.

Antes de pulsar en Aceptar, debemos copiar la URL del Webhook:

Para copiar la URL, básicamente pulsamos sobre el icono de la derecha de la caja de texto donde está la URL:

Una vez copiada, dejamos la URL en un fichero de texto, debemos guardarla para utilizarla posteriormente. Una vez que tengamos copiada la URL del Webhook, entonces pulsamos en Aceptar:

Y ahora pulsamos en Crear para completar el proceso de creación de nuestro Webhook:

En cuestión de segundos tenemos ya listo nuestro Webhook:

Desde nuestro runbook podemos acceder a la sección de Webhooks y podemos ver el que hemos creado recientemente:

Ejecutar el Runbook llamando al Webhook desde PowerShell:

Ahora por último, lo que nos queda es como ejecutar nuestro Runbook llamando al Webhook desde PowerShell. Para esto, tenemos el comando Invoke-RestMethod y aquí el “script sencillo” para llamar al Webhook vía HTTP POST:

$UrlWebhook = ‘url-que-hemos-copiado-anteriormente-en-el-webhook’
Invoke-RestMethod -Method post -Uri $UrlWebhook

En la siguiente captura de pantalla no muestro la URL completa, puesto que, el token de acceso está en la URL.. vamos, que si alguien tiene esa URL puede ejecutar el webhook cuando quiera :-). No hay que decir que, es tráfico HTTPS con TLS1.2 (esperando el TLS 1.3).

Si una vez hemos iniciado el Webhook accedemos a su configuración, vemos que su estado es En ejecución:

Si accedemos a los detalles de la ejecución, vemos que el resultado ha sido OK:

Y si ahora volvemos al servidor que teníamos apagado .. pues ahora lo hemos iniciado desde PowerShell directamente desde Internet!!

Como podéis apreciar, es muy sencillo y creo que muy útil para muchas cosas. Ahora solo hemos tirado de un script sencillo para apagar el servidor, pero podríamos realizar cualquier acción que esté soportada en Azure. Ahora, este script lo podemos configurar en una tarea programada en cualquier servidor y se lanzaría sin problema alguno.

Las utilidades son muchas, pero viendo que podemos ejecutarlo desde PowerShell, tenemos múltiples opciones de configuración y ejecución. Además, como la llamada es vía HTTP POST podemos configurarlo desde cualquier solución de orquestación de procesos (SCCM, FreshService, etc..)

Como siempre, espero que os haya gustado y ahora os toca probarlo a vosotros!!!

Microsoft Teams: Tre
Windows Virtual Desk
NO HAY COMENTARIOS

Este sitio web utiliza cookies. Si continúas navegando, consideramos que aceptas su uso. Puedes obtener más información en nuestra política de cookies. ACEPTAR

Aviso de cookies
Share This