Cloud Functions
Während meines Einsatzes bei Interdiscount durfte ich zwischenzeitlich auch ein bisschen mit Cloud Functions auf der GCP arbeiten und experimentieren – es war eine Achterbahn der Gefühle. Also: schnalle dich an und geniesse die Fahrt, jetzt wird es rasant!
Cloud Functions? Das klingt so wolkenhaft-luftig-leicht und prophezeit gleichzeitig Schweizer Präzision und Funktionalität. Du bist jetzt schon begeistert, fragst dich aber noch: Was ist das eigentlich?
Back to textbook-speech: «Google Cloud Functions ist eine serverlose Ausführungsumgebung zum Erstellen und Verbinden von Clouddiensten. Mit Cloud Functions schreiben Sie einfache Funktionen, die einem einzigen Zweck dienen und an Ereignisse gebunden sind, die von Ihrer Cloudinfrastruktur und Ihren Diensten ausgegeben werden. Die Funktion wird ausgeführt, wenn ein beobachtetes Ereignis ausgelöst wird. Ihr Code wird in einer vollständig verwalteten Umgebung ausgeführt. Sie müssen weder eine Infrastruktur bereitstellen noch irgendwelche Server verwalten.»
Der grosse Vorteil besteht darin, dass diese Funktionen nur dann ausgeführt werden, wenn sie tatsächlich benötigt werden – dies geschieht, wie bereits beschrieben – ereignisbasiert. Die auslösenden Ereignisse können vielfältig sein: von HTTP-Triggern über Pubsub-Ereignisse bishin zu Filestorage-Events und Eventarc-Triggern. Dabei skaliert die Funktion automatisch je nach Last, was sowohl die Entwicklungszeit verkürzt als auch Betriebskosten reduziert. Google Cloud Functions unterstützt mehrere Programmiersprachen, was Entwicklern eine hohe Flexibilität bei der Wahl der besten Tools und Frameworks für ihre Anwendungsfälle bietet.
Soweit die Theorie, doch wie sieht es in der Praxis aus?
Wir befanden uns in einem sehr dynamischen Setting, ein grosser Teil der IT-Infrakstruktur sollte neu aufgesetzt werden, der Zeitplan war knapper als brasilianische Bademode. Da kam das Versprechen, schnell und unkompliziert kleinere Tasks ausführen zu können wie gerufen, und ich nehme vorweg, die Cloud Functions haben uns tatsächlich geholfen schnell teamübergreifend voranzukommen. Damit nahm die Achterbahn Fahrt auf.
Die erste Ruckelei entstand bereits recht früh: Wir trennen für gewöhnlich sauber zwischen Infrastruktur (as Code) und Anwendungscode, sowohl was die Deployment-Mechanismen als auch die Coderverwaltung angeht. Cloud Functions passen in diese Kategorisierung nicht so wirklich rein, ohne dass das Abstraktions-OCD Kompromisse hinnehmen musste.
Dennoch hatten wir einige Tasks, für die Cloud Functions sehr geeignet schienen. Die meisten davon waren klassischen Mapping-Tasks zwischen verschiedenen Datenmodellen und die darauf folgende Distribution der gemappten Daten.
Mit unserem IaC-Tool erfuhren wir schnell einige Schwierigkeiten:
- der Functions Code musste als Zip bereitgestellt werden, das bedeutete, dass dieses immer wieder dynamisch generiert werden musste. Der Code um den Code zu zippen musste also auch geschrieben werden.
- das Code Zip muss in ein Storage Bucket geladen werden.
Hier ruckelte die Achterbahn schon heftig, aber das ist noch nicht alles:
Sollte der Code für die Cloud Functions geändert werden, wurde er komplizierter: GCP bekam nicht mit, dass sich das Source-Archiv geändert hat. Um dieses Problem zu lösen hatten wir einige Ansätze, z. B. mit jedem IaC-Tool Lauf die Functions zu löschen und neu zu deployen.
Hier wurde dann doch den meisten Achterbahn-Insassen etwas flau im Magen.
Mit einigem Mehraufwand als ursprünglich erwartet, hatten wir dann aber doch ein Setup, das flexibel und recht zuverlässig funktioniert hat, zumindest in der POC-Phase.
Fazit
Im Endeffekt haben wir die meisten Cloud Functions wieder abgebaut und das Mapping an eine andere Stelle ausgelagert.
Dennoch bin ich froh, diese Technologie kennengelernt zu haben und kann grosses Potenzial darin erkennen. Und damit endet die Achterbahnfahrt, mit einigen Hochs und einigem Geholper.