aws-cli
Parametr --query
Szukaj…
Uwagi
Parametr --query
jest często pomijany, ale jest niesamowicie potężny. Używa języka zapytań JMESPath do filtrowania odpowiedzi usług do dokładnie tego, czego chcesz.
Wyświetlanie instancji w łatwy do odczytania sposób
Instancje zawierają wiele metadanych, które są zwracane z wywołania describe-instances
, ale często trzeba po prostu zobaczyć podstawy. Można użyć zapytania JMESPath w połączeniu z danymi wyjściowymi tabeli, aby wyświetlić zwięzłe informacje o instancji w łatwy do odczytania sposób.
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 |
+-----------+---------------+----------+------------+
Teraz podzielmy to kawałek po kawałku. Po pierwsze, mamy --output table
. To tworzy pokolorowaną tabelę odpowiedzi. Jest to na ogół najbardziej przydatne w przypadku poleceń, które zwracają małe zestawy danych lub w których dane zostały przefiltrowane.
Teraz --query
do --query
. Ten wygląda na długi, ale w rzeczywistości jest dość prosty. Pierwsza część to Reservations[].Instances[]
. Zwraca spłaszczoną listę wszystkich zwróconych instancji.
Następna część zapytania jest zawarta w .{}
. Robi to, tworząc nowy obiekt json dla każdego elementu na liście, gdzie każda wartość jest zapytaniem JMESPath, które ma być zastosowane do obiektu źródłowego (w tym przypadku Instancji). Większość z nich jest bardzo prosta, ale Name
jest nieco bardziej złożona.
Pełne zapytanie do uzyskania Name
to Tags[?Key == 'Name'].Value | [0]
. Pierwsza część tego tagu Tags[?Key == 'Name']
polega na przeszukiwaniu tagów instancji w celu znalezienia znacznika, którego kluczem jest Name
. Druga połowa .Value | [0]
wybiera wartości każdego z tych tagów, a następnie bierze pierwszą pozycję z listy (w tym przypadku zawsze będzie tylko jeden).
Dokładnie to, czego chcesz w tym stole, zależy od Ciebie. Na przykład, jeśli chcesz dodać informacje DNS, możesz łatwo dodać nowy klucz 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 |
+--------------------------------------------------+-----------+---------------+----------+------------+