everythingpossible - Fotolia

Erstellen, Stoppen und Beenden: Arbeiten mit AWS EC2

Zu den Grundlagen im Umgang mit AWS EC2 gehört nicht nur das automatisierte oder manuelle Erstellen oder Beenden von EC2-Instanzen. Ein Blick auf Bootstrapping und AWS-CLI.

Das Erstellen, Stoppen und Beenden von EC2-Instanzen (Elastic Compute Cloud) in AWS (Amazon Web Services) kann automatisiert, manuell, vorlagenbasiert und/oder im Rahmen unterschiedlicher Abrechnungsmodelle erfolgen. Hat man die Grundlagen verstanden, kann man sich um weitere Details der Template-Pflege wie zum Beispiel das Bootstrapping und die AWS-CLI kümmern. 

Das Aufsetzen von Servern ist ein mühseliger und sich oft wiederholender Prozess. Immerhin erleichtert der Betrieb von (virtuellen) Servern On-Premises oder in der Cloud den Teil, der sich mit Beschaffung und Hardwareinstallation befasst. Das Installieren (und Patchen) von Betriebssystemen, Tools und Anwendungen fällt aber auch in der Cloud an.

Die Cloud- und Virtualisierungs-Lösungen der führenden Hersteller bieten daher die Möglichkeit, mit Vorlagen zu arbeiten, bei AWS AMIs (Amazon Machine Images) genannt. Vorlagen helfen nicht nur beim schnellen Deployment von virtuellen Maschinen/Instanzen, sondern vor allem bei deren Pflege, wobei es allerdings dem Anwender überlassen bleibt, eine geeignete Patch-Strategie zu entwickeln und zu pflegen, denn AWS selbst bringt zum Beispiel alle sechs Monate ein neues Basis-AMI von Amazon Linux heraus.

Jede aus diesem Basis-AMI bereitgestellte Instanz bietet standardmäßig eine Auswahl an Services, Hilfsprogrammen und Tools für die Integration mit AWS. Es fungiert damit sozusagen als Funktionsbasis, die das Hinzufügen weiterer Hilfsprogramme und Services (über die Paket-Repos der jeweiligen Linux-Distribution) ermöglicht. Bei Amazon Linux kommt dazu yum zum Einsatz.

Patch-Strategie in AWS EC2

Eine Strategie zur Update-Pflege der Instanzen könnte also darin bestehen, eine neue Instanz auf Basis des betreffenden AMIs zu erstellen, sich nach dem Erstellen auf die Instanz zu verbinden, um alle für die Anwendung benötigten Betriebssystem-Patches, Tools, Anwendungen und Anwendungs-Patches installieren zu können und dann auf dieser Basis ein neues AMI zu erstellen. Dies ist in der Management-Konsole im EC2-Dashboard in der Instanz-Ansicht möglich. Hierzu klick man im Menü Actions auf Image / Create Images.

Erstellen eines AWS AMIs über die Management-Konsole.
Abbildung 1: Erstellen eines AWS AMIs über die Management-Konsole.

Die eigenen Images landen dann im EC2-Dashboard im Bereich Images / AMIs. Aus diesem AMI lassen sich dann jederzeit neue Instanzen erstellen. Muss das AMI selbst aktualisiert werden, erstellt man ebenfalls eine Instanz aus diesem AMI, spielt die benötigten Patches ein und erstellt wiederum ein neues AMI.

Detailinformationen zum AWS AMI.
Abbildung 2: Detailinformationen zum AWS AMI.

Instanz-Metadaten

Es geht aber noch professioneller: Jede EC2-Instanz kennt nämlich Instanz-Metadaten und Instanz-Userdaten. Bei Instanz-Metadaten handelt es sich um Laufzeitdaten der betreffenden Instanz, die zum Beispiel zu deren Verwaltung aus Skripten abgerufen werden können. Aus einer laufenden Instanz heraus erfolgt das durch Abruf der APIPA-Adresse (Automatic Private IP Adressing) http://169.254.169.254/latest/meta-data/.

Gleiches erreicht man aber auch durch entsprechende CLI-Aufrufe von der Kommandozeile:

curl http://169.254.169.254/latest/meta-data/

GET http://169.254.169.254/latest/meta-data/

Das kann zum Beispiel nützlich sein, wenn man Skripte schreibt, die aus der Instanz heraus laufen.

Bootstrapping

Während Instanz-Metadaten Laufzeitdaten zur jeweiligen Instanz liefern, dienen Instanz-Userdaten dem Erstellen generischerer AMIs, welche sich durch Konfigurationsdateien verändern lassen, die bereits zum Startzeitpunkt initiiert werden. Der Fachausdruck dafür lautet Bootstrapping und das Verfahren, welches dazu unter Linux verwendet wird, CloudInit. CloudInit wurde ursprünglich von Canonical für Ubuntu-Server im Kontext von OpenStack entwickelt, wird aber von allen namhaften Linux-Distributionen unterstützt. Heute ist CloudInit quasi der Industriestandard für Cloud-Server-Bootstrapping.

Mithilfe einer einfachen DSL (Domain Specific Language) ist es möglich, bestimmte Prozesse beim ersten Hochfahren einer Instanz auszuführen. CloudInit kommt daher häufig auch in Verbindung mit Bereitstellungssystemen wie Ansible, Chef, Puppet oder Salt zum Einsatz. In AWS wird CloudInit bei Linux-Instanzen dazu verwendet, um den auf Basis des gewählten AMIs auszurollenden Server gleich beim ersten Start auf einen aktuellen Status zu bringen. Auch Microsoft Azure nutzt beispielsweise CloudInit-Skripte. 

Die Handhabung unter AWS ist einfach: hierzu entfaltet man im EC2-Launch-Assistenten auf der Seite Step 3: Configure Instance Details am unteren Bildschirmrand den Abschnitt Advanced Details und fügt zum Beispiel bei einer Linux-Instanz die benötigte User-Daten entweder direkt in Form von ASCII-Text oder als angehängte Datei ein. Im einfachsten Fall bewirkt hier schon der Befehl yum update ein Aktualisieren des auszurollenden Systems, das ja im schlimmsten Fall auf einer sechs Monate alten Vorlage basiert. Es ist aber auch problemlos möglich, hier komplexe Bash-Skripte einzubauen, um zum Beispiel in der Instanz den Apache-Webserver zu installieren, persistent zu machen und zu starten:

#!/bin/sh

yum -y install httpd

chkconfig httpd on

/etc/init.d/httpd start

Konfigurationsdetails von AWS EC2 Instanzen.
Abbildung 3: Konfigurationsdetails von AWS EC2 Instanzen.

Oder man installiert gleichen einen kompletten LAMP-Stack als Userdata-Skript:

#!/bin/bash

yum update -y

yum install -y httpd24 php56 mysql55-server php56-mysqlnd

service httpd start

chkconfig httpd on

groupadd www

usermod -a -G www ec2-user

chown -R root:www /var/www

chmod 2775 /var/www

find /var/www -type d -exec chmod 2775 {} +

find /var/www -type f -exec chmod 0664 {} +

echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

Bei einer Windows-Instanz könnte man auf ähnliche Weise mittels Powershell einen IIS aufsetzen:

<powershell>

Import-Module ServerManager

Install-WindowsFeature web-server, web-webserver

Install-WindowsFeature web-mgmt-tools

</powershell>

Arbeiten mit der AWS-CLI

Darüber hinaus ist es fast immer nützlich, in der jeweiligen Instanz – oder optional auf dem eigenen Host im Datacenter – die AWS-CLI zu installieren.

Dies muss allerdings nicht in Form von Instanz-Userdaten oder manuell erfolgen, weil alle von AWS angebotenen AMIs die AWS-CLI-Tools (diese gibt es für Linux, Windows und Mac) bereits enthalten, ebenso wie die wichtigsten Programmiersprachen und Entwickler-Tools.

Bevor allerdings mit Hilfe der AWS-CLI andere AWS-Ressourcen – aus dem eigenen Account oder anderen Accounts – zugreifbar sind, muss die betreffende Instanz auch dazu berechtigt werden. Am komfortabelsten gelingt dies mit einer IAM-Rolle (Identity Access Management). Daher ist es immer empfehlenswert, einer neuen EC2-Instanz beim Erstellen eine IAM-Rolle zuzuweisen, auch wenn dieser anfangs noch leer ist, denn Policies lassen sich der Rolle später problemlos zuweisen, der Instanz aber nachträglich keine IAM-Rolle.

Hat man das nicht getan, muss man die Instanz im Nachhinein mit Hilfe von Access-Keys berechtigen, die jeder User zuvor im Security-Dashboard anlegen kann, wobei maximal zwei davon gleichzeitig aktiv sein können.

Hat man sich dann via SSH (Secure Shell) oder RDP (Remote Desktop Protocol) mit der Instanz verbunden, ist ein initialer Aufruf von aws configure erforderlich, um zum Beispiel den zu verwendenden Access-Key bekannt zu machen oder die Default-Region und das Ausgabeformat anzugeben.

In der folgenden Abbildung wurde das Kommando aws-configure zwei Mal nacheinander ausgeführt. Bei der zweiten Ausführung werden die bei der ersten Ausführung eingegeben Anmeldedaten zwar als Defaults übernommen, aber nicht mehr vollständig angezeigt. Alternativ könnte man den im Beispiel verwendeten Access-Key anschließend löschen. Danach kann man sich zum Beispiel mit aws –version die aktuelle Version der CLI anzeigen lassen:

Überblick über die verwendete AWS-CLI.
Abbildung 4: Überblick über die verwendete AWS-CLI.

Anschließend steht dem Absetzen zum Beispiel von AWS-Befehlen nichts mehr im Wege – sofern Access-Keys und/oder IAM-Rolle dies erlauben.

Das klappt genauso elegant mit der AWS-CLI für Windows, MAC oder Linux zum Installieren auf dem eigenen Rechner. Die entsprechenden Versionen stellt Amazon kostenlos zum Herunterladen zur Verfügung.

Nach dem Installieren der Windows-Version ist es zum Beispiel auch an der Windows-Eingabeaufforderung möglich, auf den kompletten AWS-CLI-Befehlssatz zuzugreifen. Vorher muss allerdings auch hier initial aws configure ausgeführt werden. Allein für EC2-Instanzen stehen weit über 200 Befehle zur Verfügung.

So zeigt zum Beispiel aws ec2 describe-instances alle derzeit in der Default-Region (der mit aws configure angegebenen Region) verfügbaren Instanzen. Wahlweise kann man die gewünschte Region mit Hilfe des Parameters –region spezifizieren.

 Instanz-ID in AWS EC2.
Abbildung 5: Instanz-ID in AWS EC2.

Ebenso einfach gelingt zum Beispiel das Starten einer Instanz mithilfe der Instanz-ID, etwa über aws ec2 start-instances --instance-id i-0d7f960ed56842f35.

Paramater lassen sich dabei vielfältig kombinieren. Sehr hilfreich ist zum Beispiel der Abfrage-Operator. So zeigt aws ec2 describe-instances --query 'Reservations[*].Instances[*].[ImageId,Tags[*]]' alle EC2-Instanzen in der Default-Region, liefert aber nur die jeweiligen AMI-IDs (ImageID) und etwaige Tags, wie beispielsweise den Namen, zurück.

Beispiel eines Abfrage-Operators der AWS-CLI.
Abbildung 6: Beispiel eines Abfrage-Operators der AWS-CLI.

Folgen Sie SearchDataCenter.de auch auf Twitter, Google+, Xing und Facebook!

Artikel wurde zuletzt im August 2017 aktualisiert

Pro+

Premium-Inhalte

Weitere Pro+ Premium-Inhalte und andere Mitglieder-Angebote, finden Sie hier.

Erfahren Sie mehr über Public-Cloud-Infrastruktur

Diskussion starten

Schicken Sie mir eine Nachricht bei Kommentaren anderer Mitglieder.

Mit dem Absenden dieser Daten erklären Sie sich bereit, E-Mails von TechTarget und seinen Partnern zu erhalten. Wenn Ihr Wohnsitz außerhalb der Vereinigten Staaten ist, geben Sie uns hiermit Ihre Erlaubnis, Ihre persönlichen Daten zu übertragen und in den Vereinigten Staaten zu verarbeiten. Datenschutz

Bitte erstellen Sie einen Usernamen, um einen Kommentar abzugeben.

- GOOGLE-ANZEIGEN

SearchSecurity.de

SearchStorage.de

SearchNetworking.de

SearchEnterpriseSoftware.de

Close