Использование JMESPath и aws ec2 описывают экземпляры для вывода нескольких значений тегов
Я пытаюсь вывести несколько тегов из описания экземпляров ec2. Значения тега, которые мне нужны, это Name и aws: autoscaling: groupName.
"Tags": [
{
"Value": "somename",
"Key": "Name"
},
{
"Value": "some-asg-name",
"Key": "aws:autoscaling:groupName"
},
{
"Value": "somethingelse",
"Key": "project"
}
],
Вот что у меня так далеко:
aws ec2 describe-instances --instance-ids i-12345678 --query 'Reservations[].Instances[].[Tags[? contains(`["aws:autoscaling:groupName","Name"]`, Key)] | [0].Value,[1].Value,InstanceId]' --output text
Что приводит к:
somename None i-12345678
Вместо:
somename some-asg-name i-12345678
Я пробовал обе двойные трубы ||
а также contains
но не могу получить результат, который мне нужен. Кроме того, я не уверен [1].Value
это правильный способ получить 2-й соответствующий тег.
2 ответа
Об этом может быть проще подумать, если вы разделите фильтрацию тегов и выделите выходные данные на отдельные части.
Шаг за шагом:
Сначала выберите все экземпляры:
Reservations[].Instances[]
Затем направьте фильтр только для экземпляров с обоими желаемыми тегами:
| [? Tags[? Key == 'Name']] | [? Tags[? Key == 'aws:autoscaling:groupName']]
Затем выберите InstanceId и значения тегов:
.[InstanceId,Tags[? Key == 'Name' || Key == 'aws:autoscaling:groupName'].Value]
Полный пример:
aws ec2 describe-instances --query "Reservations[].Instances[] | [? Tags[? Key == 'Name']] | [? Tags[? Key == 'aws:autoscaling:groupName']].[InstanceId,Tags[? Key == 'Name' || Key == 'aws:autoscaling:groupName'].Value]"
Пример вывода
i-aaaa1234
myNameValue myASGvalue
i-bbbb1234
myNameValue myASGvalue
Дальнейшее чтение
Я думал о синтаксисе канала неправильно. Это работает:
aws ec2 describe-instances --instance-ids i-12345678 --query 'Reservations[].Instances[].[Tags[?Key==`Name`] | [0].Value,Tags[?Key==`aws:autoscaling:groupName`] | [0].Value,InstanceId]' --output text
и выводы:
somename some-asg-name i-12345678
Кроме того, это решение помещает выходные данные в одну строку для каждого экземпляра, поэтому его можно использовать со многими экземплярами в --output table