(MODAClouds) AWS Elastic Beanstalk

Important

This document is part of the MODAClouds deliverable D6.1, thus superseded by it.

Important

This document was created in March 2013, thus its contents might be currently outdated.

Overview

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]

application
An umbrella concept for all the entities that belong to the same logical "application".
version
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]
environment
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]
resources
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).

Characteristics

type application deployment and execution
suitability emerging
application domain web applications
application architecture 2-tier applications
application restrictions none
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
disponibility hosted
portability out-of-the-box
services none (manual provisioning of any AWS service)
monitoring none (delegated to AWS CloudWatch)
providers AWS EC2
multi-tenancy single application
resource sharing 1:1

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.

ModaClouds integration

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.

References

[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