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

Как узнать частный и общедоступный IP-адрес экземпляра ec2 через aws cli?

Ответы, которые я нашел до сих пор (например, Узнать публичный IP-адрес сервера EC2) предлагаем использовать wget или curl чтобы добраться до сервера.

Они бесполезны для меня, потому что мои экземпляры ec2 недоступны напрямую из Интернета.

я пытался

 aws ec2 --profile prod describe-instances --filters Name=instance-id,Values=i-00914683ababcba7eb1

Но в возвращенном результате JSON нет информации об IP-адресах.

Какую команду aws cli я могу использовать для получения этой информации?

Обычно это можно сделать с помощью --query filter.

Если вам нужен только частный IP-адрес:

aws --region YOUR-AWS-REGION \
ec2 describe-instances \
--filters \
"Name=instance-state-name,Values=running" \
"Name=instance-id,Values=i-00914683ababcba7eb1" \
--query 'Reservations[*].Instances[*].[PrivateIpAddress]' \
--output text

Если вам нужен только публичный IP-адрес:

aws --region YOUR-AWS-REGION \
ec2 describe-instances \
--filters \
"Name=instance-state-name,Values=running" \
"Name=instance-id,Values=i-00914683ababcba7eb1" \
--query 'Reservations[*].Instances[*].[PublicIpAddress]' \
--output text

Или вы можете иметь оба:

aws --region YOUR-AWS-REGION \
ec2 describe-instances \
--filters \
"Name=instance-state-name,Values=running" \
"Name=instance-id,Values=i-00914683ababcba7eb1" \
--query 'Reservations[*].Instances[*].[PrivateIpAddress, PublicIpAddress]' \
--output text

Конечно, вы также можете получить вывод в формате json. Просто измени --output text к --output json

Подробнее о фильтрах --query.

Оказывается, я могу это сделать

 aws ec2 --profile prod describe-instances --filters Name=instance-id,Values=i-0f47d09e1d9659981 | jq ".Reservations[0].Instances[0].NetworkInterfaces[0].PrivateIpAddress"

и он вернется

10.0.9.7

Моя команда в вопросе не удалась, потому что по чистой случайности этот экземпляр был отключен. Так было NetworkInterfaces раздел в результате.