Einführung in AWS CLI, Teil 2 AWS Command Line Interface für EC2

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

EC2-Instanzen lassen sich innerhalb der Amazon Web Services per Command Line Interface anlegen, bearbeiten und verwalten. Wie das Sub-Command „EC2“ mit AWS-CLI über einen Kommando-Host realisiert wird, sehen wir uns in diesem Beitrag an.

Anbieter zum Thema

Um von einem Kommando-Host aus mit AWS CLI zu arbeiten, ist ein wenig Vorarbeit erforderlich.
Um von einem Kommando-Host aus mit AWS CLI zu arbeiten, ist ein wenig Vorarbeit erforderlich.
(Bild: Drilling / AWS)

Im ersten Teil dieses Workshops haben wir die AWS-CLI auf einem lokalen Windows-Arbeitsplatz im eigenen Rechenzentrum installiert. In freier Wildbahn wird man die AWS-CLI häufig aus einer EC2-Instanz heraus verwenden, um andere AWS-Dienste zu steuern.

Ein populäres Beispiel ist der Betrieb einer Art Kommando-Hosts in einem Public-Subnet. Dieser basiert auf einem Amazon-Linux-AMI, bei dem die CLI bereits vorinstalliert ist und soll ausschließlich dazu dienen, AWS-Ressourcen im aktuellen VPC zu verwalten oder neue Services zu instanziieren.

Der Kommando-Host benötigt erst einmal die passenden Berechtigungen.
Der Kommando-Host benötigt erst einmal die passenden Berechtigungen.
(Bild: Drilling / AWS)

Dieser Kommando-Host wird in einem öffentlichen Subnetz platziert und ist damit selbst aus dem eigenen Rechenzentrum heraus per SSH steuerbar. Das Aufsetzen des Kommando-Hosts erledigen wir für das folgende Beispiel mithilfe der AWS Management Console und platzieren diesem in einem eigens dazu angelegten öffentlichen Subnetz. Die notwenigen Workflows im EC2- und VPC-Dashboard sollten allerdings geläufig sein.

Da unser Kommando-Host letztendlich als Steuerzentrale zum Provisionieren weiterer EC2-Instanzen dienen soll, muss die Instanz über den erforderlichen Berechtigungskontext verfügen. Hierfür erstellen wir zunächst einfach eine neue IAM-Rolle „Kommando-Host“ für den EC2-Service, der wir die verwaltete Policy „EC2 Full Access“ anhängen.

Anschließend gilt es, eine Virtual Private Cloud mit öffentlichem Subnetz zu definieren.
Anschließend gilt es, eine Virtual Private Cloud mit öffentlichem Subnetz zu definieren.
(Bild: Drilling / AWS)

Anschließend erstellt man im VPC-Dashboard ein passendes VPC mit einem öffentlichen Subnetz. Das Erstellen der benötigten Internet-Gateways (IGW) der Routing-Tabelle und Subnetze kann manuell im VPC-Dashboard oder der Einfachheit halber mit Hilfe des VPC-Wizards erfolgen, wie folgende Abbildung zeigt.

Hier ein Überblick über die Konfigurationsmöglichkeiten für EC2-Instanzen.
Hier ein Überblick über die Konfigurationsmöglichkeiten für EC2-Instanzen.
(Bild: Drilling / AWS)

Sind die Voraussetzungen geschaffen, können wir die benötigte EC2-Instanz für den Kommando-Host erstellen. Der EC2-Launch-Wizard verwendet das Amazon-Linux-AMI als Vorlage, erhält die oben erstelle IAM-Rolle, das oben erstelle öffentliche Subnetz als Provisionierungsziel und ein einfaches User-Daten-Skript zum Aktualisieren der wichtigsten Pakete:

#!/bin/bashyum update -y

Das Installieren der AWS-CLI per Instanz-User-Daten erübrigt sich, da diese im AMI für Amazon Linux bereits installiert ist. Bei der Instanz-Größe können wir es bei „T2-Micro“ belassen und auch beim Root-Volume übernehmen wir die Default-Einstellungen, um im Free-Tier-Kontingent zu bleiben.

Lediglich bei der Security Group erstellen wir „on the fly“ im EC2-Launch-Wizard eine Neue für „SSH-Access“ (Port 22 eingehend von „überall“, d. h. 0.0.0.0/0) und kreieren abschließend ein neues RSA-Schlüsselpaar (nicht vergessen, den privaten Schlüssel herunterzuladen), um uns per SSH auf die Instanz verbinden zu können.

Der Befehl „aws configure“ muss initial auf der EC2-Instanz durchlaufen.
Der Befehl „aws configure“ muss initial auf der EC2-Instanz durchlaufen.
(Bild: Drilling / AWS)

Wurde die Instanz erstellt, können wir uns per SSH und dem eben erstellten asymmetrischen Schlüsselpaar auf die Instanz verbinden und dort initial „aws configure“ durchlaufen lassen, wie in Teil 1 dieser Workshop-Reihe beschrieben. Die symmetrischen AES-Schlüssel „Access Key + Secret“ muss man allerdings zuvor für den verwendeten IAM-User erstellt und aktiviert haben.

Damit sind alle Voraussetzungen erfüllt, um vom Kommando-Host aus mit der AWS CLI arbeiten und z. B. weitere Instanzen im öffentlichen Subnetz zu erzeugen. Wir verwenden für diesen Teil des Workshops den Sub-Command „EC2“, befassen uns also vorerst nur mit der AWS-CLI für EC2.

Web-Server erstellen

So wollen wir z.B. zunächst eine weitere EC2-Instanz für einen einfachen Webserver erstellen. Dessen User-Daten-Skript erstellen wir direkt auf den Kommando-Host in einem Editor (z. B. nano oder vi) und speichern es in einer Textdatei „UserData.txt“. Der Inhalt ist simpel und installiert nach dem Aktualisieren der Paketbasis den Apache-Webserver, startet ihn und macht ihn persistent.

#!/bin/bashwget -q --tries=10 --timeout=20 http://google.comyum update -yyum -y install httpd phpchkconfig httpd on/etc/init.d/httpd start

Mit diesem Skript bewaffnet, können wir die gewünschte neue Instanz auf Basis des Amazon-Linux-AMIs nun in der CLI vom Kommando-Host aus wie folgt erstellen:

aws ec2 run-instances --image-id <ami-id> --user-data file:///home/ec2-user/UserData.txt --key-name <key-name> --security-group-ids <sg-id> --instance-type t2.micro --subnet-id <subnet-id> --associate-public-ip-address --query 'Instances[*].InstanceId'

Die hervorgehobenen Eingaben sind dabei zu ergänzen. Die „image-id“ (=ami-id), die „sg-id“ und die „subnet-id“ sind identisch mit denen des Kommando-Hosts und können einfach im Tab „Details“ der Instance-Liste im EC2-Dashboard abgeschaut werden.

Den RSA-Key-Name finden wir im Menü „Key Pairs“ im EC“-Dashboard, sofern man nicht ohnehin ein eigenes Schlüsselpaar hat und verwendet.

Die neue Instanz auf Basis des Amazon-Linux-AMIs wird erstellt.
Die neue Instanz auf Basis des Amazon-Linux-AMIs wird erstellt.
(Bild: Drilling / AWS)

Das UserDaten-Skript wurde soeben auf dem Kommando-Host selbst erstellt. Sind alle Angaben vollständig und korrekt, ist die neue Instanz binnen Minuten einsatzbereit. Der Ausgabe-Parameter „--query“ sorgt im Beispiel dafür, dass das Kommando nur die Instance-ID der neu instanziierten Instant zurückliefert.

Die Arbeitsweise des --query-Parameters und weitere Möglichkeiten des EC2-Subcommands zum Erstellen, Verwalten und Auslesen von EC2-Instanzen verrät der nächste Teil dieser Workshop-Reihe.

(ID:45055724)