aws-cli
De parameter --query
Zoeken…
Opmerkingen
De parameter --query
wordt vaak over het hoofd gezien, maar is ongelooflijk krachtig. Het gebruikt de JMESPath- querytaal om servicereacties te filteren tot precies wat u wilt.
Instanties op een gemakkelijk leesbare manier weergeven
Instanties hebben veel metagegevens die worden geretourneerd door een oproep om describe-instances
te describe-instances
, maar vaak wilt u alleen de basisprincipes zien. U kunt een JMESPath-query in combinatie met tabeluitvoer gebruiken om beknopte exemplaarinformatie op een gemakkelijk leesbare manier weer te geven.
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 |
+-----------+---------------+----------+------------+
Laten we dat nu stuk voor stuk breken. Eerst hebben we - --output table
. Dit levert een ingekleurde tabelweergave van de reactie op. Dit is meestal het handigst met opdrachten die kleine gegevenssets retourneren of waar u de gegevens naar beneden hebt gefilterd.
Nu naar de --query
. Deze ziet er lang uit, maar het is eigenlijk vrij eenvoudig. Het eerste deel is Reservations[].Instances[]
. Dit retourneert een afgeplatte lijst van alle geretourneerde instanties.
Het volgende deel van de zoekopdracht is ingekapseld met .{}
. Wat dit doet, is het maken van een nieuw json-object voor elk item in de lijst, waarbij elke waarde een JMESPath-query is die op het bronobject moet worden toegepast (in dit geval een exemplaar). De meeste hiervan zijn heel eenvoudig, maar Name
is een beetje ingewikkelder.
De volledige vraag om Name
te krijgen is Tags[?Key == 'Name'].Value | [0]
. Het eerste deel daarvan, Tags[?Key == 'Name']
zoekt in de instantie-tags naar een tag waarvan de sleutel Name
. De tweede helft. .Value | [0]
is het selecteren van de waarden van elk van die tags en vervolgens het eerste item uit de lijst nemen (in dit geval zal er maar één zijn).
Precies wat je in die tabel wilt, is helemaal aan jou. Als u bijvoorbeeld DNS-informatie wilt toevoegen, kunt u eenvoudig een nieuwe sleutel- 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 |
+--------------------------------------------------+-----------+---------------+----------+------------+