Wie man Auto-Shutdown von Azure VMs stoppt/verhindert

Eines der coolen Features bei Microsoft Azure sind immer diese Neuerungen, die man zwar wahrnimmt, aber dann doch nicht einsetzt, weil man annimmt, dass es in der Umsetzung dann doch zu viel Aufwand ist. Mit Nichten! Azure Auto-Shutdown ist relativ neu und hilft ganz konkret bei den Kosten Einsparungen.

In meinem vergangenen Artikel habe ich die Kosten und dessen Einsparungsmöglichkeiten mit Azure Automation für virtuelle Server gezeigt. Schwierig ist dabei immer die Abschätzung, WANN schaltet man die VMs dann wirklich aus? Hier zeige ich eine Lösung, wie man diese Zeit auf FRÜHER setzten kann und bei Bedarf dann doch auf SPÄTER verschieben kann.

Fragestellung

Das Auto-Shutdown Feature kann 15 Minuten vor dem tatsächlichen Abschalten einen Webhook auslösen. Dieser Webhook kann in seinem BODY aber ein paar URLs mitschicken, die dann eine Verzögerung oder gar Verhinderung der Abschaltung ermöglichen.

Lösung

Mittels Azure Logical App kann man diesen Webhook entgegennehmen und eine Aktion ausführen lassen. Diese Aktion soll in meinem Fall eine Mailverständigung sein. Dies ist aber mit geringem Aufwand auch mit einer andere Aktion verknüpfbar.

Aktivieren Sie den Webhook bei der Virtuellen Maschine

  • Gehen Sie zur gewünschten Virtuellen Maschine
  • Gehen Sie zur der Einstellung Auto-Shutdown
  • Setzten Sie den Punkt “Send notification 15 minutes before auto-shutdown” auf Yes.

Azure Auto-Shutdown Configure

  • Geben sie die Webhook URL ein, die wir später im Artikel mittels Logic App erstellen.
  • Drücken Sie auf Save, um diese Einstellungen zu speichern.

 

Erstellen Sie eine Logic App

  • Gehen Sie auf + NEW
  • Suchen sie nach Logic app

Azure Logic App

  • Geben Sie einen Namen für die Lösung ein
  • Klicken Sie auf Create

Konfigurieren Sie die bereitgestellt Vorlage

Die Logic App hat einen schönen Designer, mit dem man die gewünschten Feature zusammenklicken kann.

  • Wir starten mit einer generischen HTTP Request-Response Vorlage

image

  • Im Request Feld klicken Sie auf Edit

image

  • Kopieren Sie den unten stehenden JSON Text in die aufgehende Textbox. Diese Felder werden Ihnen vom Webhook übergeben. Bei DevTest-Labs wird der owner noch gesetzt. Bei VMs wird dieses Feld leer gelassen!
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "properties": {
    "delayUrl120": {
      "type": "string"
    },
    "delayUrl60": {
      "type": "string"
    },
    "eventType": {
      "type": "string"
    },
    "guid": {
      "type": "string"
    },
    "labName": {
      "type": "string"
    },
    "owner": {
      "type": "string"
    },
    "resourceGroupName": {
      "type": "string"
    },
    "skipUrl": {
      "type": "string"
    },
    "subscriptionId": {
      "type": "string"
    },
    "text": {
      "type": "string"
    },
    "vmName": {
      "type": "string"
    }
  },
  "required": [
    "skipUrl",
    "delayUrl60",
    "delayUrl120",
    "vmName",
    "guid",
    "owner",
    "eventType",
    "text",
    "subscriptionId",
    "resourceGroupName",
    "labName"
  ],
  "type": "object"
}
  • Im Response Feld einfach die Status Code 200 belassen.
  • Jetzt nimmt die Logic App jeden HTTP POST Request an und sendet immer HTTP/200 zurück Winking smile
  • Gut soweit.

Die eigentliche Aktion integrieren –> Mailversand

Die eigentliche Aktion wird nun hinzugefügt. Hier können weitere Schritte, die nach dem Erhalt der HTTP Nachricht und vor dem retournieren der HTTP Response ausgeführt wird.

  • Zwischen den beiden Schritten, klicken Sie auf das Plus Zeichen

image

  • Ich habe mich dazu entschieden, die Nachrichten in Microsoft Teams zu empfangen, daher ist hier Teams auszuwählen. Also wählen wir Choose an action. Suchen Sie nach Teams – Post message.

image

  • Dann muss die Nachricht in der Logic App “nur” mehr zusammengebaut werden. Die zu befühlenden Felder sind eigentlich selbst erklärend. Wenn man Teams / Slack kennt, gibt es da verschiedene Teams und Channels. Nach Eingabe der Login Daten werden diese konkret aufgelöst und man kann diese aus einer Drop-Down Liste auswählen.

image

  • Nach Eingabe dieser Daten drücken Sie auf Save.
  • meine URL sieht dann etwa so aus:

https://prod-27.westeurope.logic.azure.com:443/workflows/dd37963afa7f8d3c/triggers/request/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Frequest%2Frun&sv=1.0&sig=vHukgvd9dQhk3DMyx4

Aktualisieren der URL im Auto-Shutdown Feature

  • Die nun erzeugte URL tragen wir nun bei der Virtuellen Maschine noch im Auto-Shutdown Feature bei Webhook ein.

 

Zum Testen eine Uhrzeit wählen, die 16 Minuten in der Zukunft liegt ,)

  • So sieht dann meine Nachricht in MS Teams aus!

image

Fertig!

 

image

Nach Klick auf den Link “HIER” habe ich den Shutdown vom Server sqlserver-0 verhindert und gestoppt. Heute ist Wartungsfenster und ich will die VM laufen lassen.

Die restliche Woche soll die VM ruhig um 17:30 herunterfahren.

 

 

Quelle

https://blogs.msdn.microsoft.com/devtestlab/2016/08/30/set-up-devtest-labs-to-send-auto-shutdown-notification/