Trouver tous les Amazon AWS Instances Qui N'Ont Pas une Certaine Étiquette
Je suis en train d'utiliser le Amazon AWS Outils de Ligne de Commande pour rechercher toutes les instances qui n'ont pas de tag spécifié.
Trouver toutes les instances AVEC un tag, c'est assez simple, par exemple
ec2-describe-instances --filter "tag-key=Name"
Mais comment pourrais-je inverser ce filtre à retourner uniquement les cas qui n'ont pas de tag "Nom"?
- / / Et, pour ceux qui en quelque sorte arriver ici, lorsque l'on cherche comment supprimer par ==balise plutôt que de les supprimer par !=tag, (ahem), vous pourriez essayer ceci: stackoverflow.com/questions/42076274/...
Vous devez vous connecter pour publier un commentaire.
Cela va faire ce que vous demandez - trouver toutes les instances qui ne contient pas une balise nommée "YOUR_KEY_NAME_HERE" (2ème ligne de filtres pour les instances, sans balises nommé "Nom"):
Si vous voulais filtre contre la valeur de la balise, au lieu du nom de la marque, cette requête affiche toutes les instances qui ne contiennent pas une balise nommée YOUR_KEY_NAME_HERE dont la valeur est EXCLUDE_ME. (2e ligne des listes d'instances qui ne sont pas nommés "testbox1".)
Felipe est correct. L'analyse de la production est la seule façon d'aller, depuis l'API AWS ne fournit pas cette fonctionnalité, ni ne soit officielle de la AWS CLIs. Sortie JSON est très parseable, surtout quand on le compare au texte multi-ligne des dossiers qui les anciens CLI imprime par défaut.
http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeInstances.html
L'API elle-même renvoie du JSON, et la nouvelle awscli impressions JSON comme format de sortie par défaut. Le "jq" est un programme très utile de l'analyser, et même de coloriser lors de l'envoi vers un terminal, ou vous pouvez --texte de sortie pour réduire de retour sur les cordes.
Vous pouvez le faire avec jmespath (le moteur de la
--query
paramètre) en dépit de ce que disent les autres:Source: À l'aide d'Amazon Web Services de l'Interface de Ligne de Commande AWS (CLI) de Trouver des Instances sans "Name" de la Balise.
--filters
), mais manque un " pas " de la fonctionnalité. Donc, tout est tiré vers le bas localement et filtrée avec jmespath. Vous pouvez utiliser--debug
sur aws cli de voir les appels de ses décisions à l'API.Depuis
--filters
paramètre ne semble pas soutenir inverse de filtrage, voici ma solution à ce problème à l'aide de--query
paramètre:Il ressemble à un tableau de balise de touches pour chaque instance et des filtres à ceux de l'instance qui n'ont pas de Tag 'Nom' dans le tableau. Puis s'aplatit de sortie à un tableau d'Id d'instance.
jq
ou une autre commande à la sortie du filtre.Malheureusement, le sous-jacent appel d'api DescribeSnapshots ne supporte pas l'inverse de la balise de filtrage, et donc ni la CLI. Vous pouvez, cependant, faire côté client filtrage avec la
--query
paramètre qui effectue un JMESPath de recherche. Cela vous évitera d'avoir à utiliser des tubes comme avec user2616321 de réponse.Par exemple:
Ajouter
.InstanceId
à la fin de ce que vient d'obtenir l'id d'instance.--filter "tag-key=Name"
. La question a été l'inverse.J'ai eu le même problème et j'ai compris comment interroger sur l'Étiquette des Valeurs
vous aurez plus de chances d'avoir le même tag-clé définie pour toutes les instances; je l'ai défini un tag-clé "MachineName" sur toutes mes instances, et je veux filtrer par les valeurs de la marque-Nom de la clé
Ci-dessous l'exemple de filtre dont le Nom=Machine1
utiliser l'option
Cela fonctionne très bien pour moi
Autant que je sache, directement dans l'interface CLI, vous ne serez pas en mesure de le faire.
Par la syntaxe que vous utilisez, je suppose que vous êtes en utilisant les anciens cli. Je vous suggère de télécharger la nouvelle CLI http://aws.amazon.com/cli/ et appel
aws ec2 describe-instances --output json
de python, ruby ou tout autre langage de script comme vous pouvez analyser les données json de filtrage à l'aide de la bonne expression régulière en fonction de vos besoins
Moi aussi j'ai été totalement choqué par la façon dont cela est difficile à faire via l'interface CLI. J'ai aimé user2616321 réponse, mais j'ai eu un peu de mal à le sortie les champs exacts je voulais par exemple. Après avoir passé un certain temps à déconner et à défaut avec JMESPath dans la syntaxe de la requête, j'ai fini juste de faire un petit script ruby pour ce faire. Dans le cas où quelqu'un veut sauver quelques minutes de l'écriture de l'un des leurs, c'est ici:
Vous pouvez toujours le faire:
ec2-describe-instances | grep -v "Name"
:p