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.

Similar Posts You Might Enjoy

Ausgesperrt! - Vorsicht bei S3 Berechtigung per Bucket policy

AWS S3 bietet viele Möglichkeiten, den Zugriff zu regeln S3 Buckets bieten flexible Möglichkeiten, Daten abzulegen und den Zugriff auf diese Daten zu beschränken. Dies für den öffentlichen (Internet) und internen Gebrauch. Über die normalen Berechtigungen (Permissions) lassen sich Berechtigungen ganz grob für “list” (Anzeigen), “upload/delete” (Schreiben), “view permissions” (Berechtigungen sehen) sowie “edit permission” (Berechtigungen schreiben) einstellen. Das reicht für viele Fälle, manchmal braucht man aber eine feinere Berechtigungsverwaltung, der bucket policy. - by Gernot Glawe

More Tools - CDK Examples

We need more CDK examples In this github repo we focus on examples for every day work. While there are some nice examples for the fancy stuff like fargate, ecs and so on in aws-cdk-examples/typescript at master · aws-samples/aws-cdk-examples · GitHub, i felt that basic examples where missing. So we created GitHub - tecracer/cdk-templates: Templates for aws cdk - by Gernot Glawe

Getting around circular CloudFormation Dependencies: S3-Event-Lambda-Role

Getting around circular CloudFormation dependencies Several posts complain about the inability of CloudFormation to apply a Lambda event function to an S3 Bucket with an dynamically generated name. The standard UseCase is an S3 Bucket with a Lambda event notification. In this special case the Bucket has a dynamically generated name. This cannot be done by pure CloudFormation! How to work around this circular depency? Let me show you an easy way: - by Gernot Glawe