Check if elastic IP is associated
The sub command doesn't show whether it has Elastic IPs or not. Another sub command shows InstanceId and PublicIp. We can join them with command...
The sub command ec2 describe-instances doesn’t show whether it has Elastic IPs or not.
Another sub command ec2 describe-addresses shows InstanceId and PublicIp.
We can join them with join command representing Name.
$ aws ec2 describe-instances \
| jq -r '.Reservations[].Instances[]|[
.InstanceId,
(select(.Tags!=null).Tags[]|select(.Key=="Name").Value)
]|@tsv' | sort | tee ec2.tsv
i-00d7xxxxxxxxxxxxx app-01
i-01bdxxxxxxxxxxxxx db-03
i-04a7xxxxxxxxxxxxx app-02
i-0636xxxxxxxxxxxxx db-01
i-0808xxxxxxxxxxxxx db-02
$ aws ec2 describe-addresses \
| jq -r '.[][]|[.InstanceId, .PublicIp]|@tsv' \
| sort | tee ip.tsv
i-01bdxxxxxxxxxxxxx 1x.1x3.xxx.xxx
i-0636xxxxxxxxxxxxx 5x.1x8.xxx.xxx
i-0808xxxxxxxxxxxxx 5x.1x7.xxx.xxx
$ join -a1 ec2.tsv ip.tsv
i-00d7xxxxxxxxxxxxx app-01
i-01bdxxxxxxxxxxxxx db-03 1x.1x3.xxx.xxx
i-04a7xxxxxxxxxxxxx app-02
i-0636xxxxxxxxxxxxx db-01 5x.1x8.xxx.xxx
i-0808xxxxxxxxxxxxx db-02 5x.1x7.xxx.xxx
One-liner works.
join -a1 <(aws ec2 describe-instances \
| jq -r '.Reservations[].Instances[]|
[
.InstanceId,
(select(.Tags!=null).Tags[]|select(.Key=="Name").Value)
]
|@tsv' | sort) \
<(aws ec2 describe-addresses \
| jq -r '.[][]|[.InstanceId, .PublicIp]|@tsv' | sort)