Einführung ins AWS Command Line Interface, Teil 1 AWS CLI – Grundlagen und Befehlsaufbau

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

Die Web-basierte Management-Konsole von Amazon Web Services wird dem Elastizitäts-Prinzip und Automatisierungsgedanken der Public Cloud nicht immer gerecht. Mit AWS CLI gibt es aber eine Kommandozeilen-Integration, die Cloud-Spezialisten bei der Ressourcen-Verwaltung entgegenkommt.

Anbieter zum Thema

Der Befehl „aws --version“ zeigt, ob und in welcher Version AWS CLI installiert wurde.
Der Befehl „aws --version“ zeigt, ob und in welcher Version AWS CLI installiert wurde.
(Bild: Drilling / AWS)

Mit der AWS-Befehlszeilen-Schnittstelle (Command Line Interface, CLI) steht dem Cloud-Admin ein Werkzeug zur Verfügung, mit der er sämtlicher Aspekte seiner AWS-Dienste steuern und verwalten kann. Amazon Web Services stellt die Kommandoschnittstelle für Windows (64- und 32-Bit) sowie für Mac und Linux (diese beiden erfordern Python 2.6.5 oder jünger) zum kostenlosen Download zur Verfügung. Die iX-Installation kann dabei mit Hilfe von pip erfolgen:

pip install awscli

Der Setup Wizard der AWS-Kommandozeilen-Schnittstelle.
Der Setup Wizard der AWS-Kommandozeilen-Schnittstelle.
(Bild: Drilling / AWS)

Der Admin findet die Download-Pakete, ein Erste-Schritte-How-To, eine CLI-Befehlsreferenz und den Einstieg ins Community-Form auf der AWS-CLI-Seite. Man kann die AWS-Kommonadozeilen-Schnittstelle auf einem beliebigen Arbeitsplatz im eigenen Rechenzentrum, im Heimbüro und natürlich in jeder beliebigen EC2-Instanz installieren.

Möchte der Admin das AWS-CLI in einer EC2-Instanz verwenden, bietet es sich an, eine Art „Command Host“ in einem Public Subnet bereitzustellen und dazu das Amazon-Linux-AMI zu verwenden, weil die CLI-Tools in diesem bereits vorinstalliert sind. Wurde CLI installiert, muss es noch konfiguriert werden, was man durch Eingeben von

aws configure

erreicht. Unter Windows lässt sich dieser Befehl wahlweise im Kommandozeilentool CMD oder über die Powershell absetzen. Das interaktive Kommando erfragt zunächst einen Access Key und das zugehörige Secret für gewünschten User.

Access Keys

Für das Management von AWS-Ressourcen genügt ein rein programmatischer Zugriff.
Für das Management von AWS-Ressourcen genügt ein rein programmatischer Zugriff.
(Bild: Drilling / AWS)

Dieser Anwender kann theoretisch ein root-Benutzer sein. Allerdings wird man zu diesem Zweck üblicherweise einen IAM-Benutzer verwenden, der nicht notwendigerweise eine menschliche Entinität sein muss. Geht es nur um das Verwalten von AWS-Ressourcen per CLI, kann man durchaus einen IAM-User (z. B. zum Berechtigen von EC2-Instanzen) anlegen, der keinen Zugriff auf die Management-Konsole sondern nur programmatischen Zugriff besitzt.

Der Installationsdialog.
Der Installationsdialog.
(Bild: Drilling / AWS)

Hierbei hat man jederzeit die Möglichkeit, temporär benötigte Access Keys anzulegen. Dabei liefert IAM die Zugriffsschlüssel-ID und den geheimen Zugriffsschlüssel zurück. Letzterer lässt sich nur beim Anlegen einmal sichtbar anzeigen und muss dann heruntergeladen und sicher aufbewahrt werden. Geht ein geheimer Zugriffsschlüssel verloren, muss der Admin den Zugriffsschlüssel des zugehörigen IAM-Benutzers löschen und einen neuen Schlüssel erstellen. Allgemein handelt es sich bei Access-Keys um ein symmetrisches AES-Verfahren.

AWS-Benutzer benötigen immer dann eigene Access-Keys, wenn sie AWS-Ressourcen über die AWS-CLI oder die Windows PowerShell Tools erstellen/verwalten möchten oder AWS-Ressourcen z. B. in Skripten oder einer Programmiersprache mit AWS-Support programmgesteuert aufzurufen. Auch werden Access-Keys benötigt, um direkte HTTP-Aufrufe mithilfe der APIs für einzelne AWS-Services auszuführen.

Erstellt man einen neuen Schlüssel, ist er per Default aktiv. Er lässt sich also für Aufrufe nutzen, die über AWS CLI, Windows-PowerShell-Tools und/oder direkt per API getätigt werden. Jeder Nutzer kann zu jedem Zeitpunkt zwei gleichzeitig aktive Zugriffsschlüssel besitzen. So lassen sich Schlüssel auch effizient rotieren. Ein Schlüssel lässt sich jederzeit deaktivieren und kann dann nicht mehr für API-Aufrufe benutzt werden.

Ferner kann der Nutzer nicht mehr benötigte und deaktivierte Keys jederzeit löschen. Zudem kann ein root-Nutzer oder ein IAM-User mit administrativen IAM- Berechtigungen anderen IAM-Usern Berechtigungen zum Auflisten, Rotieren und Verwalten ihrer eigenen Schlüssel geben. Doch zurück zur AWS CLI.

AWS-CLI konfigurieren

Erste Amtshandlung nach dem Installieren des CLI (bzw. zu dem Zeitpunkt und Kontext, zu dem CLI benutzt werden soll) ist es, mit Hilfe von

aws configure

die gewünschten Access Keys zu übergeben. Diese definieren dann, welche AWS-Ressourcen überhaupt per CLI administrierbar sind. Dies könnte der Bequemlichkeit halber der Access Key eines humanen IAM-Nutzers mit weitreichenden Berechtigungen sein.

Besser ist es, einen IAM-User mit speziell auf den Einsatzzweck abgestimmten Berechtigungen zu verwenden. Ein solcher muss nicht notwendigerweise den Access Type „AWS Management Console“ haben, d. h. auch ein Dienst oder Service kann ein IAM-User sein. Nach Access-Key und Secret fragt „aws configure“ nach der Default-Region. Die kann man angeben oder nicht.

In eckigen Klammern erscheint stets der Wert, der bei der letztmaligen Verwendung von „aws configure“ angegeben worden wurde, abgesehen von den beiden Access-Key-Werten. Bei denen sind jeweils nur die letzten vier Stellen sichtbar, damit man die verwendeten Schlüssel erkennt. Gibt der Nutzer die Default-Region nicht man, muss er die Region ggf. bei jedem einzelnen CLI-Befehl per Parameter „--region“ anhängen.

Ausgabeformat

Fehlt noch das gewünschte Ausgabeformat. AWS CLI unterstützt drei Varianten „JSON (json)“, „durch Tabstopps getrennten Text (text)“ und „Tabellen im ASCII-Format (table)“. Auch hier gilt: entweder man legt das Ausgabeformat pauschal mit „aws configure“ fest oder muss es beim betreffenden Befehl per Parameter „--output“ angeben.

Per Default werden sämtliche Ausgaben aus AWS CLI im JSON-Format (Javascript Object Notation) zurückgeliefert. JSON hat sich in den letzten Jahren zu einem De-facto-Standard für die Datenformatierung und vor allem den Datenaustausch im Internet entwickelt, weil es von Menschen und „Maschinen“ gleichermaßen gut les- und analysierbar ist. JSON basiert auf dem JavaScript-Standard und lässt sich problemlos als Objekt in einer JavaScript-Anwendung instanziieren.

Die JSON-Ausgabe eignet sich am besten für die programmatische Behandlung der Ausgabe durch verschiedene Sprachen. Das Tabellenformat hingegen ist für Entwickler einfacher lesbar und das Textformat funktioniert gut mit traditionellen Unix-Tools für die Textverarbeitung, zum Beispiel sed, grep und awk oder für Windows PowerShell-Skripte.

Erste Schritte

Der Befehl „aws --version“ zeigt, ob und in welcher Version AWS CLI installiert wurde.
Der Befehl „aws --version“ zeigt, ob und in welcher Version AWS CLI installiert wurde.
(Bild: Drilling / AWS)

Wurde AWS CLI installiert, sollte der Admin durch Eingeben von

aws –version

zunächst prüfen, ob die Installation erfolgreich war und welche CLI-Version installiert wurde. Eine komplette Befehlsreferenz für das AWS CLI findet sich in der offiziellen Dokumentation. Hierbei ist auch zur erkennen, dass sich Befehlsumfang, Parametersatz und Optionen für jeden einzelnen, mittels CLI steuerbaren AWS-Service unterscheiden (wie auch API-Calls bzw. SDK-Aufrufe). Die allgemeine Aufrufstruktur folgt dabei immer dem Muster:

aws <service> <operation> <parameters> <options>

Das Subkommando „describe instances“ führt mitunter zu sehr komplexen Ausgaben.
Das Subkommando „describe instances“ führt mitunter zu sehr komplexen Ausgaben.
(Bild: Drilling / AWS)

Ein AWS-CLI-Aufruf ist also immer eine Konstruktion aus den drei Teilen „Command“, „Sub-Command“ und „Parameter“. Dabei gilt Folgendes:

Command ist der anzusteuernde Top-Level-„Service“, wie z. B. „EC2“ oder „S3“. Eine Liste aller aktuell unterstützten Dienste findet sich in der der o. e. Kommando-Referenz.

Subcommand ist die „Operation, die auf diesem Dienst ausgeführt wird (bei „EC2“ beispielsweise „run-instances“), wobei „run-instances“ ein Unterbefehl (Subcommand) von „EC2“ ist und für das Erstellen einer neuen Instanz verwendet wird.

Parameters sind sämtliche Argumente, die zur Durchführung der „Operation“ (Subcommand) erforderlich sind. Dem Argument-Namen werden immer zwei Bindestriche (-) vorangestellt. Um zum Beispiel die Operation „ec2 run-instances“ auszuführen, übergibt man eine Reihe von Parametern, wie z. B. die AMI ID.

Options bieten innerhalb der CLI Auswahlmöglichkeiten, die der Admin beim Ausführen des Vorgangs angeben könnte. Eine der am häufigsten verwendeten Optionen ist z. B „--query“, mit deren Hilfe man die JSON-Ausgabe so begrenzen kann, dass z. B. nur die Instanz-ID der neuen Instanz zurückgegeben wird.

Hier eine per Option „--output table“ generierte Tabelle für das „describe instances“-Subkommando.
Hier eine per Option „--output table“ generierte Tabelle für das „describe instances“-Subkommando.
(Bild: Drilling / AWS)

Begrenzt man die Ausgabe nicht mit „--query2“, wird immer das komplette JSON-Array ausgegeben. Beim Subcommand „describe instances“ beispielsweise, der alle im aktuellen Kontext (Access-Key, Region) vorhandenen Instanzen anzeigt, kann die Ausgabe (wie in der obigen Powershell-Abfrage gezeigt) sehr komplex ausfallen. Im tabellarischen Ausgabeform (--output table) sähe es dann so aus, wie im vorangestellten Bild.

(ID:45026587)