2013-12-20 26 views
11

Der aws CLI verfügt über eine Abfrageoption, mit der Sie nur einige Informationen auswählen können.aws cli: Wie kann ich Listenwerte abfragen?

Für ein Beispiel, ich bin interessiert, nur den Namen der Sicherheitsgruppe von ec2 describe-Instanzen zu bekommen.

Wenn ich laufen:

aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,SecurityGroups] 

meine Ausgabe wie folgt aussieht:

i-xxxxxxx m1.type [{u'GroupName': 'groupName', u'GroupId': 'sg-xxxxx'}] 

ich auch Elemente der Liste mit einem Index zugreifen:

aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,Tags[0].Value,Tags[0].Name] 

Ist es möglich, Abfrage-Tags, so dass ich anstelle von Tag [0] nach einem Tag suche, wo der Name angegeben ist?

+0

Sie können nicht extrahieren nur, dass vom Ausgang? – Andrey

+0

@Andrey: Ich hoffe, dass es eine Möglichkeit gibt, so etwas wie SecurityGroups {Name = Foo} in der Abfrage zu haben. Die Alternative ist, das json-Format zu verwenden und es zu jq zu leiten, aber ich möchte sicherstellen, dass ich zuerst nichts verpasse. – chris

+0

aber warum nicht einfach mit jq? – Andrey

Antwort

1

Was Sie wahrscheinlich verwenden möchten ist die --filters Option:

aws ec2 describe-instances --output text --filters "Name=tag-key, Values=SecurityGroups, Name=tag-value, Values=Foo" --region us-east-1 

Sie können verschiedene Kriterien um für das genaue Feld Sie suchen nach „Abfrage“ ändern.

Kasse diese slideshare vom Atlanta AWS Talk meetup Gruppe auf dem neuen AWS CLI für weitere Beispiele

0

Auf diese Weise funktioniert für mich: (dies funktioniert nur in der Version 1.3.0 und höher)

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, Tags[?Key==`Name`].Value[*]]' 
8

Ab 1.3.0, können Sie diese Daten nun wie folgt abfragen:

--query 'Reservations[*].Instances[*].Tags[?Key==`<keyname>`].Value[]' 

Also, wo Sie haben diese:

 "Tags" : [ 
     { 
      "Value" : "webserver01", 
      "Key" : "InstanceName" 
     }, 

Sie würden dies tun wollen:

aws ec2 describe-instances --query 'Reservations[*].Instances[*].Tags[?Key==`InstanceName`].Value[]' 
+1

Hmm .. nicht erfolgreich, ich bekomme eine Reihe von leeren Ergebnissen anstelle der Werte [[], [], [] ...]. Ich bin auf Version aws-cli/1.7.3 Python/2.7.9 Windows/7 – sonjz

+1

Es herausgefunden, es hatte damit zu tun, wie Powershell es codierte, wenn ich doppelte Anführungszeichen verwendet: aws ec2 beschreiben-Instanzen - Abfrage "Reservations [*]. Instances [*]. Tags [? Key ==' 'InstanceName''] .Wert []". Beachte das Entkommen mit den Doppel-Grab-Akzenten. – sonjz