© Liashko/Shutterstock.com
Function as a Service mit AWS Lambda und Knative

Mit AWS Lambda zur Multicloud


Viele Unternehmen werden zukünftig versuchen, ihre IT-Infrastruktur mit Hilfe der Cloud wachsen zu lassen oder gar komplett in die Cloud zu verlagern. Größere Unternehmen fordern häufig die Multicloud. Im Hinblick auf Serverless gibt es einige Möglichkeiten, einen Mulicloudbetrieb zu erreichen. Mittels AWS Lambda lässt sich eine Function zur Verfügung stellen und das Ganze mit Knative cloudunabhängig machen.

Multicloud, was ist das genau? Unter einer Multicloud versteht man die Nutzung von mehreren Cloudprovidern/-plattformen mit der Besonderheit, dass es sich für den Anwender wie eine einzige Cloud anfühlt. Meist versucht man in diese Evolutionsstufe des Cloud-Computings zu kommen, um eine Unabhängigkeit von einzelnen Cloudprovidern zu erreichen.

Durch die Nutzung von mehreren Cloudprovidern werden die Ausfallsicherheit und die Verfügbarkeit gesteigert und natürlich die Nutzung von Technologien ermöglicht, die einzelne Cloudprovider nicht zur Verfügung stellen. Ein Beispiel hierfür wäre, dass es relativ schwer wird, seinen Alexa Skill auf der Cloud zu deployen, wenn man sich entschlossen hat, Microsoft Azure als Provider zu nutzen. Außerdem bietet uns eine Multicloudlösung die Möglichkeit, Anwendungen mit einer hohen Anforderung an Rechenleistung, Speicherbedarf und Netzwerkleistung bei einem Cloudprovider zu hosten, der diese Anforderungen erfüllt. Weniger kritische Anwendungen können wiederum von einem kostengünstigeren Provider gehostet werden, um IT-Kosten zu senken.

Natürlich bringt die Multicloud nicht nur Vorteile mit sich. Durch die Verwendung von mehreren Cloudprovidern wird die Gestaltung der Infrastruktur deutlich komplexer und schwieriger zu managen. Die Anzahl der Fehlerquellen kann sich erhöhen und die Verwaltung für die Abrechnung der einzelnen Cloudprovider wird aufwendiger.

Diese Vor- und Nachteile sollte man vor einer Entscheidung genau gegenüberstellen. Wenn man feststellt, dass man keine Angst davor haben muss, sich in die Abhängigkeit eines Cloudproviders zu begeben, sollte man den Aufwand eher in die Nutzung der Cloud-Services investieren.

Was ist Function as a Service?

Im Jahr 2014 ist das Function-as-a-Service-(FaaS-)Konzept das erste Mal auf dem Markt erschienen. Damals wurde das Konzept von hook.io vorgestellt. In den folgenden Jahren sprangen alle großen Player der IT auf den Zug mit auf, z. B. mit AWS Lambda, Google Cloud Functions, IBM OpenWhisk oder auch Microsoft Azure Functions. Die Charakteristika von solch einer Funktion sind:

  • Server, Netzwerk, Betriebssystem, Storage usw. sind vom Entwickler abstrahiert.

  • Die Abrechnung erfolgt nutzungsabhängig und sekundengenau.

  • FaaS ist zustandslos, d. h. für eine Haltung von Daten oder Zuständen wird eine Datenbank oder ein Dateisystem benötigt.

  • Sie ist sehr gut skalierbar.

Doch welche Vorteile bietet einem das Ganze? Der wohl größte Vorteil ist, dass sich der Entwickler nicht mehr um die Infrastruktur kümmern, sondern nur noch einzelne Funktionen ansprechen muss. Die Services sind sehr gut skalierbar und ermöglichen eine exakte und nutzungsabhängige Abrechnung. Dadurch kann man eine maximale Transparenz an Produktkosten erreichen. Die Logik der Anwendung kann in einzelne Funktionen geteilt werden, dadurch ist man deutlich flexibler bei der Umsetzung von weiteren Anforderungen. Die Funktionen können dabei in unterschiedlichen Szenarien eingesetzt werden. Häufig zu finden sind

  • Web-Requests,

  • geplante Jobs und Tasks,

  • Events

  • und manuell gestartete Tasks

FaaS mit AWS Lambda

Als ersten Schritt erstellen wir uns ein neues Maven-Projekt. Um die AWS-Lambda-spezifischen Funktionalitäten nutzen zu können, müssen wir die in Listing 1 zu sehende Dependency in unserem Projekt hinzufügen.

Listing 1: Core Dependency für AWS Lambda

<dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-lambda-java-core</artifactId> <version>1.2.0</version> </dependency>

Als nächsten Schritt müssen wir einen Handler implementieren, der den Request entgegennimmt und eine Response an den Aufrufer zurückmeldet. Hier gibt es in der Core Dependency zwei: den RequestHandler und den RequestStreamHandler. Wir werden in unserem Beispielprojekt den RequestHandler nutzen und Inbound sowie Outbound als String deklarieren (Listing 2).

Listing 2: Handler-Klasse für Reques...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang