Get Unused Elastic IPs

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
  )