SmartaTech developed its own product, URLPoke, running in the AWS (Amazon) cloud. It ran on three-plus servers: web (rails), database (mysql) and worker-bee (groovy).
We have experience setting up this product using the AWS API in such a way that the number of workers scales up and down depending on the load experienced. The method used to deploy the system in the first version was a combination of the AWS API and bash scripts. It was quite a tricky thing to set up, but many lessons were learnt along the way. It was running successfully for several years in the cloud, with over a hundred users, before being discontinued.
We saw this as a good way to experiment and learn about how to manipulate applications in the Cloud, and it really only emphasizes how accessible this facility is for rolling your own deployments.
For version 2 of URLPoke we wanted to improve on the largely hand-crafted and bash-script driven approach to using the AWS Cloud.
Therefore we iimplemented automated deployment using Chef as the orchestration engine for deploying the application to base OSs rather than pre-crafted images.
The Chef approach (scripts based on the Ruby language), with its rich library of cookbooks (e.g. for installing Apache, MySql, RVM and so on) is a truly great thing.
Version 2 ran for two years, and using the Chef server allowed us to upgrade individual nodes (e.g. the MySql box is a node) with new versions of software when required. Being in the Cloud, we could specify that this is a staging version, fire up a few staging servers and test it in the Cloud before pushing live.