© Omelchenko/Shutterstock.com
Hohe Skalierbarkeit, weitreichende Ressourcen

Serverlose Webapplikationen mit AWS


Serverless Computing ist eine aktuelle Entwicklung im Cloud-Computing, bei der die meisten Anbieter mittlerweile auch Function as a Service im Programm haben. Geboten werden skalierbare Webapplikationen, bei denen man sich nicht um Ressourcen kümmern muss. Dieser Artikel ist eine Einführung in AWS Lambda von Amazon Web Services. Das händische Deployment von Lambda-Funktionen ist anspruchsvoll, aber Frameworks wie Chalice für Python-Entwickler nehmen dem Anwender die meisten Handgriffe ab.

Serverless Computing beziehungsweise Function as a Service (FaaS) ist ein aktueller Trend beim Cloud-Computing. Es handelt sich dabei um spezielle Dienste, die auf einer noch höheren Abstraktionsebene angesiedelt sind als die Bereitstellung von virtuellen Maschinen (Infrastructure as a Service) und Anwendungsservern (Platform as a Service). Dafür stellen die Cloud-Anbieter ihre Infrastruktur so zur Verfügung, dass Anwender dort eigenen Programmcode zur Ausführung bringen können, ohne sich auch nur im Geringsten um die Einrichtung und Verwaltung von Ressourcen kümmern zu müssen: Der Code läuft sprichwörtlich irgendwo in der Cloud. Serverless-Computing-Dienste regeln vollkommen automatisch den für die Ausführung einer Applikation notwendigen Umgang mit virtuellen Maschinen, Betriebssysteminstallationen und Containern sowie Angelegenheiten wie Verfügbarkeit, Skalierung und Sicherheit. Kosten für den Service fallen dabei nur bei tatsächlicher Ausführung der Applikation an, die reine Bereithaltung des Codes in der Cloud bleibt dagegen kostenfrei. Für den Benutzer bringt das eine Reihe von Vorteilen, es gibt völlige Unabhängigkeit, sogar von virtualisierter Hardware. Eine komplexe Provisionierung ist nicht nötig und eine fehlerhafte oder mangelhafte Konfiguration weitestgehend ausgeschlossen. Außerdem sprechen für diese Angebote eine lineare Skalierung, um auch auf globaler Ebene operieren zu können, sowie geringe Kosten für Infrastruktur und Administration. Dass dem Benutzer die Kontrolle der zugrunde liegenden Hardware vollkommen entzogen ist, kann sich für bestimmte Anwendungsprofile allerdings auch als Nachteil erweisen. So gibt es beispielsweise nur geringen Einfluss auf gelegentliche Latenzen. Die Entwicklung rein auf Grundlage der Angebote eines bestimmten Cloud-Anbieters birgt außerdem die Gefahr des Vendor Lock-ins, vor allem, wenn über FaaS hinaus weitere Services wie Datenspeicherdienste einbezogen werden. Trotzdem handelt es sich bei diesen Diensten um nützliche Einrichtungen, um Code im Internet unkompliziert zur Ausführung zu bringen. Zudem gibt es für die Softwareentwicklung attraktive Nebeneffekte wie Rapid Prototyping und verkürzte Bereitstellungszyklen. Für eine Reihe von Anwendungsgebieten wie zum Beispiel Data Pipelines [1], oder wenn für eine bestimmte Applikation kurzfristig massive Kapazitäten benötigt werden, ist Serverless Computing nahezu alternativlos.

AWS Lambda

Im Fokus dieses Artikels steht AWS Lambda von Amazon Web Services [2], aber auch andere Anbieter haben vergleichbare Services im Angebot, zum Beispiel Microsoft Azure Functions, Google Cloud Functions und IBM Bluemix OpenWhisk. AWS Lambda (wie die anderen Angebote auch) integriert sich nahtlos in das jeweilige Cloud-Ökosystem und stellt damit viele neue Möglichkeiten für Webapplikationen zur Verfügung. Ein einfaches Anwendungsbeispiel soll hier demonstrieren, wie dieser Service konkret eingesetzt werden kann. Dafür werden zwei Lambda-Funktionen aufgesetzt: Die eine Funktion wendet die Prominentenerkennungsfunktion des auf Deep Learning basierenden Bild- und Videoanalysediensts Amazon Rekognition [3] in einem Datei-Bucket hochgeladener Bilder an und speichert die Ergebnisse in einer einfachen Datenbank, die der Service DynamoDB bereitstellt. Die andere Funktion wird mit dem Lambda-Framework Chalice aufgesetzt und gibt als Microservice auf Anfrage aus den Netz die bisherigen Analyseergebnisse aus dieser Datenbank aus. Die Beispiele sind in Python geschrieben (Lambda unterstützt zurzeit Python 2.7 und 3.6), aber die wesentlichen Punkte gelten genauso auch für Anwender einer der anderen von Lambda bisher unterstützten Sprachen (JavaScript/Node.js 4.3 und 6.10, Java 8, C#, und neuerdings auch Google Go). Für die Interaktion mit AWS dient hier statt der Weboberfläche (Abb. 1) das offizielle Kommandozeilenwerkzeug aws, das als Paket Bestandteil einiger Linux-Distributionen ist oder aus dem Python Package Index (PyPI) bezogen werden kann [4]. Bevor ein AWS-Service wie Lambda genutzt wird und dort Code eingespielt und ausgelöst werden kann, muss der Anwender allerdings zunächst ein AWS-Konto und einen Benutzer mit geeigneten Zugriffsrechten einrichten.

stender_aws_lambda_1.tif_fmt1.jpgAbb. 1: Die Weboberfläche von AWS mit den verfügbaren Services

Benutzer einrichten

Um für AWS ein Benutzerkonto einzurichten, gehen Sie auf die Amazon-Website (https://aws.amazon.com) und klicken dort den Button Create a Free Account. Sie werden dann auf die Seite Create an AWS account gelenkt. Geben Sie dort Ihre E-Mail-Adresse, einen gewünschten Benutzernamen und ein Kennwort ein und folgen Sie den Anweisungen. Die Kontoeinrichtung ist kostenfrei, und neue Benutzer bekommen im Rahmen des „Free Tier“-Plans für die Dauer eines Jahres eine Reihe von grundlegenden Services (inklusive Lambda und Rekognition) in einem bestimmten Umfang kostenlos zur Verfügung gestellt. Ist die Anmeldeprozedur abgeschlossen, können Sie sich auf der Managementkonsole https://console.aws.amazon.com einloggen und AWS verwenden. Der neue Benutzer hat Root-Status und damit volle Rechte und unbeschränkten Zugriff auf alle Services. Es empfiehlt sich daher, sich für Projekte einen weiteren untergeordneten Benutzer einzurichten und ihn nur mit bestimmten benötigten Rechten auszustatten. Das erledigen Sie mit dem Identity and Access Management (IAM), zu finden auf der Startseite unter der Überschrift Security, Identity & Compliance. Wählen Sie dort den Menüpunkt Users und legen mit Add user einen neuen Benutzer an. Dafür wird zunächst der gewünschte Benutzername abgefragt. Als Authentifizierungsmethode können Sie auswählen, ob ein geheimer Schlüssel und/oder ein Kennwort generiert werden soll. Für den Zugriff mittels des CLI-Werkzeugs benötigen Sie einen solchen Schlüssel. Zusätzlich ein Kennwort für die Webo...

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