How should I use EC2 ? One instance per application or one for all my architecture

Solution 1:

Assuming you're not concerned with high availability, If one instance can handle the load, then put them all on one instance. That said, I would put some monitoring around those particular services so that you know when its time for them to have their own host(s). You might find that different services are going to need to scale out at different rates. The only good way to keep an eye on that is with good monitoring and instrumentation.

You can save yourself a lot of headache later by introducing some abstraction between services. For example, make sure that when one service is calling the API, it calls it by some name (DNS is great for this). Something like api.myapp.com will be fine. Maybe initially, all the names point to the same host. But in the future, when you need to scale, you can point that name to an Elastic Load Balancer with a bunch of instances behind it, and nothing in your application needs to change to talk to the new instances.

If you are concerned with high availability, you need more than one box. full stop.