Als ich vor langer Zeit einen “Root-Server” bei einem Hoster kündigte, mit dessen Performance ich überhaupt nicht glücklich war, vergaß ich eine kleine aber wichtige Anwendung die dort lief: Einen IP Adressen Reflektor. Ein simpler HTTPs Request wirft mir meine IP zurück. So ein Service ist zuweilen wichtig wenn man z.B. ACLs oder Firewalls testet. Oder wenn man auf Anmeldeseiten von WLAN-Portalen gefangen ist. Zwar gibt es tausende von Webseiten, die genau das gleiche tun, aber die existieren vor allem aus einem Grund: Sie wollen mir Werbung einblenden und mit meiner Not Geld verdienen.
So ein Reflektor Service lässt sich relativ einfach umsetzen: Ein Webserver kennt sowieso die anfragende IP Adresse, schließlich muß er mir die Daten ja zurück schicken. Es ist also ein leichtes genau diese Adresse auch als Rückgabe eines Aufrufs auszugeben. Dafür einen eigenen Root-Server zu betreiben schien mir etwas zu viel Aufwand. Zu Hause sollte der Service aber auch nicht laufen, da ich die Sicht von außen haben wollte.
In der Cloud Welt wird schon seit einiger Zeit die so genannte “Serverless” Sau durchs Dorf getrieben. Das Versprechen: Als Entwickler muss ich nur noch meinen Code bei den üblichen Cloud Anbietern abwerfen und die Magie sorgt für den Rest. Ich kann mich komplett auf die Entwicklung der Anwendung konzentrieren ohne mich mit Betriebssystemen, Server Diensten, Security Updates oder SSL Zertifikaten rumärgern zu müssen.
Klingt also genau nach dem, was ich für diese “Anwendung” gebrauchen kann. Als Hoster drängte sich natürlich AWS auf. Da mich AWS vor allem aber mit seiner Rechteverwaltung und der furchtbaren Dokumentation abschreckte, fiel meine Wahl auf die Google Cloud Platform (GCP). Als Sprache wählte ich spontan PHP - da hatte ich ungefähr im Kopf wie man die Remote Adresse direkt ausgibt.
Also los gehts: Die GCP Anleitung (Hello World with PHP) meint ich solle mir einfach ein Beispiel runterladen, das in die Cloud pushen und fertig. Nix einfacher als das. Meine Anwendung ist nichts weiter als ein:
<?php
echo $_SERVER["REMOTE_ADDR"] . "\n";
Noch kurz die app.yaml angepasst, ‘gcloud app deploy’ aufgerufen und siehe da:
$ curl ip.cloudgoere.de
52.28.137.140
Das Ding läuft und tut wieder das was es soll.
In der Realität wurden dazu in der Google Cloud natürlich virtuelle Maschinen und Container gestartet. Server konfiguriert, Serverdienste angepasst und eine Menge anderer Kram gemacht. Serverless ist also relativ - auch wenn ich von den Servern jetzt dank Cloud und ganz viel Automatisierung (Magie) gar nichts mehr sehe. Dafür produziert die Anwendung jetzt Kosten und ein Cloud Anbieter freut sich über einen weiteren Kunden.