Aws cli: Как я могу запросить значения списка?
У aws cli есть опция -query, которая позволяет вам выбирать только некоторую информацию.
В качестве примера, мне интересно получить только имя группы безопасности из экземпляров ec2 describe-экземпляров.
Если я запустил:
aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,SecurityGroups]
мой вывод выглядит следующим образом:
i-xxxxxxx m1.type [{u'GroupName': 'groupName', u'GroupId': 'sg-xxxxx'}]
Я также могу получить доступ к элементам списка, используя индекс:
aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,Tags[0].Value,Tags[0].Name]
Можно ли запросить теги, чтобы вместо Tag [0] я искал тег, где указано имя?
Ответы
Ответ 1
Начиная с версии 1.3.0, вы можете запросить эту информацию следующим образом:
--query 'Reservations[*].Instances[*].Tags[?Key==`<keyname>`].Value[]'
Итак, у вас есть это:
"Tags" : [
{
"Value" : "webserver01",
"Key" : "InstanceName"
},
вы хотите сделать это:
aws ec2 describe-instances --query 'Reservations[*].Instances[*].Tags[?Key==`InstanceName`].Value[]'
Ответ 2
То, что вы, вероятно, хотите использовать, это опция --filters:
aws ec2 describe-instances --output text --filters "Name=tag-key, Values=SecurityGroups, Name=tag-value, Values=Foo" --region us-east-1
Вы можете изменить фильтры на "запрос" для точного поля, которое вы ищете.
ознакомьтесь с этим slideshare из беседы группы Atlanta AWS в новом AWS CLI для получения дополнительных примеров
Ответ 3
Этот способ работает для меня: (это работает только в версии 1.3.0 и выше)
aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId, Tags[?Key==`Name`].Value[*]]'