Извлеките атрибуты экземпляра EC2 и сгладьте выходные данные с помощью интерфейса командной строки AWS EC2 - PullRequest
0 голосов
/ 11 октября 2019

Я использую команду ниже aws ec2 description-instance, чтобы вернуть список запущенных EC2. Выходными данными является TSV в 2 строки, первая строка - идентификатор учетной записи (OwnerId), а остальная часть запроса отображается во второй строке. Я хотел бы, чтобы все атрибуты были сведены в одну строку, но из-за характера вывода json вызовов API, есть ли способ манипулировать выводом в одной строке?

aws ec2 describe-instances --output text --profile $account --query 'Reservations[*].[[OwnerId, Instances[*].[InstanceId, InstanceType, State.Name, Platform, Placement.AvailabilityZone, PublicIpAddress, PrivateIpAddress,[Tags[?Key== Имя ].Value][0][0],[Tags[?Key== Среда ].Value][0][0]]]]' --filter --filters Name=instance-state-name,Values=running >> $outfile

1234567890 i-03cxxxxxxxdab t2.medium running windows ap-southeast-1a 10.0.0.0 10.10.0.10 api-abc-prod-01 PROD

желаемый выход в одну строку

1234567890 i-03cxxxxxxxdab t2.medium running windows ap-southeast-1a 10.0.0.0 10.10.0.10 api-abc-prod-01 PROD

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Во-первых, AWS cli предлагает указать формат вывода, поэтому вы можете установить выход text, а затем заменить новую строку пробелом. Вы можете попробовать

aws ec2 describe-instances --output text  --profile test --query 'Reservations[*].[[OwnerId, Instances[*].[InstanceId, InstanceType, State.Name, Platform, Placement.AvailabilityZone, PublicIpAddress, PrivateIpAddress,[Tags[?Key==Name].Value][0][0],[Tags[?Key==Environment].Value][0][0]]]]'  --filter --filters Name=instance-state-name,Values=running --output text | tr '\r\n' ' '

Формат вывода текста

Формат текста организует вывод интерфейса командной строки AWS в строки с разделителями табуляции. Он хорошо работает с традиционными текстовыми инструментами Unix, такими как grep, sed и awk, а также с обработкой текста, выполняемой PowerShell.

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

IDENTIFIER  sorted-column1 sorted-column2
IDENTIFIER2 sorted-column1 sorted-column2

, поэтому вы можете использовать конвейер, используя tr '\r\n' ' '

. Или вы можете использоватьawk

aws ec2 describe-instances --output text  --profile test --query 'Reservations[*].[[OwnerId, Instances[*].[InstanceId, InstanceType, State.Name, Platform, Placement.AvailabilityZone, PublicIpAddress, PrivateIpAddress,[Tags[?Key==Name].Value][0][0],[Tags[?Key==Environment].Value][0][0]]]]'  --filter --filters Name=instance-state-name,Values=running  | awk 1 ORS=' '

обновление:

Если вы хотите добавить ownerID с подробностями каждого экземпляра, используйте это.

aws ec2 describe-instances --output text   --query 'Reservations[*].[[OwnerId, Instances[*].[InstanceId, InstanceType, State.Name, Platform, Placement.AvailabilityZone, PublicIpAddress, PrivateIpAddress,[Tags[?Key==Name].Value][0][0],[Tags[?Key==Environment].Value][0][0]]]]'  --filter --filters Name=instance-state-name,Values=running | paste -d" " - -

0 голосов
/ 11 октября 2019

Как рекомендовано в верхнем ответе в Синтаксический анализ JSON с инструментами Unix -> вы можете использовать jq для этого https://stedolan.github.io/jq/, см. Учебник по извлечению соответствующих полей ... https://stedolan.github.io/jq/tutorial/

...