aws-cli
Il parametro --query
Ricerca…
Osservazioni
Il parametro --query
viene spesso trascurato, ma è incredibilmente potente. Utilizza il linguaggio di query JMESPath per filtrare le risposte del servizio fino a esattamente ciò che si desidera.
Elenco delle istanze in un modo facile da leggere
Le istanze hanno un sacco di metadati che vengono restituiti da una chiamata per describe-instances
, ma spesso le volte si vuole solo vedere le basi. È possibile utilizzare una query JMESPath combinata con l'output della tabella per mostrare le informazioni dell'istanza concise in modo facilmente leggibile.
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 |
+-----------+---------------+----------+------------+
Ora lasciamoci sfondare pezzo per pezzo. Innanzitutto, abbiamo la --output table
. Questo produce una rappresentazione tabella colorata della risposta. Questo è generalmente più utile con i comandi che restituiscono piccoli insiemi di dati o dove sono stati filtrati i dati.
Ora sul --query
. Questo sembra lungo, ma in realtà è abbastanza semplice. La prima parte è Reservations[].Instances[]
. Questo restituisce un elenco appiattito di tutte le istanze restituite.
La parte successiva della query è incapsulata con .{}
. Ciò che sta facendo è creare un nuovo oggetto json per ogni elemento nell'elenco in cui ogni valore è una query JMESPath da applicare all'oggetto di origine (in questo caso, un'istanza). Molti di questi sono molto semplici, ma il Name
è un po 'più complesso.
La query completa per ottenere il Name
è Tags[?Key == 'Name'].Value | [0]
. La prima parte di questo, Tags[?Key == 'Name']
sta cercando i tag dell'istanza per un tag la cui chiave è Name
. La seconda metà .Value | [0]
sta selezionando i valori di ciascuno di questi tag e poi prendendo il primo elemento dall'elenco (in questo caso, ci sarà sempre e solo uno).
Esattamente ciò che vuoi in quel tavolo dipende completamente da te. Se si desidera aggiungere informazioni sul DNS, ad esempio, è possibile aggiungere facilmente una nuova chiave 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 |
+--------------------------------------------------+-----------+---------------+----------+------------+