Azure Webhook - Universelles Runbook zum Aufrufen aller Runbooks
Webhooks in Azure Automation sind ein schneller und einfacher Weg, um die Vorzüge der Microsoft Azure Plattform in bereits bestehende Automations-Mechanismen zu integrieren.
Pro Runbook erstellt man schnell einen Webhook und ruft diesen über eine REST-Methode auf. Sobald allerdings Parameter im Spiel sind, muss man diese entweder schon bei der Erstellung des Webhooks mitgeben oder das Runbook so umschreiben, dass die Parameter durch ein externes Skript weitergegeben werden.
In dem folgenden Blog-Post von Stefan Stranger beschreibt er, wie man ein Runbook über einen Webhook mit externer Parameter-Übergabe aufruft.
Nun stellt sich die Frage, muss ich jedes Runbook umschreiben und mit einem Webhook versehen? Dies ist natürlich möglich, aber sorgt für viel Arbeit und ist nicht wirklich praktikabel, da sich die Ausführung auf einen Webhook beschränkt.
Ein Kollege brachte mich auf die Idee, ein universelles Runbook zu schreiben, welches über einen Webhook aufrufbar ist und bei dessen Aufruf genau das Runbook startet, welches ich eigentlich ausführen möchte. Dies hat den großen Vorteil, dass alle Runbooks einen normalen Aufbau vorweisen (Parameter) und gleichzeitig auf unterschiedliche Arten gestartet werden können.
Das universelle Runbook Start-AzureAutomationRunbookByWebhook ist nachfolgend zu finden:
https://gist.github.com/Burbert/f5929bb66fed57eda2dc1397181380eb
Um das Ganze an einem Beispiel zu demonstrieren, soll das folgende Runbook:
https://gist.github.com/Burbert/617f5489f2f166d3c5243dc0c79919fc
durch Start-AzureAutomationRunbookByWebhook ausgeführt werden.
Der Aufruf findet durch das folgende Skript statt:
https://gist.github.com/Burbert/b2d5a33a040a3bc3edccc74f42c24d11
In der Variable $Body werden alle Parameter deklariert, die an den Webhook übergeben werden sollen. Alle Parameter, die mit dem Präfix rbp_ beginnen, werden an das Runbook weitergegeben, welches keinen Webhook hat und die ohne das Präfix werden von dem Runbook Start-AzureAutomationRunbookByWebhook benötigt. Das Skript ist so geschrieben, dass es auf einem Hybrid Runbook Worker ausgeführt wird, dies kann jedoch einfach angepasst werden, sodass auch Azure Worker verwendet werden kann können.
Das Präfix rbp_ wird im Laufe der Verarbeitung entfernt und dient nur zur Identifikation.
Führt man nun das Skript Invoke-Runbook.ps1 mit entsprechenden Werten aus, startet das Runbook Start-AzureAutomationRunbookByWebhook mit den folgenden Parametern:
Webhookdata nutzt die Json-Notation und verarbeitet die Daten entsprechend. Der Output des Jobs sieht wie folgt aus:
In der Job-Histore des Runbooks Write-OutputTest sieht man, dass der Job mit den richtigen Parametern gestartet wurde:
die entsprechende Ausgabe generiert wurde:
und schließlich als erfolgreich abgeschlossen wurde: