DevOps Tools Review – AWS Elastic Beanstalk

Blog home

Service Description

Amazon Web Services (AWS) comprises over one hundred services, each of which exposes an area of functionality. While the variety of services offers flexibility for how you want to manage your AWS infrastructure, it can be challenging to figure out which services to use and how to provision them.

With Elastic Beanstalk, you can quickly deploy and manage applications in the AWS Cloud without having to learn about the infrastructure that runs those applications. Elastic Beanstalk reduces management complexity without restricting choice or control. You simply upload your application, and Elastic Beanstalk automatically handles the details of capacity provisioning, load balancing, scaling, and application health monitoring.

Elastic Beanstalk supports applications developed in Go, Java, .NET, Node.js, PHP, Python, and Ruby. When you deploy your application, Elastic Beanstalk builds the selected supported platform version and provisions one or more AWS resources, such as Amazon EC2 instances, to run your application.

You can interact with Elastic Beanstalk by using the Elastic Beanstalk console, the AWS Command Line Interface (AWS CLI), or eb, a high-level CLI designed specifically for Elastic Beanstalk. (More information in the open source GitHub repository)

To learn more about how to deploy a sample web application using Elastic Beanstalk, see Getting Started with AWS: Deploying a Web App.

You can also perform most deployment tasks, such as changing the size of your fleet of Amazon EC2 instances or monitoring your application, directly from the Elastic Beanstalk web interface (console).

To use Elastic Beanstalk, you create an application, upload an application version in the form of an application source bundle (for example, a Java .war file) to Elastic Beanstalk, and then provide some information about the application. Elastic Beanstalk automatically launches an environment and creates and configures the AWS resources needed to run your code. After your environment is launched, you can then manage your environment and deploy new application versions. The following diagram illustrates the workflow of Elastic Beanstalk.

After you create and deploy your application, information about the application—including metrics, events, and environment status—is available through the Elastic Beanstalk console, APIs, or Command Line Interfaces, including the unified AWS CLI.

Example Use Case Scenarios

Scenario 1 : Customer wants a web application without having to worry about the underlying infrastructure

Elastic Beanstalk can be deployed quickly for a customer and provides a lot of functionality that would otherwise take a longer time to set up and maintain. An elastic beanstalk stack provides the customer with a deployment process and stack that includes a lot of AWS features in one package.

  • Blue / green deployment
  • Load balancer
  • Health checks / Monitoring
  • Auto scaling / auto healing instances
  • Integration with deployment tools such as Git and Visual Studio
  • Managed updates
  • Security Groups
  • Networking / VPC Configuration
  • Log Rotation
  • X-Ray

If the customer just needs a stable application deployed and doesn’t need any more complexity, then Elastic Beanstalk can be a good candidate to get a lot of the best practices covered in an efficient manner. 

Scenario 2 : The customer would like to manage some of the infrastructure themselves but doesn’t want to have to learn the full AWS suite.

If the customer would like to handle some of the updates themselves such as the ASG size, or handle when a deployment is done and when the switchover to the new version is done, then Elastic Beanstalk can enable them to do this without having to have access and training on all of the other AWS systems.

The Elastic Beanstalk interface can be used to deploy and to make changes in one place that would traditionally be in multiple places. For example, the customer could deploy a new version of their code and update the instance size and ASG min/max from the one screen. 

Caveats

  • As the resources are still created as normal resources, it can mean there are 2 places to update, and if any changes are made to the resources outside of Elastic Beanstalk, any subsequent deployment or change in the Elastic Beanstalk stack will override these changes.
  • Elastic Beanstalk stacks can’t be easily copied from one to create another. There is a workaround by using the Elastic Beanstalk CLI to download both stack details, saving the configuration in one, then manually copying it over
  • The Elastic Beanstalk CLI is a separate tool from the AWS CLI

Limitations

As Elastic Beanstalk is trying to be a simpler way of handing applications, there are some drawbacks if you need more complexity.

  • Changes are designed to be straightforward, but this can sometimes mean that not all of the information about issues is presented in Elastic Beanstalk
  • Limited set of deployment software targets
  • More complex applications that require more than just a load balancer and ec2 instances behind it aren’t really suitable for Elastic Beanstalk. Any workload with background Worker processes are a good example of this that would be better separated out.
  • Issues with deployments / scaling issues can be more complicated to resolve due to more limited information provided

To find out more about the wide range of uses of Elastic Beanstalk and more customer case studies, AWS have recorded a presentation showcasing Elastic Beanstalk during their Re:Invent conference. The video of this talk is below: