6 Tipps und Tricks für AWS Kommandozeilen Ninjas
This content is more than 4 years old and the cloud moves fast so some information may be slightly out of date.
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.