I have used AWS on 2 projects now.
On the first project, we used 2 small instances as web servers, 1 small instance as a database master, and another as a slave. The slave machine handled backup of db and uploaded files by zipping everything up and throwing it onto s3. There was no EBS or RDS at this time. The main problem we had was sharing user uploaded files between instances. We used Gluster (http://www.gluster.org/) for this, but it was complicated and gave us problems. In general this setup worked fine and we could add webserver instances to handle traffic spikes. Even this limited setup took a bit of effort to maintain and I often wondered if we could have just handled the whole thing with one large or extra large instance. Does anyone know if there is some bottleneck that comes from vertically scaling like this?
Sadly, on the second project we haven't really needed to scale at all, so we just use one small instance for everything and have our mysql files and user uploaded files in an EBS volume. I haven't really figured out backup and restore from snapshots yet, so I just zip up the contents of the EBS and transfer it to S3. We are using cloudfront to serve static files and it seems to work fine.