Timeout errors

EC2 network setup is the problem here.

When the client connects to the node via the public address to get the cluster topology. It will reply with the list of all the nodes in the cluster. If you added the node to the cluster using the local IP then the client will try and access the nodes using those IP addresses. Which will not work as they are in the private range.

The general advise is to use the FQDN when adding nodes to the cluster This means inside EC2 it will resolved to the local private IP address but outside of EC2 it will resolved to a public facing IP address.

The manual covers this in more detail:
http://docs.couchbase.com/couchbase-manual-2.2/#handling-changes-in-ip-addresses

This document explains how the clients get the cluster topology*
http://docs.couchbase.com/couchbase-devguide-2.2/#getting-cluster-topology

The other solution is to move the application inside EC2, from a security point of view this is much better than having a database face the wilds of the internet.

*With Couchbase Server 2.5.X and the newer clients (libcouchbase 2.3.1 and Java 1.4.0) this has changed.