| I've been using the Java version of Beanstalk to run a commercial API - http://www.degreedays.net/api/ - for about 12 months. So far it's been working out very well. I love how you can dip into the EC2 APIs if/when you need to, but it's not usually necessary as the basic setup is excellent (a load balancer in front of one or more EC2 instances - your choice of number, type, and auto-scaling rules). The tools for updating a Java app are great. Each deployed version of your app gets stored in the AWS system, and you can rollback to any version with a couple of clicks in the AWS control panel. It's also pretty easy to set up a staging environment to test new versions before deploying them to the live environment. Only issue I have with that is that there's no way to pause a staging environment (like you can pause an EC2 instance and not pay for it while it's paused). So you either have to keep a staging environment running all the time (paying for its EC2 instances), or set one up afresh each time you need it. The latter isn't a huge hassle, but it would be much better if you could just set one up and keep it paused for most of the time. I think development on Beanstalk is nicely approachable, and in my experience it's been pretty reliable as well, or at least as reliable as EC2. The current version of our app has been running well, with moderate load, for several months, without so much as a restart of an EC2 instance. On two occasions 6+ months ago one of the EC2 instances went a bit screwy, having problems connecting to external URLs, but in both cases we just terminated the problem instance and Beanstalk did the rest (provisioning a replacement and putting it behind the load balancer). We could probably avoid that sort of problem in future by improving our internal monitoring (in conjunction with the beanstalk health checks that ping a URL on each EC2 instance at frequent intervals to check for problems). |