(MODAClouds) AWS Elastic Beanstalk
This document is part of the MODAClouds deliverable D6.1, thus superseded by it.
This document was created in March 2013, thus its contents might be currently outdated.
In order to ease the deployment of applications over its IaaS solution, Amazon provides a simple wrapper service, namely AWS Elastic Beanstalk, which given a deployable software artifact --- either in compiled form, or source code, depending on the target platform --- automates the following aspects of the application's life-cycle: [Beanstalk-1]
- provisioning the required VM's from EC2, with the right image needed for the targeted run-time;
- configuring both the VM related aspects, like security groups, but also the complementary required services, like AWS Elastic Load Balancer, or AWS CloudWatch;
- deploying the software artifact inside the run-time environment;
- managing complementary services like the Elastic Load Balancer solution;
The following are the core concepts that Elastic Beanstalk operates with: [Beanstalk-2] [Beanstalk-3]
- An umbrella concept for all the entities that belong to the same logical "application".
- A deployable software artifact, suitable for deployment. Each application can have at any time multiple versions, each prepared for immediate execution, thus enabling the operator to rollback to previous versions if a particular deployment manifests issues. [Beanstalk-4]
- The run-time instance of a particular version, again there can be multiple concurrent environments, possibly of the same version. The environment also specifies the characteristics of the VM to be deployed on. [Beanstalk-4]
- Any external database, middleware, etc., that the application needs, and which is completely out of the control of the platform. (Although the various web-based wizards, do allow the operator to create an Elastic Load Balancer or an RDS instance).
|type||application deployment and execution|
|application domain||web applications|
|application architecture||2-tier applications|
|programming languages||Java, PHP, Python, Ruby, .Net [Beanstalk-1]|
|programming frameworks||a selected set, specific to each supported language [Beanstalk-1]|
|scalability||none (delegated to AWS Auto Scaling)|
|session affinity||none (delegated to AWS Elastic Load Balancer)|
|interaction||WUI, CLI, WS, API|
|services||none (manual provisioning of any AWS service)|
|monitoring||none (delegated to AWS CloudWatch)|
Notes and limitations
Right from the start, the AWS Elastic Beanstalk documentation, [Beanstalk-1], clearly states that this is a solution meant for getting developers or operators to quickly adopt cloud-based deployments. Furthermore it states that once the user has a deeper understanding of the principles governing AWS, it should migrate towards using AWS CloudFormation.
However for the simple case of 1-tier web-applications, or 2-tier ones, where the second tier is the database, it proves a perfect match by providing a simple API to manage the application's life cycle.
From a technical perspective it can be seen as a parallel to Windows Azure's cloud services solution, in that although it exposes a PaaS-like functionality, each component is deployed on an individual VM, granting the code full access to the underlying OS --- most of which are unique to Elastic Beanstalk --- such as:
- each application version, can have dependencies on native packages; [Beanstalk-5]
- moreover the user can choose a customized VM image for each environment; [Beanstalk-5]
- the operator is granted full SSH access on the underlaying VM;
- there is the option to attach AWS EBS volumes or take snapshots;
On the downside it doesn't automatically handle any other services or resources, like AWS S3, DynamoDB, etc., but are left to the user to provision and properly configure; this being one of the reasons why AWS CloudFormation is a better choice in this respect.
As stated AWS Elastic Beanstalk could be used in order to deploy simple web applications on-top of AWS EC2, without handling ourselves the VM provisioning and container deployment.
Although, in terms in functionality, it doesn't offer more than a hosted PaaS, like Heroku, or a deployable one, like CloudFoundry, it does prove useful in the case where the application requires more resources than the PaaS offers; for example in case of demanding Java-based web applications, which require VM's from the top of the EC2 offering. Moreover it provides an API as simple as the other PaaS's for managing the application instance.
|[Beanstalk-1]||(1, 2, 3, 4) AWS Elastic Beanstalk -- Developer Guide -- What Is AWS Elastic Beanstalk and Why Do I Need It?|
|[Beanstalk-2]||AWS Elastic Beanstalk -- Developer Guide -- How Does AWS Elastic Beanstalk Work?|
|[Beanstalk-3]||AWS Elastic Beanstalk -- Developer Guide -- Components|
|[Beanstalk-4]||(1, 2) AWS Elastic Beanstalk -- Developer Guide -- Managing and Configuring Applications and Environments Using the Console, CLI, and APIs|
|[Beanstalk-5]||(1, 2) AWS Elastic Beanstalk -- Developer Guide -- Customizing and Configuring AWS Elastic Beanstalk Environments|