aws-cli
Parametern - frågan
Sök…
Anmärkningar
Parametern - --query
förbises ofta, men den är otroligt kraftfull. Den använder JMESPath- frågespråket för att filtrera tjänstesvar till exakt vad du vill.
Lista instanser på ett lättläst sätt
Instanser har många metadata som kommer tillbaka från ett samtal för att describe-instances
, men ofta vill du bara se grunderna. Du kan använda en JMESPath-fråga i kombination med tabellutdata för att visa kortfattad instansinformation på ett lättläsbart sätt.
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 |
+-----------+---------------+----------+------------+
Nu låter vi bryta upp det bit för bit. Först har vi - --output table
. Detta ger en färgad tabellrepresentation av svaret. Detta är i allmänhet mest användbart med kommandon som returnerar små uppsättningar data eller där du har filtrerat ned data.
Nu på --query
. Den här ser lång ut, men den är faktiskt ganska enkel. Den första delen är Reservations[].Instances[]
. Detta ger en platt platta lista över alla returnerade instanser.
Nästa del av frågan är inkapslad med .{}
. Vad detta gör är att skapa ett nytt json-objekt för varje objekt i listan där varje värde är en JMESPath-fråga som ska tillämpas på källobjektet (i detta fall en instans). De flesta av dessa är väldigt enkla, men Name
är lite mer komplex.
Den fullständiga frågan för att få Name
är Tags[?Key == 'Name'].Value | [0]
. Den första delen av det, Tags[?Key == 'Name']
söker efter instansens taggar efter en tagg vars nyckel är Name
. Den andra halvan .Value | [0]
väljer värdena på var och en av dessa taggar och tar sedan det första objektet från listan (i det här fallet kommer det bara att finnas en).
Exakt vad du vill ha i tabellen är helt upp till dig. Om du till exempel vill lägga till DNS-information kan du enkelt lägga till en ny nyckel 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 |
+--------------------------------------------------+-----------+---------------+----------+------------+