I'm trying to get my head around a simple WebApp Java deployment case on Amazon Web Services.

I have manually deployed on a single EC2 instance, manually installing Java, Tomcat, MySql on a vanilla RedHat image -- as if I owned the hardware. 

Now I'm trying to set up an auto scalable, easy-to-manage, production proof environment: 

* 1 -> n Tomcat instances with a standard Java WebApp deployed,
* 1 MYSQL database with 1 schema and a few tables (not much), the webapp connects to it.

I understand that autoscaling depends on some trigger (e.g. more than % of usage). However, when the new server is started, my app is not deployed because it's not in the VM image. Something needs to happen so that the new servers run my code.

1. What is the best option to mass deploy to 1-n autoscaling group of tomcat only servers on amazon?
2. What is the best option to upgrade your app ? I guess you don't want all the servers to go down in one go...
3. How about creating a VM image that automatically retrieves the latest build available from my CI (uploaded to a S3 or something else)? I could easily add this script to Tomcat bootstrap / linux startup...

How about commercial tools like Chef or Puppet? Any open-source equivalent?