Работа с языком запросов CLI AWS для группировки и сортировки - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь перечислить все мои экземпляры ec2 и изображение, которое используется для вращения этого экземпляра.

aws ec2 describe-instances \
    --query 'Reservations[*].Instances[*].[InstanceId,ImageId]' \
    --output=table

Это дает мне прекрасную информацию.Но у меня есть много экземпляров и изображений.Хотел бы сгруппировать мои экземпляры на основе ImageId и подсчитать количество экземпляров против него.Есть предложения?

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Я использовал команду awk для вывода результата

aws ec2 describe-instances \
    --query 'Reservations[*].Instances[*].[ImageId]' \
    --output text \
    | grep -oP 'ami-\K\w+' \
    | awk '{count[$1]++}END{for(j in count) print j,count[j]}'

Я также добавил grep -oP для удаления повтора ami, который беспокоил меня, сортировка

0 голосов
/ 08 июня 2018

Нет простого способа сделать это напрямую через интерфейс командной строки AWS, о котором я знаю.Однако AWS экспортирует JSON (если вы не измените вывод, как вы делаете в приведенной выше команде), и JSON довольно легко манипулировать в большинстве языков.Например, вот пример использования утилиты bash "jq" для выполнения того, что вы хотите:

aws ec2 describe-instances \
    --region=us-east-1 \
    | jq -s 'map(.Reservations[].Instances[].ImageId) \
    | group_by(.) \
    | map({Image: .[0], Count: length})'

Это использует самую последнюю версию jq, которую вы можете получить либо с помощью apt-get install jq, либоyum install jq в зависимости от вашей ОС Linux.

Что он делает:

  1. Получение всей информации об экземпляре через командную строку в полном JSON (без фильтрации с использованием их CLI вообще, хотя вы могли бы, если бы вы 'мне нравится)

  2. Использование JQ для существенного анализа всех идентификаторов изображений (вы узнаете эту часть фильтра, поскольку интерфейс командной строки amazon по существу использует синтаксис фильтра JQ)

  3. Сгруппируйте все изображения в массивы по идентификатору изображения

  4. Создайте карту идентификатора изображения по длине массива (которая затем возвратит объект JSON, отображающий ImageIDна его счет.

...