No, you don't need an Elastic IP address for all your instances. By default every instance is assigned a private IP and a IP for accessing the internet. The private IP address remains associated with the network interface when the instance is stopped and restarted, and is released when the instance is terminated. The public address is associated exclusively with the instance until it is stopped, terminated or replaced with an Elastic IP address. These IP addresses should be adequate for many applications where you do not need a long lived internet routing end point. Example of places where you need elastic IP are Compute clusters, web crawling, and backend services.