2017-09-11 7 views
2

Tenir compte que je veux interroger aws une cli liste des instances qui ont le tag:aws-cli - Filtrage avec sortie --query et --filter

role = myrole

Je veux seulement le InstanceId et cette étiquette spécifique, donc j'ENJEU:

~ aws ec2 describe-instances \ 
    --filter "Name=tag:role,Values=myrole" \ 
    --query "Reservations[*].Instances[*].[InstanceId,Tags[?Key=='myId'].Value]" 

la réponse sera:

[ 
    [ 
     [ 
      "i-111111111111111111", 
      [] 
     ] 
    ], 
    [ 
     [ 
      "i-222222222222222222", 
      [ 
       "091117" 
      ] 
     ] 
    ], 
    [ 
     [ 
      "i-333333333333333333", 
      [] 
     ] 
    ] 
] 

Comment puis-je modifier t il requête pour obtenir uniquement les objets que cette balise valeur est une des chaînes non vides à savoir:

[ 
    [ 
     [ 
      "i-222222222222222222", 
      [ 
       "091117" 
      ] 
     ] 
    ] 
] 
+0

Si vous interrogez un nom et une valeur de balise spécifique, ne savez-vous pas déjà la valeur de tag? Dans ce cas, le résultat ne doit contenir aucune valeur de variable vide pour le nom de variable spécifique. – Dunedan

+0

Suis-je en train de lire que vous filtrez la requête par un tag A et voulez la valeur d'un tag B dans la sortie? – Dunedan

Répondre

1

La seule pièce manquante dans votre commande est de faire en sorte que l'étiquette myId est présente et a une valeur non vide. Ce filtre doit être appliqué aux instances sélectionnées (Instances[*]). Comment filtrer qui est couverte dans another answer on Stack Overflow et de l'intégrer dans votre commande est plutôt simple:

aws ec2 describe-instances \ 
    --filter "Name=tag:role,Values=myrole" \ 
    --query "Reservations[*].Instances[?Tags[?Key=='myId' && Value!='']].[InstanceId,Tags[?Key=='myId'].Value]"