CLI AWS: как добиться определенного выходного формата для описательных экземпляров? - PullRequest
1 голос
/ 03 мая 2019

Я пытаюсь получить список всех наших экземпляров, отформатированных так:

Tag:Name.Value instance-id private-ip-address

Это команда, которую я использую:

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[Tags[?Key==`Name`].Value[],InstanceId,PrivateIpAddress]' --output text

И вот что я получаю в качестве вывода:

instance-id private-ip-address
tag:name.value

Несмотря на то, что у меня есть бит Tag перед всем остальным, он все равно отображается в новой строке под соответствующим ID / IP.

Есть ли способ это исправить?Также любой способ получить такой формат:

Tag:name.value,instance-id,private-ip-address

Спасибо

Ответы [ 2 ]

3 голосов
/ 03 мая 2019

CLI

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[[Tags[?Key==`Name`].Value[],InstanceId, PrivateIpAddress][]]' --output text | sed 's/\t/,/g' 

Это может быть достигнуто без использования jq только с синтаксисом запроса aws cli.

Вам необходимо "сгладить" имя тега с помощьюдругие поля с оператором [].Вывод будет разделен на табуляцию, поэтому sed 's/\t/,/g' для замены табуляции запятой.

Примечание: на компьютерах Mac sed 's/\t/,/g' может не работать, так как \t не распознается как символ табуляции.Чтобы вставить вкладку, нажмите Ctrl+V, а затем Tab

2 голосов
/ 03 мая 2019

Я обнаружил, что jq - самый гибкий способ работы с CLI AWS.

Следующая команда берет данные из describe-instances и передает их в jq. jq извлекает интересующие вас биты и выводит их в указанном вами формате CSV.

CLI

aws ec2 describe-instances  |jq -r '.Reservations[].Instances[]| . as $i | [($i.Tags|from_entries|.Name)?, $i.InstanceId, $i.PrivateIpAddress] |@csv'

выход

"ac02-01", "я-0123456789abcdef", "10.0.0.214"

Ссылки

Как извлечь конкретный тег значения ключа из ec2 description-instance

...