AWS Elastic Beanstalk

Stephen Coburn, Fotolia

Elastische Bohnenstange

Der Amazon-Dienst Elastic Beanstalk bietet einen schnellen Einstieg in die Anwendungsentwicklung in der Amazon-Cloud.
Das Titelthema im ADMIN 04/14 "Vernetzt speichern" sind Netzwerkdateisysteme, etwa Samba 4, verteilter Storage mit Ceph & GlusterFS und der Unix-Klassiker ... (mehr)

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.

Start

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).

Die Umgebung einrichten

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.

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023