6 Tipps und Tricks für AWS Kommandozeilen Ninjas

Das AWS Command Line Interface (CLI) erlaubt es Ihnen AWS Services einfach und bequem zu verwalten. Mit dem CLI können Sie im Terminal interaktiv Aufgaben bewältigen ohne die AWS Management Console benutzen zu müssen, was einen höheren Automatisierungsgrad ermöglicht. Außerdem können Shell-Skripte mit der Hilfe des AWS CLI verwendet werden um Infrastruktur-Setups zu automatisieren. Ein Beispiel: mit einem kleinen Shell-Skript und der AWS CLI kann zum Beispiel am Ende des Boot-Prozesses einer EC2-Instanz ein EBS Volume verbunden oder ein DNS-Eintrag über Route 53 angepasst werden.

Dieser Artikel beschreibt Tipps und Tricks für die Verwendung der AWS CLI im DevOps Alltag.

Kommando-Vervollständigung

Bei der Verwendung der CLI im Terminal ist die Kommando-Vervollständigung ein Killer-Feature. Nach dem Aktivieren lassen sich Kommandos mit der TAB-Taste automatisch vervollständigen. Damit kann die Arbeitsgeschwindigkeit bei der Verwendung der CLI signifikant erhöht werden.

Die folgenden Schritte sind notwendig um die Kommando-Vervollständigung für die bash auf OS X zu aktivieren:

echo "complete -C aws_completer aws" >> ~/.bash_profile
source ~/.bash_profile

Die offizielle Dokumentation enthält Instruktionen für andere Shells und Betriebssysteme.

Ergebnisse server-seitig filtern

Mit den Standardeinstellungen verwendet das CLI eine Seitengröße von 1000 und ruft all verfügbaren Elemente ab. Wenn Sie eine Liste mit mehr als 1000 Elementen abfragen wollen, oder Sie die Geschwindigkeit Ihrer Kommandos verbessern wollen, ist es eine gute Idee die Ergebnisse schon server-seitig zu filtern.

Viele der describe-* und list-* Kommandos unterstützen server-seitige Filter: --filter. Es ist zum Beispiel möglich EC2 Instanzen nach Instance Type zu filtern:

$ aws ec2 describe-instances --filter Name=instance-type,Values=t2.nano

Ergebnisse client-seitig filtern

Ein anderes nützliches Feature des CLI sind client-seitige Filter: --query. Die JMESPath Abfrage-Sprache wird für diese Art der Filterung verwendet.

Das folgende Beispiel listet die VPCs einer Region und filtert das Ergebnis mit einem client-seitigen Filter:

$ aws ec2 describe-vpcs --query "Vpcs[?VpcId == 'vpc-aaa22bbb'].CidrBlock"
[
"94.194.0.0/16"
]

Möglicherweise benötigen Sie das CIDR eines VPC als Variable in Ihrem Shell-Skript. Das folgende Beispiel zeigt, wie dies umgesetzt werden kann. Durch das Formattieren des Ergebnisses als Text durch die Verwendung des Parameters --output text werden die “ Zeichen aus dem JSON Ergebnis entfernt.

#!/bin/bash
CIDR=$(aws ec2 describe-vpcs --query "Vpcs[?VpcId == 'vpc-aaa22bbb'].CidrBlock" --output text)
echo $CIDR

Warten auf …

Beim Erstellen von Shell-Skripten mit der Hilfe des CLI wird hin und wieder die Notwendigkeit bestehen auf bestimmte Bedingungen zu warten. Zum Beispiel muss nach dem Erzeugen eines EBS Snapshots im Skript auf dessen Fertigstellung gewartet werden. Eine solche Warteschleife kann selbst durch wiederholte describe-* Abfragen implementiert werden. Es gibt aber auch eine viel einfachere Möglichkeit, die direkt in das CLI eingebaut ist: aws wait

Das folgende Beispiel enthält ein wait-Kommando, dass die Ausführung des Skriptes blockiert bis der EBS Snapshot abgeschlossen ist.

#!/bin/bash
echo "Waiting for EBS snapshot"
aws ec2 wait snapshot-completed --snapshot-ids snap-aabbccdd
echo "EBS snapshot completed"

IAM Rolle annehmen

Das CLI unterstützt IAM Rollen. Besonders praktisch, wenn man mit dem CLI zwischen mehreren AWS Accounts hin und her springen möchte.

Damit das CLI eine IAM Rolle annehmen kann ist folgende Konfiguration in der ~/.aws/config Datei notwendig: ein Profil mit einem IAM Benutzer und ein Profil für eine IAM Rolle.

[profile iam-user]
output = json
region = eu-west-1

[profile iam-role]
role_arn = arn:aws:iam:::role/
source_profile = iam-user
output = json
region = eu-west-1

Nur für den IAM Benutzer müssen jetzt noch Security Credentials unter ~/.aws/credentials abgelegt werden.

[iam-user]
aws_access_key_id = ***
aws_secret_access_key = ***

Durch das Anhängen des Parameter --profile iam-role an ein beliebiges CLI-Kommando kann jetzt die IAM Rolle angenommen werden.

Feineinstellung der S3 Konfiguration

Das AWS CLI enthält Transfer-Kommandos für S3: cp, sync, mv und rm. Sie können Feineinstellungen für diese S3-Kommandos vornehmen. Zum Beispiel erhöht die folgende Feineinstellung in der Datei ~/.aws/config die Übertragungsgeschwindigkeit, wenn für eine Synchronisation eine große Anzahl kleiner Dateien übertragen werden sollen:

[profile default]
...
s3 =
max_concurrent_requests = 100
max_queue_size = 10000
use_accelerate_endpoint = true

Die offizielle Dokumentation enthält weitere Informationen zu den speziellen Konfigurationsparametern für S3.

Mich würden Ihre Tipps und Tricks für die Verwendung des AWS CLI interessieren. Bitte hinterlassen Sie einen entsprechenden Kommentar.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.