La aws cli a une option --query, qui vous permet de sélectionner seulement certaines informations.
Par exemple, je souhaiterais obtenir uniquement le nom du groupe de sécurité à partir de ec2 describe-instances.
Si je cours:
aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,SecurityGroups]
ma sortie ressemble à:
i-xxxxxxx m1.type [{u'GroupName': 'groupName', u'GroupId': 'sg-xxxxx'}]
Je peux aussi accéder aux éléments de la liste en utilisant un index:
aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,Tags[0].Value,Tags[0].Name]
Est-il possible d'interroger les balises pour qu'au lieu de balise [0], je recherche une balise dont le nom est spécifié?
À partir de la version 1.3.0, vous pouvez maintenant interroger ces informations de la manière suivante:
--query 'Reservations[*].Instances[*].Tags[?Key==`<keyname>`].Value[]'
Alors, où vous avez ceci:
"Tags" : [
{
"Value" : "webserver01",
"Key" : "InstanceName"
},
vous voudriez faire ceci:
aws ec2 describe-instances --query 'Reservations[*].Instances[*].Tags[?Key==`InstanceName`].Value[]'
Ce que vous voulez probablement utiliser est l'option --filters:
aws ec2 describe-instances --output text --filters "Name=tag-key, Values=SecurityGroups, Name=tag-value, Values=Foo" --region us-east-1
Vous pouvez modifier les filtres pour "interroger" le champ exact que vous recherchez.
checkout this slideshare extrait de l'exposé du groupe Atlanta AWS meetup sur la nouvelle interface de ligne de commande AWS pour davantage d'exemples
Cela fonctionne pour moi: (cela ne fonctionne que dans les versions 1.3.0 et supérieures)
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, Tags[?Key==`Name`].Value[*]]'