Самое близкое, что у меня есть, - это использовать следующие команды.
Этой команде удается перечислить все имена экземпляров.
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