I want to list the public IP addresses of my EC2 instances using Bash, separated by a delimiter (space or a new-line).
I tried to pipe the output to jq with aws ec2 describe-instances | jq
, but can't seem to isolate just the IP addresses.
Can this be done by aws
alone, specifying arguments to jq
, or something else entirely?
By default, all AWS accounts are limited to five (5) Elastic IP addresses per Region, because public (IPv4) internet addresses are a scarce public resource.
The most common reason for no public IP address for your EC2 instance is that you are launching your EC2 instance using a private subnet. A private subnet means any EC2 instances located in that subnet aren't directly addressable from the public web.
Directly from the aws cli:
aws ec2 describe-instances \ --query "Reservations[*].Instances[*].PublicIpAddress" \ --output=text
aws ec2 describe-instances \ --filter "Name=instance-state-name,Values=running" \ --query "Reservations[*].Instances[*].[PublicIpAddress, Tags[?Key=='Name'].Value|[0]]" \ --output text
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With