Here's how I do it:<p><pre><code> $ pip install dotcloud
$ echo 'frontend: {"type": "nodejs"}' >> dotcloud.yml
$ echo 'db: {"type": "mongodb"}' >> dotcloud.yml
$ dotcloud push $MYAPP
$ dotloud scale $MYAPP frontend=3 db=3
</code></pre>
This will deploy my nodejs app across 3 AZs and setup load-balancing to them, deploy a Mongo replicaset across 3 AZs, setup authentication, and inject connection strings into the app's environment. It's also way cheaper than AWS.<p>The only difference with OP's setup is that the Mongo ports are publicly accessible. This means authentication is the only thing standing between you and an attacker (and maybe the need to find your particular tcp port among a couple million others in dotCloud's pool).<p>(disclaimer, I work at dotCloud)