Aug04
Spring-Boot-Microservice auf Cloud Foundry deployen

In diesem Artikel zeige ich, wie eine Spring-Boot-Anwendung auf einer PaaS in der Cloud bereit gestellt wird. Konkret nutze ich Cloud Foundry und das Angebot von IBM Bluemix. Dies geht in wenigen Schritten und ist überraschend einfach.

Szenario

cf-bluemix-logoIm letzen Artikel habe ich gezeigt, wie mit Spring-Boot sehr einfach ein Microservice gebaut werden kann. Jetzt soll der Service anderen Nutzern zur Verfügung gestellt werden.
Anstatt selbst einen Server aufzusetzen, soll eine Cloud Plattform genutzt werden. Das befreit uns von einigen administrativen Basisarbeiten, die andere für einen machen können. Ich möchte aber nicht nur Infrastruktur aus der Cloud beziehen, also eine IaaS (Infrastructur as a Service), sondern eine ganze Plattform, die Laufzeitumgebungen wie Application Server, Datenbanken und weitere Dienste bereits mitbringt. PaaS (Plattform as a Service) gibt es verschiedene, ich möchte keine Abhängigkeit zu einem Hersteller und deshalb fällt meine Wahl auf Cloud Foundry. In diesem Beispiel werde ich Bluemix von IBM nutzen.

Cloud Foundry und Bluemix

Cloud Foundry ist eine Open Source Cloud Computing Plattform as a Service. Es gibt eine ganze Reihe von Unternehmen, die Cloud Foundry unterstützen.
Bluemix ist die Cloud Computing Plattform von IBM, die auf Cloud Foundry aufsetzt. Bluemix bietet eine ganze Reihe von Services die genutzt werden können. Von verschiedenen Laufzeitumgebungen wie Java Application Server oder Node.js, über Datenbanken und Messaging Systemen, bis hin zu Analytics Lösungen und kognitiven Systemen wie Watson. Bei Bluemix kann sich jeder registrieren, die ersten 30 Tage ist die Nutzung kostenlos. Anschließend muss man eine Kreditkarte hinterlegen um kostenpflichtige Dienste bezahlen zu können. Es gibt aber weiterhin einen Einstiegslevel, der kostenlos ist. IBM rechnet nach GB/h ab, also nach GB Hauptspeicher, die man seiner Anwendung zugewiesen hat und die pro Stunde reserviert werden. Die ersten 370 GB/h im Monat sind kostenlos. Andere Dienste werden nach Anzahl API Calls abgerechnet, auch hier sind bei einigen Diensten eine gewissen Anzahl Aufrufe pro Monat kostenlos. Ein Blick lohnt sich und es gibt einen Preisrechner, der einem zeigt, was die Nutzung kosten würde.
Ich möchte an dieser Stelle nicht tiefer in Cloud Foundry und Bluemix einsteigen, sondern direkt in die Praxis gehen.

Vorbereitung

Als erstes muss man sich bei Bluemix registrieren und einen Account anlegen. Das geht ganz einfach über die Bluemix Homepage auf dem Button Registrieren. Die Registrierung ist selbsterklärend und bedarf hier keiner weiteren Erklärung. Wichtig ist nur zu wissen, dass man verschiedene Organisationen und Arbeitsbereiche anlegen kann. Zudem muss eine Region ausgewählt werden, in der die Dienste gehostet werden. Diese Informationen benötigen wir später. Die Region kann zur Stolperfalle werden. Man kann zwischen den Regionen wechseln. Hat man seine Dienste in der Region UK eingerichtet und hat die Region US ausgewählt, sieht man die eingerichteten Dienste nicht. US ist per default ausgewählt, also nicht verwundert sein, wenn alle Dienste weg sind, zunächst schauen, ob die richtige Region im Profil ausgewählt ist.

Bluemix bietet eine Web-Oberfläche über die man alles machen kann. Wir wollen aber nicht die Oberfläche nutzen, sondern die Cloud Foundry Kommando Konsole. Das hat zwei Vorteile:

  1. Wir können das Deployment automatisieren und somit eine Continous Delivery Pipeline aufbauen.
  2. Wir sind nicht Abhängig von Bluemix sondern nutzen den Hersteller übergreifenden Standard von Cloud Foundry

Der einfachste Weg, um an die Konsole zu kommen, ist in der Bluemix Oberfläche eine Beispiel-Anwendung anzulegen. Dazu in den Kategorien Compute auswählen und auf den Button mit dem + klicken. Liberty for Java auswählen, der Anwendung einen Namen geben und Erstellen klicken. Die Anwendung wird angelegt und eine Einführungsseite angezeigt, auf der man die Konsole für Bluemix und für Cloud Foundry (CF) runter laden kann. Die Cloud Foundry Konsole runter laden und lokal installieren. In der Einführung wird auch Schritt für Schritt erklärt, wie man sich über die Konsole bei Bluemix anmeldet und eine Anwendung bereit stellt. Bei der Anmeldung werden die Informationen zu Region, Organisation und Arbeitsbereich benötigt. Die Einführung zeigt schon die richtigen Parameter an, die man angeben muss. In der Einführung wird erklärt, wie man sich mit der Bluemix Konsole anmeldet und mit der CF Konsole deployed. Im folgenden Abschnitt werde ich die einzelnen Schritte ausschließlich mit der CF Konsole zeigen. Nach der Installation der Konsole kann die Beispielanwendung wieder gelöscht werden.

Deployment

Wir haben jetzt eine fertige, getestete und gebaute Spring-Boot-Anwendung als jar-File (vom letzten Artikel) vorliegen. Wir sind bei Bluemix registriert und haben die Cloud Foundry Kommandozeile lokal installiert. Damit sind alle Voraussetzungen erfüllt, um die Anwendung zu deployen. Dazu öffnen wir ein Kommandozeilen Fenster auf dem lokalen Rechner und führen folgende 3 Schritte durch:

  1. Verbindung zu Bluemix herstellen mit dem Befehl:
    cf api https://api.<Region>.bluemix.net
    In der URL muss anstelle <Region> das Kürzel für die Region verwendet werden, in der man seine Dienste laufen lassen will. Für UK sieht der Befehl wie folgt aus:
    cf api https://api.eu-gb.bluemix.net
  2. Bei Bluemix anmelden mit dem Befehl:
    cf login -u <E-Mail> -o <Organisation> -s <Arbeitsbereich>
    Bei der Anmeldung muss man die E-Mail-Adresse angeben, mit der man sich registriert hat. Zudem werden angegeben, die Organisation und der Arbeitsbereich, in dem man arbeiten und die Dienste bereit stellen möchte.
    Nach dem der Befehl gesendet wurde, wird man aufgefordert sein Passwort einzugeben.
  3. Spring-Boot-Anwendung deployen mit dem Befehl:
    cf push <Name der Anwendung> -p <Pfad auf das jar-File>
    Mit cf push wird die Anwendung deployed. Man muss angeben, welchen Namen die Anwendung haben soll und den Pfad mit dem jar-File, das deployed werden soll. Der IBAN Konverter wird mit folgendem Befehl deployed:
    cf push spring-boot-iban -p target\Spring-Boot-Microservice-0.0.1.jar

Das wars. Das jar-File wird hoch geladen, Bluemix richtet automatisch beim ersten Deployment eine passende Umgebung ein und startet die Anwendung. Dabei hat Bluemix erkannt, dass es sich um ein Java Artefakt handelt und eine Java Liberty Umgebung angelegt. Nach 1-2 Minuten ist die Anwendung gestartet und im Internet aufrufbar.
Wird ein zweites mal deployed, wird die Anwendung aktualisiert und neu gestartet.
Ich habe festgestellt, dass ich mich bei weiteren Deployments nicht immer erneut anmelden muss. Bei Aktualisierungen reicht also meist Schritt 3.

Der IBAN-Konverter kann jetzt über die URL http://spring-boot-iban.eu-gb.mybluemix.net/ aufgerufen werden. Die URL setzt sich wie folgt zusammen:
http://<Name der Anwendung>.<Region>.mybluemix.net

Geht man in die Bluemix Oberfläche sieht man, dass in der Kategorie Compute, 1 Element vorhanden ist (Achtung, darauf achten, dass die korrekte Region ausgewählt ist). spring-boot-iban wird als Cloud Foundry-Anwendung angezeigt. Klickt man diese an, sieht man diverse Infos über die Anwendung und kann die Anzahl Instanzen und den zugewiesenen Hauptspeicher ändern.

Anzahl Instanzen, Hauptspeicher und weitere Parameter können auch über die Kommandozeile verändert werden.

  • Umgebungsvariable setzen
    cf set-env spring-boot-iban MY_ENV_PARA hallo
  • Status der App Abfragen
    cf app spring-boot-iban
  • App skalieren auf 2 Instanzen mit je 1GB RAM
    cf scale spring-boot-iban -i 2 -m 1G

Für die Anzahl Instanzen bietet Bluemix auch einen Autoscale Service, der die Anzahl Instanzen nach definierten Regeln erhöht oder verringert.

Fazit

Wir haben gesehen, dass mit ganz wenigen Schritten eine Spring-Boot Anwendung deployed und bereit gestellt werden kann. Das Einrichten von Servern und Umgebungen entfällt komplett. Ein einziger Befehl reicht, um einen Microservice der ganzen Welt zur Verfügung zu stellen. Das hat mich schon sehr beeindruckt.
Da wir Cloud Foundry genutzt haben, sind wir nicht abhängig von IBM und Bluemix. Wir können unseren IBAN Konverter ohne Anpassung und mit dem gleichen Befehl auch bei einem anderen Cloud Foundry Anbieter deployen, z.B. bei Pivotal.

Vorteil ist nicht nur, dass wir uns nicht um das Einrichten eines Servers kümmern müssen, auch um den laufenden Betrieb des Servers müssen wir uns nicht kümmern. Das ist schon deutlich komfortabler als einen dedicated Server selbst zu betreuen.
Auch der Aufbau einer Continous Delivery Pipeline wird viel einfacher.
Ob sich das finanziell lohnt, muss jeder für sich selbst entscheiden.
Tipp zum Schluss: Bei Bluemix eine Prepaid Kreditkarte hinterlegen. Falls mal etwas aus dem Ruder läuft, stürzt man sich nicht in Unkosten, wenn kein Geld mehr kommt, deaktiviert IBM den Dienst.

Schreibe einen Kommentar

Anmelden um einen Kommentar abzugeben.

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*