Как Вы пошли бы о списке экземпляров с помощью aws cli в определенном VPC с Именем тега, частным IP-адресом идентификатора экземпляра и экземпляра?

Самые близкие, которые я имею, добираются, использует следующие команды.

Эта команда управляет к спискам всем названием экземпляров.

aws ec2 describe-instances --filters Name=vpc-id,Values=vpc-e2f17e8b --query 'Reservations[].Instances[].Tags[?Key==`Name`].Value[]'

Этой команде удается перечислить весь частный IP-адрес, идентификатор экземпляра и ВСЕ теги, в которых я не нуждаюсь. Мне просто нужно имя.

aws ec2 describe-instances --filters Name=vpc-id,Values=vpc-e2f17e8b | jq '.Reservations[].Instances[] | {PrivateIpAddress, InstanceId, Tags}'

Я не уверен, почему я не могу выполнить команду как этот путь:

aws ec2 describe-instances | jq '.["Reservations"]|.[]|.Instances|.[]|.PrivateIpAddress + " " + .InstanceId + " " + .Tags[?Key==`Name`].Value[]'

Эта команда работает, но ее показ всех имен Ключа Тегов.

aws ec2 describe-instances | jq '.["Reservations"]|.[]|.Instances|.[]|.PrivateIpAddress + " " + .InstanceId + " " + .Tags'
19
задан 28 February 2014 в 08:13
6 ответов

Что-то вроде этого?

aws ec2 describe-instances --query 'Reservations[].Instances[].[PrivateIpAddress,Tags[?Key==`Name`].Value[]]' --output text | sed '$!N;s/\n/ /'
2
ответ дан 2 December 2019 в 20:15

Вам нужно избегать обратной косой черты, чтобы правильно отформатировать ответ.

aws ec2 describe-instances --query 'Reservations[].Instances[].[PrivateIpAddress,Tags[?Key==`Name`].Value[]]' --output text | sed '$!N;s/\n/ /'

Итак, это фактическая команда, которая вам нужна:

$ aws ec2 describe-instances --filters Name=vpc-id,Values=vpc-ac973bc9 --query 'Reservations[].Instances[].[PrivateIpAddress,InstanceId,Tags[?Key==`Name`].Value[]]' --output text | sed '$!N;s/\n/ /'
10.101.255.10   i-91efd39b Server1
10.101.255.9    i-f1e8d4fb Server2

И вам не нужно .Значение [] . Вы можете просто использовать .Value , и это даст тот же результат.

Это круто, кстати. Я буду реализовывать это сам!

ИСПРАВЛЕНИЕ: Вышеуказанное не будет работать, если значение .Value равно «None». Это работает лучше:

$ aws ec2 describe-instances --filters Name=vpc-id,Values=vpc-ac973bc9 --query 'Reservations[].Instances[].[PrivateIpAddress,InstanceId,Tags[?Key==`Name`].Value[]]' --output text | sed 's/None$/None\n/' | sed '$!N;s/\n/ /'
10.101.255.10   i-91efd39b Server1
10.101.255.9    i-f1e8d4fb Server2
10.101.255.8    i-f6c2450a      None
10.101.255.7    i-34a6afce Server3
24
ответ дан 2 December 2019 в 20:15

ಇದನ್ನು ಪ್ರಯತ್ನಿಸಿ

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,Tags[?Key==`Name`].Value|[0],State.Name,PrivateIpAddress,PublicIpAddress]' --output text | column -t
8
ответ дан 2 December 2019 в 20:15

Ответы выше - нормальные, но мой любимый из них;

aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,State.Name,InstanceType,PrivateIpAddress,PublicIpAddress,Tags[?Key==`Name`].Value[]]' --output json | tr -d '\n[] "' | perl -pe 's/i-/\ni-/g' | tr ',' '\t' | sed -e 's/null/None/g' | grep '^i-' | column -t

на самом деле, его можно поместить в список функций BASH;

awsls () { aws ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,State.Name,InstanceType,PrivateIpAddress,PublicIpAddress,Tags[?Key==`Name`].Value[]]' --output json | tr -d '\n[] "' | perl -pe 's/i-/\ni-/g' | tr ',' '\t' | sed -e 's/null/None/g' | grep '^i-' | column -t }

затем просто позвонить из приглашения в виде 'awsls'

.
7
ответ дан 2 December 2019 в 20:15

Я добавил фильтр для состояния экземпляра «работает». Публикуем его здесь на случай, если это будет полезно для всех.

Мой вариант использования немного отличается, я генерирую файлы хоста Ansible, поэтому мне просто нужно частное IP # имя на всех запущенных хостах.

aws ec2 describe-instances --profile=$PROFILE --filters Name=vpc-id,Values=$VPCID Name=instance-state-name,Values=running --query 'Reservations[].Instances[].[PrivateIpAddress,Tags[?Key==`Name`].Value[]]' --output text | sed 's/None$/None\n/' | sed '$!N;s/\n/ /' | awk '{print $1 " #" $2 }'
1
ответ дан 2 December 2019 в 20:15

Добавление этого для людей, которые найдут это сообщение при поиске информации о вашем экземпляре. Вы также можете добавить VPC в оператор выбора, чтобы получить его.

В PowerShell вы можете использовать:

(Get-EC2Instance -ProfileName Profile).Instances | select InstanceId,PrivateIPAddress,PublicIpAddress @{Name="Servername";Expression={$_.tags | where key -eq "Name" | select Value -expand Value}} | Format-Table.

С AWS CLI вы можете использовать:

aws ec2 describe-instances --region=us-east-1 --query 'Reservations[].Instances[].[InstanceId,Tags[?Key==Name].Value|[0],PrivateIpAddress,PublicIpAddress]' --output text --profile ProfileName
0
ответ дан 2 December 2019 в 20:15

Теги

Похожие вопросы