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[*]]'