sdecoret - stock.adobe.com

AWS Lambda versus Elastic Beanstalk: Was eignet sich wofür?

Wenn Entwickler Lambda und Elastic Beanstalk vergleichen, treffen sie selten eine Entweder-oder-Entscheidung. Sie sollten daher die Details der AWS-Dienste kennen.

Es gibt mehr als eine Möglichkeit, eine Aufgabe auf AWS zu erledigen. Daher müssen Benutzer die Details überlappender Services verstehen, um ihre Cloud-Umgebung an die Bedürfnisse eines bestimmten Workloads anzupassen.

AWS Lambda und Elastic Beanstalk gehören zu den sich überschneidenden Umgebungen für die Ausführung von Anwendungen – insbesondere im PaaS-, Container- und Serverless-Computing-Bereich. Während sich Entwickler bei der Auswahl mit der Unterscheidung der Abstraktionsmechanismen in Serverless Computing und Containern beschäftigen müssen, sollten sie auch die Unterschiede zwischen PaaS und Serverless Computing untersuchen.

AWS Lambda ist eine Serverless-Computing-Plattform und kann viele der Dinge tun, die auch Elastic Beanstalk, ein etabliertes, leichtgewichtiges PaaS, kann. Wenn AWS-Anhänger Lambda und Elastic Beanstalk vergleichen, treffen sie daher selten eine Entweder-oder-Entscheidung.

Elastic Beanstalk: ein flexibles PaaS-System

Elastic Beanstalk bietet eine vielseitige Anwendungsplattform mit bekannten AWS-Instanzen. Es unterstützt eine Reihe gängiger Sprachen und Middleware-Plattformen, Designmuster und Anwendungsfälle sowie Anpassungen in der Laufzeitumgebung.

Der Service wurde 2011 als gebündelte Java-EE-Plattform mit dem Apache-Tomcat-Server eingeführt. Seitdem hat AWS die für die Bereitstellung von PaaS-Applikationen unterstützten Sprachen, Anwendungsserver und Laufzeitumgebungen erweitert.

Elastic Beanstalk arbeitet mit den Programmiersprachen Java, Go, PHP, Python und Ruby. Die Anwendungsserver reichen von Tomcat bis Nginx mit der Node.js Runtime, Phusion Passenger und Puma sowie mehreren Generationen von Microsoft IIS für .NET-Anwendungen. Es unterstützt auch Docker-Container und mehrere integrierte Entwicklungsumgebungen.

Der PaaS-Stack übernimmt die Hauptaufgaben bei der Bereitstellung und Verwaltung von Infrastrukturen auf AWS. So kann es zum Beispiel EC2-Instanzen mit einem Betriebssystem und einem Application Stack, Load Balancing und automatische Skalierung von Workloads und Zustands-Monitoring über CloudWatch bereitstellen.

Es isoliert Entwickler- und DevOps-Teams jedoch nicht vollständig von den zugrunde liegenden Infrastrukturdetails auf AWS-Servern. Benutzer können die Infrastruktur bei Bedarf anpassen. Sie können zum Beispiel ihr Betriebssystem, etwa Amazon Linux oder Windows Server, auswählen und über Elastic Beanstalk benutzerdefinierte Docker-Container-Images mit einer Reihe von Sprachen, Webanwendungen und Bibliotheken verwenden.

Elastic Beanstalk bietet außerdem Zugriff auf Java-VM-Einstellungen und Umgebungsvariablen. Benutzer können aus verschiedenen AWS Storage-, Instanz- und Datenbankoptionen sowie anderen Komponenten in mehreren Verfügbarkeitszonen wählen. Wenn Benutzer Probleme beheben müssen, können sie sich bei den EC2-Instanzen anmelden.

Benutzer von Elastic Beanstalk bezahlen für die AWS-Ressourcen, die das PaaS-Angebot für den Betrieb und die Speicherung der Anwendung verbraucht. Während also Elastic Beanstalk kostenlos ist, sollten Entwickler die Gesamtkosten der EC2- und Relational-Database-Service-Instanzen, S3-Buckets und Netzwerkgebühren für durchschnittliche Betriebs- und Spitzenzeiten abschätzen.

Das missverstandene Hosting-Paradigma bei Lambda

Lambda wurde 2015 von AWS vorgestellt. Der Service bietet ereignisgesteuertes Code-Hosting mit abstrahierter Infrastrukturbereitstellung und -verwaltung. AWS Lambda macht Serverless Computing zu einer Option für IT-Teams in Unternehmen.

Lambda unterstützt Code in Java, Go, PowerShell, Node.js, C#, Python und Ruby. Lambda bietet auch eine Runtime-API, die kundenspezifische Funktionen in anderen Sprachen ermöglicht. Serverless-Funktionen sind nicht so einfach zu kategorisieren wie IaaS oder PaaS, da Lambda im Gegensatz zu Plattformen für konventionelle Anwendungen – EC2, Elastic Beanstalk und sogar gemanagte Container mit Kubernetes – nicht verlangt, dass der AWS-Benutzer eine Ausführungsumgebung für den Code einrichtet. Stattdessen ruhen die Lambda-Code-Module, bis sie durch das richtige Ereignis oder den richtigen Satz von Ereignissen zum Ausführen von Funktionen ausgelöst werden.

Der ereignisgesteuerte Charakter bedeutet, dass AWS Funktionen in einem Kaltstart ausführen kann. Code, der seit einiger Zeit nicht mehr ausgeführt wurde, wird innerhalb von Sekunden aktiviert, während wiederkehrende Instanzen dank der Caches innerhalb weniger Zehntelsekunden ausgeführt werden. Lambda skaliert automatisch, um große Mengen eingehender Ereignisse zu verarbeiten – vorausgesetzt, die Entwickler konfigurieren die für Funktionen verfügbare Speichermenge richtig.

Lambda ist für die Verarbeitung transienter, asynchroner Ereignisse ausgelegt, so dass die Funktionen innerhalb von fünf Minuten abgeschlossen sein müssen. Der Dienst drosselt außerdem Ereignisse, die einen festgelegten Grenzwert überschreiten. Lambda ist somit kein Ersatz für Elastic Beanstalk oder andere konventionelle Cloud-Hosting-Konfigurationen für stationäre Workloads, die ein relativ konstantes Niveau an Rechenressourcen über lange Zeiträume erfordern.

Leider gibt es für unentschlossene Entwickler und solche mit komplizierten Anwendungs-Architekturen keinen klaren Gewinner beim Vergleich von Lambda und Elastic Beanstalk.

Im Gegensatz zu Elastic Beanstalk belastet das Ausführungs- und Abrechnungsmodell von Lambda die Benutzer nicht für ungenutzte Infrastrukturen, sondern nur die verbrauchten Rechenressourcen, gemessen an der Anzahl der Ereignisse, der Speichergröße und der gesamten Ausführungszeit pro Monat.

Serverless Computing versus PaaS

Serverless Computing kann virtuelle Maschinen (VM) und Container für einige Anwendungs-Workloads ersetzen, aber der Vergleich von Lambda und Elastic Beanstalk ist nicht einfach.

Die Einschränkungen für Serverless Computing, insbesondere eine Begrenzung der Lambda-Ausführungszeit und keine direkte Unterstützung für zustandsbehafteten Code, machen das Serverless-Modell zu einer schlechten Lösung für viele typische Unternehmenssysteme.

Sowohl Elastic Beanstalk als auch Lambda isolieren Entwickler von den Kosten und Details, die für die Konfiguration und Bereitstellung von Runtime-Compute-Instanzen erforderlich sind. Sowohl das PaaS als auch die Serverless-Dienste können die Produktivität der Entwickler deutlich steigern und die Agilität verbessern. Ihre Unterschiede machen Lambda und Elastic Beanstalk jedoch komplementär und nicht zu Wettbewerbern.

Viele Designmuster erfordern eine Mischung aus ereignisgesteuerten, API-basierten Code, der Serverless mit Lambda- und dateibasierten Diensten kompatibel ist, welche persistente VM-Instanzen verwenden, die sich über Elastic Beanstalk ausführen lassen. Lambda kann seltenen, asynchronen Code verarbeiten, wie zum Beispiel Event Handler, die andere Cloud-Dienste für die Verarbeitung aufrufen, während Elastic Beanstalk Entwickler dabei unterstützt, benutzerdefinierte Backend-Dienste für die Anwendung zu erstellen und zu verwalten.

Im Allgemeinen führt die granulare Nutzungsmessung bei Lambda zu einer kostengünstigeren Implementierung von ereignisgesteuertem Code als bei Verwendung eines laufenden Ressourcenverbrauchsmodells mit Elastic Beanstalk. Serverless-Computing-Entwickler müssen jedoch Ereignisspitzen überwachen, die durch Fehler oder andere ungewöhnliche Situationen verursacht werden. Eine übermäßige Anzahl von Funktionsaufrufen kann einen Schock verursachen, wenn die monatliche AWS-Rechnung eintrifft.

Leider gibt es für unentschlossene Entwickler und solche mit komplizierten Anwendungsarchitekturen keinen klaren Gewinner beim Vergleich von Lambda und Elastic Beanstalk. Stattdessen erfordern diese Hosting-Optionen, dass die Teams die Anwendungsanforderungen sorgfältig prüfen und Designs erstellen, die die Stärken der einzelnen Dienste nutzen.

Wenn man die Balance zwischen PaaS und Serverless Computing richtig hält, werden Anwendungen reaktionsschneller und skalierbarer, während sie gleichzeitig weniger kostenintensiv in Betrieb und Wartung sind als herkömmliche VM-Implementierungen.

Nächste Schritte

Anleitung für die Bereitstellung von Anwendungen mit AWS Elastic Beanstalk.

So optimiert man AWS Lambda-Funktionen.

AWS Batch statt Lambda für bestimmte Workloads verwenden.

Erfahren Sie mehr über Softwareentwicklung