Obwohl es schon ein paar Jahre zurückliegt, dass Amazon mit seiner Cloud den Hosting-Markt neu erfand, erinnert sich der Autor noch gut an seinen ersten Tag mit dem neuen Dienst. Nach dem Start einer EC2-Instanz begann er nämlich mit einem lauten "Was?"-Schrei, der ihn fast den frischen Kaffee wieder ausspucken ließ. Diese einfache Linux-Maschine soll 10 Cent pro Stunde kosten?
Genauso gut erinnert er sich an die Zeit, die er mit der Konfiguration der ersten virtuellen Maschine verbrachte. Es hat ihn einige Stunden gekostet, die Standardaufgaben einzurichten. Fazit: Ein Tool musste her, das einen Server hochfährt und die Einrichtung erledigt.
Inzwischen existiert ein solches Tool: Elastic Beanstalk (EBS)[1]. Es führt eine frische Cloud deutlich schneller ihrer Bestimmung zu als die liebevolle Handarbeit von der Wurzel bis in den wolkigen Himmel.
Der Ansatz von Elastic Beanstalk ähnelt dem von Heroku [2] und vergleichbarer Plattformen. Das Kommando »git push
«
gefolgt vom Namen des Backends – Beanstalk, Heroku oder ein anderes –, bringt das eigene Projekt auf den Server und macht es über eine eigene URL direkt erreichbar. Der Hauptunterschied zu anderen Diensten liegt darin, dass Elastic Beanstalk die zugrunde liegende AWS-Architektur (Amazon Web Services) direkt ansteuert. Wenn die Anwendung zufriedenstellend läuft und nach einer Umgebung verlangt, die Beanstalk und Co. nicht mehr bewältigen können, lässt sich auf dem Fundament der Beanstalk-Konfiguration flexibel aufbauen.
Eine neue Anwendung (Application) beginnt mit der Auswahl der Plattform. Es handelt sich absichtlich nicht um Instanzen, denn Elastic Beanstalk bewegt sich auch mit seinem Vokabular auf einer höheren Abstraktionsebene. Zur Wahl stehen die Projekttypen Tomcat, Microsoft IIS, Node, PHP, Python und Ruby sowie selbstdefinierte Umgebungen. Letzteres bietet sich an, um den Benutzern die Wahl zwischen verschiedenen Umgebungen zu überlassen, beispielsweise zu Übungszwecken bei Online-Programmierkursen und ähnlichen Anwendungsfällen.
Die Zeit, in der Beanstalk die Anwendung einrichtet, lässt sich mit einem Rundgang durch die Weboberfläche der Plattform sinnvoll füllen. Dabei fällt bereits auf, dass Elastic Beanstalk direkt einzelne AWS-Dienste ansteuert, allen voran die Elastic Cloud (EC2).
Wer Heroku kennt, bemerkt bei den Kernkonzepten aber auch schnell die Überschneidungen. Der Dienst richtet die Umgebung automatisch ein, ein Kommandozeilenwerkzeug lädt Dateien hoch und auch die Skalierung geschieht von selbst. Wie EC2 und andere Amazon-Dienste hält Elastic Beanstalk fürs Monitoring und Events eigene Unterseiten vor. Der Dienst von Amazon beschreibt sich selbst als "impossible to outgrow", also etwa "unmöglich zu entwachsen", denn hinter seinem Skalierungspotenzial steht die gesamte Amazon-Cloud.
Die enge Bindung an andere Services erklärt auch, weshalb Amazon Elastic Beanstalk kostenlos anbietet: Es handelt sich um eine Art Frontend für Amazon-Dienste. Das macht es attraktiv fürs Entwickeln neuer Anwendungen mit häufig neuen Prototypen und schnellem Deployment unter Verwendung der Amazon-Cloud. Die Verwendung von Elastic Beanstalk ist andererseits etwas kniffliger als bei anderen PaaS-Diensten (Platform as a Service).
Am Anfang steht das Kommandozeilenwerkzeug »eb
«
[3]. Die heruntergeladene ZIP-Datei enthält startfertige Python-Programme für Linux und Mac OS X sowie ein Binary für Windows.
Bevor das entpackte Tool zum Einsatz kommt, erzeugt man aber erst ein Git-Repository im aktuellen Verzeichnis:
git init . git add . git commit -m "Starting..."
Nun initialisiert der folgende Befehl das neue Repository für die Benutzung mit Elastic Beanstalk:
eb init
Das Programm möchte die AWS-Zugangsdaten sowie eine Region und den gewünschten Anwendungsnamen wissen; für dieses Exempel verwendet der Autor den Namen »DanApp
«
. Der anschließend abgefragte Umgebungsname kann bei der Voreinstellung bleiben und es folgt die Wahl der Anwendungs- beziehungsweise Instanzenart und -version:
1) 32bit Amazon Linux running PHP 5.4 2) 64bit Amazon Linux running PHP 5.4 3) 32bit Amazon Linux running PHP 5.3 4) 64bit Amazon Linux running PHP 5.3 5) 32bit Amazon Linux running Node.js 6) 64bit Amazon Linux running Node.js ...
Eine Instanz für eine relationale Datenbank (RDS instance) ist zu diesem Zeitpunkt meist noch nicht nötig, die Antwort auf diese Frage lautet im Beispiel deshalb »n
«
. Dennoch sollte man für den eventuellen späteren Bedarf im Hinterkopf behalten, dass ein Datenbank-Backend mit dem Tool schnell eingerichtet ist.
Das eb-Werkzeug gibt einen Überblick über seine Kompetenzen mit dem Argument »--help
«
:
$ eb --help ... COMMAND init, branch, start, status, update, stop, delete, logs, events, push ...
»eb status
«
gibt eine Zusammenfassung über die Umgebung aus. Damit vergewissert man sich beispielsweise, dass man eine Applikation auch wirklich heruntergefahren hat:
$ eb status Environment "DanApp-env" is not running.
Nun ist aber erst der Start der Anwendung an der Reihe:
$ eb start Starting application "DanApp". Would you like to deploy the latest Git commit to your environment? [y/n]: y
Es kann ein paar Minuten dauern, bis eine Instanz hochgefahren ist und eine IP erhalten hat. Das Web-Interface zeigt den aktuellen Stand an, auch wenn man die Instanz per Kommandozeile gestartet hat. Listing 1 zeigt die vollständige Ausgabe des Kommandos.
Listing 1
Ein Git-Commit
ElasticBeanstalk git:(master) eb start Starting application "DanApp". Would you like to deploy the latest Git commit to your environment? [y/n]: y remote: remote: error: Unable to deploy application version: No Environment found for EnvironmentName = 'DanApp-env'. remote: To https://AKIAJ2XDUJ2NAFXXXXXXXX: XXXXXXa9a9fe7e0fd7XXXXXXXXa94d94942@git.elasticbeanstalk.eu-west -1.amazonaws.com/v1/repos/44616e417070/commitid/ 6335366636313033613837366239366230396534333832386564323637313461 6533383837653130/environment/44616e4170702d656e76 * [new branch] HEAD -> master Waiting for environment "DanApp-env" to launch. 2013-05-08 20:02:27 INFO createEnvironment is starting. 2013-05-08 20:02:32 INFO Using elasticbeanstalk-eu-west-1-894012917938 as Amazon S3 storage bucket for environment data. 2013-05-08 20:03:03 INFO Created load balancer named: awseb-e-m-AWSEBLoa-OXVMML7XC6PR 2013-05-08 20:03:27 INFO Created security group named: awseb-e-mnpsy5bpzk-stack-AWSEBSecurityGroup-18JDKTE9QITLU 2013-05-08 20:03:32 INFO Created Auto Scaling launch configuration named: awseb-e-mnpsy5bpzk-stack-AWSEBAutoScalingLaunchConfiguration- 1QR56F972DMG2 2013-05-08 20:04:57 INFO Created Auto Scaling group named: awseb-e-mnpsy5bpzk-stack-AWSEBAutoScalingGroup-12BAR59E5FUDM 2013-05-08 20:04:57 INFO Waiting for EC2 instances to launch. This may take a few minutes. 2013-05-08 20:07:45 INFO Created Auto Scaling group policy named: arn:aws:autoscaling:eu-west-1:894012917938:scalingPolicy: 927c9769-d96e-46ba-b08f-099650ae7a3d:autoScalingGroupName/awseb- e-mnpsy5bpzk-stack-AWSEBAutoScalingGroup-12BAR59E5FUDM: policyName/awseb-e-mnpsy5bpzk-stack- AWSEBAutoScalingScaleDownPolicy-KW4NGGQ0LULU 2013-05-08 20:07:48 INFO Created CloudWatch alarm named: awseb-e-mnpsy5bpzk-stack-AWSEBCloudwatchAlarmLow-14SOWYQGJ2F5X 2013-05-08 20:07:51 INFO Created Auto Scaling group policy named: arn:aws:autoscaling:eu-west-1:894012917938:scalingPolicy: 22724a85-a99c-4a05-a66a-cb56a70f54e7:autoScalingGroupName/awseb- e-mnpsy5bpzk-stack-AWSEBAutoScalingGroup-12BAR59E5FUDM: policyName/awseb-e-mnpsy5bpzk-stack- AWSEBAutoScalingScaleUpPolicy-1ETLUW450U2V1 2013-05-08 20:07:53 INFO Created CloudWatch alarm named: awseb-e-mnpsy5bpzk-stack-AWSEBCloudwatchAlarmHigh-198IBXQXHBDPH 2013-05-08 20:09:25 INFO Application available at DanApp-env-ceqwdhduep.elasticbeanstalk.com. 2013-05-08 20:09:25 INFO Successfully launched environment: DanApp-env Application is available at "DanApp-env-ceqwdhduep.elasticbeanstalk.com".
Die Rückmeldungen zeigen, wie das eb-Tool unter Verwendung der AWS-Zugangsdaten den Code auf den Server von Elastic Beanstalk hochlädt. Danach startet es die Anwendung und legt eine Speichereinheit (»Amazon S3 Storage Bucket
«
) an. Dann fährt die EC2-Instanz hoch und erzeugt Gruppen für die automatische Skalierung und das Monitoring. All diese Einzelschritte nimmt das Tool dem Admin vollständig ab. Läuft die Umgebung, stellt sie unter einer URL wie »http://DanApp-env-ceqwdhduep.elasticbeanstalk.com/
«
– stets beginnend mit dem Namen der Applikation – den von der Anwendung produzierten Inhalt bereit.