aws-cli
Der Parameter --query
Suche…
Bemerkungen
Der Parameter --query
wird oft übersehen, ist aber unglaublich mächtig. Es verwendet die JMESPath- Abfragesprache, um Dienstantworten genau nach Ihren Wünschen zu filtern.
Instanzen leicht lesbar auflisten
Instanzen verfügen über eine Vielzahl von Metadaten, die von einem Aufruf von describe-instances
, aber oft möchten Sie nur die Grundlagen sehen. Sie können eine JMESPath-Abfrage in Kombination mit einer Tabellenausgabe verwenden, um präzise Instanzinformationen auf gut lesbare Weise anzuzeigen.
aws ec2 describe-instances --output table --query "Reservations[].Instances[].{Name: Tags[?Key == 'Name'].Value | [0], Id: InstanceId, State: State.Name, Type: InstanceType}"
-----------------------------------------------------
| DescribeInstances |
+-----------+---------------+----------+------------+
| Id | Name | State | Type |
+-----------+---------------+----------+------------+
| i-abc123 | None | stopped | m3.large |
| i-def456 | amazon linux | stopped | t2.micro |
| i-ghi789 | proxy | running | t2.micro |
+-----------+---------------+----------+------------+
Jetzt lassen wir das Stück für Stück aufbrechen. Erstens haben wir eine --output table
. Dies erzeugt eine farbige Tabellendarstellung der Antwort. Dies ist im Allgemeinen am nützlichsten bei Befehlen, die kleine Datensätze zurückgeben oder bei denen Sie die Daten nach unten gefiltert haben.
Nun zu der --query
. Dieser sieht lang aus, ist aber eigentlich ganz einfach. Der erste Teil ist Reservations[].Instances[]
. Dies gibt eine reduzierte Liste aller zurückgegebenen Instanzen zurück.
Der nächste Teil der Abfrage wird mit .{}
. Dabei wird für jedes Element in der Liste ein neues Json-Objekt erstellt, bei dem jeder Wert eine JMESPath-Abfrage ist, die auf das Quellobjekt (in diesem Fall eine Instanz) angewendet werden soll. Die meisten davon sind sehr einfach, aber Name
ist etwas komplexer.
Die vollständige Abfrage zum Abrufen von Name
lautet Tags[?Key == 'Name'].Value | [0]
. Der erste Teil, Tags[?Key == 'Name']
durchsucht die Tags der Instanz nach einem Tag, dessen Schlüssel Name
. Die zweite Hälfte .Value | [0]
wählt die Werte jedes dieser Tags aus und nimmt dann das erste Element aus der Liste (in diesem Fall gibt es nur eines).
Was genau Sie in dieser Tabelle wollen, liegt ganz bei Ihnen. Wenn Sie beispielsweise DNS-Informationen hinzufügen DNS: PublicDnsName
, können Sie problemlos einen neuen Schlüssel DNS: PublicDnsName
hinzufügen DNS: PublicDnsName
:
aws ec2 describe-instances --output table --query "Reservations[].Instances[].{Name: Tags[?Key == 'Name'].Value | [0], Id: InstanceId, State: State.Name, Type: InstanceType, DNS: PublicDnsName}"
--------------------------------------------------------------------------------------------------------
| DescribeInstances |
+--------------------------------------------------+-----------+---------------+----------+------------+
| DNS | Id | Name | State | Type |
+--------------------------------------------------+-----------+---------------+----------+------------+
| | i-abc123 | None | stopped | m3.large |
| | i-def456 | amazon linux | stopped | t2.micro |
| ec2-192-168-1-1.us-west-2.compute.amazonaws.com | i-ghi789 | proxy | running | t2.micro |
+--------------------------------------------------+-----------+---------------+----------+------------+