I've been looking forward to being able to tell you about this new part of AWS for quite a while. Perhaps I'm biased, but I do think that this is a pretty big deal! I think we've managed to balance power and ease of use in a nice tidy package that will make AWS even more approachable for developers wishing to build powerful and highly scalable web applications.
AWS Elastic Beanstalk will make it even easier for you to create, deploy, and operate web applications at any scale. You simply upload your code and we'll take care of the rest. We'll create and configure all of the AWS resources (Amazon EC2 instances, an Elastic Load Balancer, and an Auto Scaling Group) needed to run your application. Your application will be up and running on AWS within minutes.
Much like the beanstalk in the popular fairy tale, Elastic Beanstalk allows you to start at ground level and climb toward the sky. However, as you will soon see, the beanstalk is built using a number of existing AWS services, not from magic beans.
When you use Elastic Beanstalk, you get to focus on the more creative and enjoyable aspects of application design and development while we take care of your software stack and your infrastructure. We do this in a very flexible way so that you still have complete control of what goes on. You can still access the underlying AWS resources if you'd like.
It has been years (1.5 decades to tell the truth) since I have done any serious Java development (Java Beans and the Java Native Interface, anyone?). Despite this, I was able to get the Elastic Beanstalk sample application up and running in less than five minutes. The application was effectively in production and ready to scale to meet the challenges of a world-wide load. Not too much later I was able to successfully compile and deploy some code of my very own.
If you are familiar with the market segment that is often called PaaS (short for Platform as a Service) you might be thinking "Ok, so what? Other environments have been able to do this for some time now. What's so special about this?" Well, lots of things. Here's a quick summary:
- Elastic Beanstalk is built on top of the proven AWS infrastructure. It takes full advantage of Amazon EC2, Elastic Load Balancing, Amazon CloudWatch, Auto Scaling, and other AWS services. You get all of the economy and scalability of AWS in a form that's easier and quicker to deploy than ever before.
- With Elastic Beanstalk you can choose to gradually assert control over a number of aspects of your application. You can start by tuning a number of parameters (see my post on the Elastic Beanstalk Console for more information about this). You can choose the EC2 instance type that provides the optimal amount of RAM and CPU power for your application. You can log in to the EC2 instances to troubleshoot application issues, and you can even take the default Elastic Beanstalk AMI (Amazon Machine Image), customize it, and then configure Amazon Beanstalk to use it for your application. This gradual assertion of control extends all the way to "eleven" -- you can choose to move your application off of Elastic Beanstalk and manage the raw components yourself if you so choose.
- Elastic Beanstalk was designed to support multiple languages and application environments. We are already working with solution providers to make this happen.
- Each of your Elastic Beanstalk applications will be run on one or more EC2 instances that are provisioned just for your application. Applications running on Elastic Beanstalk have the same degree of security as those running on an EC2 instance that you launch yourself.
- You can build an application that makes use of Elastic Beanstalk along with other services that you deploy on EC2 without having to worry about network latency across a wide-area network. You can launch the services in the same Region as your Elastic Beanstalk application. The ability to efficiently access existing services running on EC2 instances gives you additional flexibility and even more architectural and implementation options.
You can choose to remain blissfully unaware of the infrastructure that hosts your application and I fully expect that many of our customers will choose to do so. I also expect some of our customers to delve beneath the surface. Some will dip their toes in, others will take a deep dive. Either one is fine, and both are fully supported. When and if you choose to do this, you won't be entering some mysterious zone stuffed with undocumented code. Instead, you'll find that the Elastic Beanstalk AMI is based on the Amazon Linux AMI running the Apache Web Server, Tomcat, and the Enterprise Edition of the Java platform, all running on top of publicly documented AWS services.
The public beta release of AWS Elastic Beanstalk allows you to write Java code, compile it, package it up into a WAR (web archive) file, and upload it to a Tomcat environment. You can do the upload using a new tab on the AWS Management Console; read my AWS Elastic Beanstalk From The AWS Management Console post to learn more.
You can use the Elastic Beanstalk APIs and the Elastic Beanstalk command-line tools to connect your existing development tools and processes to Elastic Beanstalk. We've already used these APIs to extend the AWS Toolkit for Eclipse to allow developers to work with Elastic Beanstalk without needing to leave their IDE. See my post on AWS Elastic Beanstalk Eclipse Integration for additional information.
I hope that this post has given you enough information to give you an appreciation for AWS Elastic Beanstalk. If you are hungry for more, I've prepared a set of detailed posts with even more information for you. Each post is linked to the next one, so start with the Elastic Beanstalk Concepts and click your way through.
- Elastic Beanstalk Concepts.
- Elastic Beanstalk Under the Hood.
- Elastic Beanstalk Programming Model.
- Elastic Beanstalk from the AWS Management Console.
- Elastic Beanstalk and Eclipse.
- Elastic Beanstalk APIs and Command Line Tools.
This is an exciting step forward and we have a lot more in the works. Keep reading this blog and you'll be the first to know about each new development.
You may also want to attend the Introduction to AWS Elastic Beanstalk webinar at 11:00 AM (PST) on January 24th.
Keep Reading: Elastic Beanstalk Concepts or Werner Vogels' post: AWS Elastic Beanstalk: A Quick and Simple Way into the Cloud.
-- Jeff;
PS - I almost forgot! You can build and run Elastic Beanstalk applications at no charge beyond those for the AWS resources that you consume. If you are eligible for the AWS Free Usage Tier, you can run a small web application 24x7 without incurring any AWS usage fees. See the full details of this offer here.




This is awesome. Heroku for java, but without paying 2x or more for the instances :)
Posted by: Jannick | January 19, 2011 at 06:06 AM
We're looking forward ...
Posted by: Juan David | January 19, 2011 at 07:00 AM
Impressive! I knew AWS would have some type of PaaS Available sooner than later. Now to expand it across stacks instead of just Java. I hear that the PHP & Ruby on Rails Stacks are real popular! The .NET Stack has a large body of Enterprise Devs too! :) More plz! Thx.
Posted by: Adron | January 19, 2011 at 07:29 AM
Great to see this kind of things. Thanks for improve the service every day.
Posted by: Bgiorgini | January 19, 2011 at 08:01 AM
Wow! Great. Thanks for sharing this. thumbs up. :)
Posted by: meizitang online | January 19, 2011 at 08:06 AM
Sounds great. Hopefully it will support .Net soon.
One question, when you say "You simply upload your code and we'll take care of the rest. We'll create and configure all of the AWS resources (Amazon EC2 instances, an Elastic Load Balancer, and an Auto Scaling Group) needed to run your application." - is this done manually by yourselves or is it all automated?
Posted by: Niall | January 19, 2011 at 08:29 AM
" you can even take the default Elastic Beanstalk AMI (Amazon Machine Image), customize it, and then configure Amazon Beanstalk to use it for your application"
Any documentation on this? I've been unable to locate the means to do this in the management console.
Posted by: Thingfish | January 19, 2011 at 08:48 AM
Very cool. How about a Python platform/stack? What would be needed to make that work? :)
Posted by: limist | January 19, 2011 at 08:51 AM
Niall, there are two possible answers. The first is that Amazon has hired thousands of people to watch every running application and, armed with calculators at their side they are continually checking your app's performance and when it falls above or below a certain threshold they manually shut down or launch instances of your app, hoping that they don't make a mistake and shut down too many or misconfigure something that totally breaks your app.
The second approach would be to have a few really smart developers automate the whole thing so that it works flawlessly without requiring human intervention.
Which do you think is more likely?
Posted by: Nick | January 19, 2011 at 08:54 AM
> Any documentation on this? I've been unable to locate the means to do this in the management console.
You can use the Server tab in the Environment Settings to enter the ID of your own AMI.
Posted by: Jeff Barr | January 19, 2011 at 08:55 AM
Will it be possible to host ASP.NET applications in the future using Elastic Beanstalk?
Posted by: Kulin Parikh | January 19, 2011 at 09:24 AM
IaaS eats PaaS Lunch, and long live both. :-)
We blogged several months ago that "major vendors will offer a layered stack: a lower IaaS layer directly exposed through Web Service APIs, and a PaaS layer running on top of the IaaS layer".
You can see the original post here:
http://www.porticor.com/2010/11/iaas-eats-paas-lunch-and-long-live-both/
Posted by: Gilad | January 19, 2011 at 10:23 AM
This is awesome news and couldn't have come at a better time for us. We are right at the point of Google App Engine or AWS+EC2+LAMP stack + management (RightScale). So excited by this! :D
Posted by: Shanestevens_ | January 19, 2011 at 01:00 PM
Jeff can you confirm that it is possible to pass JVMTI agents (-javaagent:...) in the command line as well as alter (add to) the classpath (or server/lib) to install proper application performance management solutions. I assume customers will want to be able to have some degree of observability that already exists in their own data centers.
Posted by: William Louth | January 19, 2011 at 04:13 PM
William, you should be able to do what you want using the Container options tab. Here’s some documentation:
http://docs.amazonwebservices.com/elasticbeanstalk/latest/ug/index.html?using-features.managing.container.html
I believe that you can provide the necessary info in the “Tomcat JVM container options” field.
Posted by: Jeff Barr | January 19, 2011 at 05:56 PM
I've put together a quick how-to for running PHP on AWS Elastic Beanstalk. It uses Quercus, a Java implementation of PHP.
It's surprisingly simple...
http://bit.ly/ezzoWE
Enjoy!
Cameron
Posted by: @clstokes | January 19, 2011 at 08:17 PM
Now please PHP Support. We've been looking for a "dynamic phpS3 running on nginx" for ages :-) this would remove sooooo much headaches! :-)
Posted by: Josh | January 21, 2011 at 04:44 PM
What version of Tomcat 6 is used in AWS Beanstalk? Is there a possibility to add jar-files to tomcat lib-directory, edit conf/server.xml and add database connection pooling capabilities to Tomcat in AWS Beanstalk?
Posted by: Tom | January 26, 2011 at 06:59 AM
Tom, the current Amazon Linux AMI uses version 6.0.29 of Tomcat. You can add new files and edit configuration files by logging in to an EC2 instance running the AMI and then saving the AMI. You would then configure your app (using the AWS Management Console) to use your AMI instead of the stock one.
Posted by: Jeff Barr | January 26, 2011 at 08:46 AM
Jeff, thank you for your reply. I've tried out EB together with EC2. I've created my EB environment, used SSH to access the console of the current instance and making necessary (minor) adjustments to Tomcats configuration which are needed for my application. I then save an AMI of the current instance as I would like to launch new EB environments with this AMI. If I try to change a EB environment configuration by pointing to my custom AMI in the Custom AMI field, the environment will fail and eventually terminate (event log states a couple of "Failed to retrieve status of instance" and then "Terminated instance"). Should it be possible to use custom AMI's with AWS EB?
Posted by: Tom | January 28, 2011 at 02:39 AM
TOM - We'd be happy to help but you need to leave some contact information. Post your problem to the Elastic Beanstalk forum at https://forums.aws.amazon.com/forum.jspa?forumID=86 or leave another comment with a legitimate email address.
Posted by: Jeff Barr | January 28, 2011 at 06:29 AM
Tom I was able to get it working (installing system libs including native ones) by creating my own AMI from the version that is used by EB and then in the creation of a new environment specifying this AMI which I tested before on its own performing setting up with EB.
I do hope the EB team makes it much easier to customize an standard EB environment without having to go through such steps as most people will need to install system level libs (including native libs) for webapps other then Pet[Clinic/Store]. At least for quick and dirty setups though most might eventually go with AMI's which will never be possible with any of the other PaaS like offerings.
Posted by: William Louth | February 04, 2011 at 10:52 AM