Anwendungsbereitstellung unter AWS automatisieren, Teil 1 Grundlagen und Zweck von AWS Elastic Beanstalk

Autor / Redakteur: Dipl. -Ing. Thomas Drilling / Stephan Augsten

Elastic Beanstalk erleichtert Entwicklern das Bereitstellen und Verwalten von Anwendungen in der AWS-Cloud. Entwickler laden einfach ihre Anwendung und der Service verwaltet automatisch Kapazitätsbereitstellung, Lastverteilung, automatischen Skalierung und Statusüberwachung.

Anbieter zum Thema

Das AWS Toolkit for Visual Studio unterstützt das Deployment einer Anwendung direkt über die integrierte Entwicklungsumgebung.
Das AWS Toolkit for Visual Studio unterstützt das Deployment einer Anwendung direkt über die integrierte Entwicklungsumgebung.
(Bild: AWS / Thomas Drilling)

Die drei wichtigsten Automatisierungs-Framework in AWS heißen Elastic Beanstalk, OpsWorks und CloudFormation. Das per Default auf Docker-Containern aufsetzende Elastic Beanstalk stellt Plattformen zum Betreiben von PHP-, Ruby-, Tomcat- oder Java-Anwendungen automatisiert bereit.

Programmierer können sich damit ganz auf ihre Anwendungen konzentrieren. Diese müssen lediglich in Beanstalk hochgeladen werden, ohne dass sich der Entwickler Gedanken über die dazu benötigte Infrastruktur machen muss.

PaaS à la AWS

Elastic Beanstalk steht als klassisches PaaS-Konzept in direkter Konkurrenz zu ähnlich gelagerten Lösungen wie Pivotal CloudFoundry oder der Red Hat OpenShift Container Platform. Der AWS-Dienst adressiert in erster Linie Entwickler, die Web-Anwendungen und Services mit Java, PHP, .NET, Python, Node.js, Ruby, Go und/oder Docker unkompliziert entwickeln wollen. Sie müssen sich damit nämlich weder um die Bereitstellung und Administration der benötigten Infrastruktur für den (ggf. auch hochverfügbaren) Betrieb von Webservern oder Datenbanken kümmern noch um das Bereitstellen passender Laufzeitumgebungen.

Die Idee hinter Beanstalk ist, dass sich die typischen Stacks für den Betrieb von Web-Anwendungen bei den meisten Unternehmen weitgehend ähneln. Entwickler müssen mit Beanstalk nur noch ihre Anwendungen hochladen und Elastic Beanstalk verwaltet automatisch sämtliche Details der Kapazitätsbereitstellung, Lastverteilung, automatischen Skalierung und Statusüberwachung.

Elastic Beanstalk eignet sich damit vor allem für Benutzer, die Anwendungen bei Bedarf möglichst schnell in der AWS Cloud bereitstellen und verwalten wollen, ohne über Erfahrungen mit Cloud Computing an sich zu verfügen. Konkret eignet sich Elastic Beanstalk für folgende Anwendungsarten mit ihren jeweiligen Entwicklungs-Stacks:

  • Java-Anwendungen: Apache Tomcat
  • PHP-Anwendungen: Apache Webserver
  • Phython-Anwendungen: Apache Webserver
  • Node.Js-Anwendungen: Apache und-/oder NginX-Webserver
  • .NET-Anwendungen: IIS 7.5, 8.0 oder 8.5
  • Ruby-Anwendungen: Puma oder Passenger sowie
  • Docker, Java SE und Go

Weitere unterstützte Plattformen finden sich in der Beanstalk-Dokumentation. Intern bedient sich natürlich auch Elastic Beanstalk im hauseigenen Regal, denn AWS baut alle seine höher angesiedelten Dienste auf Basis der eigenen Infrastruktur-Services. So bestehen die von Elastic Beantstalk erzeugten Deployments letztendlich ebenfalls aus Amazon EC2- (Amazon Linux-AMI oder Windows Server 2012 R2-AMI) sowie RDS-Instanzen und verwenden je nach Bedarf die Dienste und Funktionen Elastic Load Balancing, Auto Scaling, Amazon S3 und Amazon Simple und Notification Service (SNS).

So arbeitet Elastic Beanstalk

In der Praxis lädt der Entwickler lediglich seinen Bereitstellungsode (z. B. als WAR-Datei) in Elastic Beanstalk hoch und die Plattform kümmert sich um alles Weitere. In wenigen Minuten erhält der Entwickler damit im Idealfall eine Umgebung, in der sich eine Version seiner Anwendung betreiben lässt. Im einfachsten Fall bedient er sich dazu einfach der grafischen AWS Management Console.

Das AWS Toolkit for Visual Studio unterstützt das Deployment einer Anwendung direkt über die integrierte Entwicklungsumgebung.
Das AWS Toolkit for Visual Studio unterstützt das Deployment einer Anwendung direkt über die integrierte Entwicklungsumgebung.
(Bild: AWS / Thomas Drilling)

Versierte Nutzer greifen dazu allerdings häufig lieber zur Elastic-Beanstalk-CLI. Dabei leisten z. B. das AWS Toolkit for Visual Studio und das AWS Toolkit for Eclipse wertvolle Hilfe. Beide unterstützen das Bereitstellen einer Anwendung für AWS Elastic Beanstalk sowie das Verwalten der Anwendung, ohne dass der Nutzer seine eigene integrierte Entwicklungsumgebung verlassen muss. Auch hier automatisiert Elastic Beanstalk Management-Aufgaben wie Überwachung, Anwendungsversionsbereitstellung oder die essentielle Statusüberprüfung und ermöglicht einen einfachen Zugriff auf Log-Dateien.

Elastic Beanstalk und seine PaaS-Konkurrenten

Was aber macht Elastic Beanstalk anders oder besser als andere Container-Plattformen? Dazu muss man fairerweise sagen, dass andere Application-Container- bzw. PaaS-Lösungen den Programmierungsaufwand ebenfalls deutlich reduzieren. Allerdings beschränken die üblichen PaaS-Systeme dabei meist auch die Flexibilität und räumen dem Entwickler nur bedingte Steuerungsmöglichkeiten ein. Dieser ist dann in der Regel gezwungen, Default-Einstellungen des jeweiligen Anbieters zu übernehmen, und hat meist keine oder nur rudimentäre Möglichkeiten, einzelne Bereiche der Anwendungsinfrastruktur selbst zu steuern.

AWS Elastic Beanstalk hingegen erlaubt Entwicklern die volle Kontrolle über alle AWS-Ressourcen „hinter“ ihrer Anwendung. Möchten Entwickler Elemente der bereitgestellten Infrastruktur selbst verwalten, gelingt das einfach über die Managementfunktionen von Elastic Beanstalk, etwa im Elastic-Beanstalk-Dashboard der Management Console in den Menüs „Configuration“, „Logs“, „Health“, „Alarms“, Events“ usw. So kann der Nutzer z. B. bei Elastic Beanstalk das Betriebssystem selbst wählen, das für seine Anwendungsanforderungen am besten geeignet ist, oder z. B. aus einer breiten Palette an Datenbanken und Speicherkonfigurationen wählen.

Darüber hinaus können sich Nutzer von AWS im Bedarfsfall immer direkt auf die bereitgestellten Instanzen per SSH oder RDP verbinden, auch wenn diese automatisiert bereitgestellt wurden. Wie jede andere (evtl. manuell bereitgestellte) EC2-Instanz auch können Beanstalk-Deployments zur Erhöhung der Verfügbarkeit in mehrere Availability-Zonen deployt werden und Lastverteilung auf HTTP(S)-Ebene zur Erhöhung der Anwendungssicherheit steht ebenfalls zur Verfügung.

Darüber hinaus kann der Beanstalk-Nutzer sogar Einstellungen des jeweiligen Anwendungsservers (etwa JVM-Einstellungen) anpassen oder andere Anwendungskomponenten gleichzeitig in Amazon EC2 ausführen. Ferner hat der Nutzer Zugriff auf Anwendungsserver-Einstellungen, kann ohne sich beim Anwendungsserver anzumelden auf Protokolldateien zugreifen und erhält, wenn er die integrierte CloudWatch-Überwachung aktiviert, auch Benachrichtigungen zum Anwendungsstatus und anderen wichtigen Events.

Zeitaufwand

Es versteht sich von selbst, dass der Zeitaufwand zum Generieren eines Beanstalk-Deployments meist weit unter dem liegt, was durch manuelles Vorgehen erzielbar ist. Im Normalfall dauert das Erstellen der AWS-Ressourcen zum Ausführen der gewünschten Anwendung bis zur vollständigen Bereitstellung und dem ersten Zugriff durch Benutzer nur wenige Minuten.

Dies ist allerdings nur ein theoretischer Wert gemessen ab dem Zeitpunkt, zu dem die Anwendungsversion vom Entwickler in Form einer WAR-, ASP.NET-, Node.js-, PHP-, Python- oder Ruby-Dateien hochgeladen wurde. In der Praxis hängt die Dauer des Prozesses jedoch von vielen Faktoren ab, wie der Größe des Bereitstellungs-Codes und natürlich der Menge der bereitzustellenden Anwendungsserver.

Das Bereitstellen einer „aktualisierten“ Anwendung, also einer neuen Anwendungsversion gelingt in der Regel noch schneller und ist oft in weniger als einer Minute erledigt. Außerdem ist es mit Elastic Beanstalk jederzeit möglich, mehrere Versionen einer Anwendung gleichzeitig auszuführen. Dies bietet sich z. B. für Integrationsprüfung, Pre-Releases und Produktionsumgebungen an, weil jede Umgebung unabhängig konfiguriert ist und auf separaten AWS-Ressourcen läuft. Da Elastic Beanstalk jede Anwendungsversionen speichert und „verfolgt“, lässt sich eine existierende Umgebung jederzeit auf eine Vorgängerversion zurücksetzen.

Konkret kann der Nutzer bis zu 75 Anwendungen und 1000 Anwendungsversionen in Elastic Beanstalk erstellen und verwalten. Per Default lassen sich bis zu 200 Umgebungen anwendungsübergreifend betreiben. Allerdings sind dabei auch die Grenzwerte je AWS-Konto zu beachten. Je nachdem, welche AWS-Ressourcen man zusätzlich außerhalb von Elastic Beanstalk verwendet, reduziert sich die Zahl von bis zu 200 Umgebungen auf weniger als zehn.

(ID:44957605)