AWS charges for Elastic IPs that are allocated but not associated with running instances. These charges can accumulate quickly across large infrastructures, making unused EIPs a common source of unnecessary costs. Here’s a short PostgreSQL query to get all unused EIPs across all your accounts from a CloudQuery AWS sync:
SELECT public_ip, instance_id
FROM aws_ec2_eips
WHERE instance_id IS NULL
AND public_ip NOT IN (
SELECT nat_address->>'PublicIp' AS public_ip
FROM (
SELECT jsonb_array_elements(nat_gateway_addresses) AS nat_address
FROM aws_ec2_nat_gateways
WHERE nat_gateway_addresses IS NOT NULL
) s
)