
Non-Production-Umgebungen in der Cloud sind eine feine Sache: Sie stehen jederzeit bereit, genau dann, wenn Sie sie brauchen. Allerdings hat dieser Komfort seinen Preis. In der Regel laufen Non-Production-Instanzen vor allem tagsüber – und im Tagesgeschäft denkt niemand daran, sie nachts oder am Wochenende herunterzufahren. Auch wenn jede einzelne Instanz nur wenige Cent pro Stunde kostet, summiert sich das im Laufe eines Monats schnell auf mehrere tausend Dollar.
Als Premier- und MSP-Partner von Google arbeiten wir bei DoiT International mit Hunderten Startups und Unternehmen zusammen, die ihre workloads auf der Google Cloud Platform und insbesondere auf Google Compute Engine betreiben. Unser Anspruch: die monatlichen Cloud-Ausgaben unserer Kunden zu senken, indem wir smartere und kosteneffizientere Systeme entwerfen.
Genau in diesem Sinne stellen wir heute Zorya als Open Source bereit. In der slawischen Mythologie sind die Zoryas zwei Schutzgöttinnen. Die Zoryas verkörpern den Morgen- und den Abendstern – wer Neil Gaimans American Gods gelesen oder gesehen hat, wird sich an die beiden Schwestern erinnern.
Was ist Zorya nun konkret? Eine kleine Software, die Sie in Ihrem eigenen Google-Cloud-Platform-Konto betreiben. Damit konfigurieren Sie Zeitpläne für Ihre Google Compute Engine Instanzen und definieren Richtlinien, die über alle Projekte Ihrer Organisation hinweg greifen.
Zorya sollte einfach zu installieren und zu warten sein. Daraus haben wir folgende Designziele abgeleitet:
- Zorya serverlos betreiben, um den Verwaltungsaufwand gering zu halten
- Mehrere Zeitpläne und Richtlinien anlegen können
- Mehrere Projekte aus einer einzigen Zorya-Instanz heraus unterstützen
- Niedrige Betriebskosten für Zorya selbst
Wir haben uns entschieden, Zorya auf Google App Engine in der Standard Environment zu betreiben. Allein damit erfüllen wir zwei der Anforderungen:
- Serverloser Betrieb dank App Engine: keine Server-Verwaltung, dafür Hochverfügbarkeit und Skalierbarkeit von Haus aus.
- Niedrige Betriebskosten – durch das Preismodell von Google App Engine und den Umstand, dass Zorya nur einmal pro Stunde "aufwacht" und ansonsten keinerlei Ressourcen verbraucht.
Das Backend von Zorya ist in Python geschrieben, das Frontend basiert auf React. Als Datenbank für die Konfigurationsdaten setzen wir Google Cloud Datastore ein.
Backend
Das Backend stellt eine schlanke RESTful-API bereit, um Schedules und Policies auszulesen und zu setzen.
Eine Schedule-Entity besteht aus einem Namen, einer Zeitzone und einer 7×24-Matrix, die jede Stunde jedes Wochentags abbildet. Der Wert 0 bedeutet, dass die Instanz gestoppt sein soll, der Wert 1, dass sie online sein soll.
Eine Policy-Entity besteht aus einem Namen, einer Liste von Projekten, dem Namen des zugehörigen Schedules und einer Liste von Google-Compute-Engine-Labels, also Paaren aus Name und Wert.
{ "name": "My policy", "tags": [\ {\ "dev": "sleeper",\ "staging": "resting"\ }\ ], "projetcs": [\ "project-x",\ "y-project"\ ], "schedulename": "my schedule name"}Die API ist bewusst schlank gehalten und bietet lediglich acht Endpunkte:
- add_policy
- list_schedules
- del_schedule
- get_schedule
- add_policy
- list_policies
- get_policy
- del_policy
Die API-Dokumentation und Beispielcode für Consumer in verschiedenen Sprachen finden Sie hier.
Über den integrierten Scheduler von Google App Engine läuft ein Task, der die Policies prüft und feststellt, ob der Status von Instanzen geändert werden muss.
Ist eine Statusänderung nötig, iteriert Zorya über die betroffenen Projekte und passt den Zustand der Instanzen mit den entsprechenden Label-Paaren an.
https://gist.github.com/avivl/ee9e7c11c254e25b890d48c1a873fdc1
Authentifizierung
Damit Zorya Instanzen in jedem Projekt Ihrer Organisation in Ihrem Namen verwalten darf, legen Sie in Ihrem Organization IAM einen neuen Eintrag an und weisen dem Service-Konto von Zorya die Rolle "Compute Admin" zu.
Rufen Sie zunächst https://console.cloud.google.com auf, wählen Sie im Menü "IAM & Admin" und anschließend im Dropdown am oberen Seitenrand den Namen Ihrer Organisation aus (nicht nur ein einzelnes Projekt):

Das Service-Konto, dem Sie die Berechtigungen zuweisen, lautet: [email protected]. Ersetzen Sie project-id einfach durch die tatsächliche Projekt-ID, in der Sie Zorya bereitstellen.
Frontend
Da die meisten Nutzer ohnehin direkt die API von Zorya ansprechen werden, haben wir ein bewusst schlichtes User-Interface zum Anlegen von Schedules und Policies gebaut. Das Frontend basiert auf ReactJS und läuft im Default-Modul der App-Engine-Anwendung.
Für die Anmeldung setzen wir auf Cloud Identity-Aware Proxy. Cloud IAP prüft die Identität eines Nutzers und entscheidet, ob dieser auf die Anwendung zugreifen darf. Die Einrichtung ist denkbar einfach: Öffnen Sie die GCP Console, aktivieren Sie IAP für Ihre App-Engine-Anwendung und fügen Sie die Nutzer oder Gruppen hinzu, die Zugriff auf Zorya erhalten sollen.
Um die Oberfläche zu nutzen, öffnen Sie im Browser einfach project-id.appspot.com und ersetzen project-id durch Ihre eigene Google-Cloud-Platform-Projekt-ID.
Über die Oberfläche legen Sie im Handumdrehen einen neuen Schedule an – wie in diesem Beispiel: Montag bis Freitag, 8 bis 19 Uhr (US/Eastern). In diesem Zeitraum laufen Ihre Instanzen; außerhalb davon stoppt Zorya sie und startet sie am nächsten Tag wieder.
Zorya Schedule Editor
Sobald der Schedule steht, brauchen Sie eine Policy, um ihn auf bestimmte Instanzen anzuwenden. Angenommen, Sie möchten den Schedule auf alle Instanzen im Projekt doit-playground mit den Labels env:dev, role:frontend und app:reoptimize anwenden – dann werden ausschließlich Instanzen erfasst, die alle drei Label-Paare tragen.
Eine Zorya-Policy einrichten
Kostensenkung
Zur Auswertung unserer Google-Cloud-Platform-Kosten setzen wir DoiT Cloud Intelligence™ ein. DoiT Cloud Intelligence schlüsselt die Kosten innerhalb einer GCP-Organisation pro Label auf und visualisiert sie übersichtlich.
Wir nutzen Zorya seit Dezember 2017 intern. Damals lagen unsere Google-Compute-Engine-Kosten im Schnitt bei rund 780 USD pro Tag. Seit Zorya in unseren Entwicklungs- und Testumgebungen läuft, sind die GCE-Kosten auf durchschnittlich nur noch 320 USD pro Tag gefallen – ein Rückgang um knapp 60 %.
DoiT Cloud Intelligence Dashboard
Zum Abschluss
Wenn auch Sie Zorya einsetzen möchten, um Ihre monatliche Google-Cloud-Platform-Rechnung zu optimieren, freuen wir uns über einen Star auf GitHub! ;-) Pull Requests sind ausdrücklich willkommen – wir freuen uns über jeden Beitrag, der Zorya weiterbringt.
Lust auf mehr? Schauen Sie in unserem Blog vorbei oder folgen Sie Aviv auf Twitter.