Назад | Перейти на главную страницу

Как бы вы составили список экземпляров с использованием 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'

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

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, и это даст тот же результат.

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

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

$ 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

Попробуй это

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

Вышеупомянутые ответы хороши, но мой любимый из них - тоже;

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'

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

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

Я добавил фильтр по состоянию экземпляра «работает». Разместите это здесь, если это кому-то поможет.

Мой вариант использования немного отличается, я генерирую файлы хоста 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 }'

Добавляем это для людей, которые найдут этот пост при поиске информации о вашем экземпляре. Вы также можете добавить 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 вы можете использовать:

aws ec2 describe-instances --region=us-east-1 --query 'Reservations[].Instances[].[InstanceId,Tags[?Key==Name].Value|[0],PrivateIpAddress,PublicIpAddress]' --output text --profile ProfileName