AWS CLI – How to Find EC2 Instance’s Private and Public IP

amazon ec2aws-cli

Answers I found so far (e.g. Find out public ip address of the EC2 server) suggest using wget or curl to reach the server.

They are not useful for me because my ec2 instances are not reachable from the internet directly.

I have tried

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

But there are no IPs in the returned JSON result.

Which aws CLI command I can use to retrieve this info?

Best Answer

Generally you can do it with --query filter.

If you need the private IP address only:

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

If you need the public ip address only:

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

Or you can have both:

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

Of course you can have the output in json format too. Just change --output text to --output json

More information about --query filters.