We are considering using Amazon's ELB for load-balancing requests to internal API servers. If we use it, do we have to route our traffic through the public IP addresses, and thus lose the speed and cost benefits of sending traffic only to the private IP addresses? (The API servers and API consumers are both EC2-hosted, so we would prefer to use the private IPs.)
Connection between Amazon ELB and its pool of backend instances is done via Amazon's AWS private network but a connection from any host (EC2 instance or not) to an ELB public DNS is routed to a public IP (I've just verified that).
The good news are that a tracepath from an EC2 instance to an ELB based service takes less than 1 milisecond to reach its destination, even when routed through Amazon's public IPs .
Anyway, this is just a quick and dirty test, so do not take this for granted. I would perform some serious network benchmarks to be sure of the real behaviour in this situation.