AWS Beanstalk

Why it's awesome

Why should we use it

How should we use it

dev firendly, Heroku-like wrapper for AWS

Comes with Autoscaling & Loadbalancing in house

Integrates nicely with docker and aws services

And has lots of features...

Configuration management,

CloudWatch monitoring,

SSL support,

Rolling updates,

State notifications,

Robust logging system,

Sticky sessions,

Healthchecks

and more...

Application

Environment_A

Environment_B

Version_1

Version_1:latest

Version_1

Version_1:latest

Code on the machine

*Application can have multiple environments

Versions are prebuilt docker images stored on ECR

Why we should us it?

It solves some of our problems

  • Auto scaling & load balancing 
  • Rolling updates & zero-downtime deployments
  • Works well with the rest of AWS
  • After handoff, simple to use for a client
  • One step closer to IAAC -> allows to use "more" AWS

Setting up & deployment

# Setup
eb init
eb create


# Deployment
eb deploy -r <AWS_REGION>

# Logs
eb logs 

# Logs realtime
eb logs --stream

# SSH to instance
eb ssh

# Rescale
eb scale

~ ➜ eb
usage: eb (sub-commands ...) [options ...] {arguments ...}

Welcome to the Elastic Beanstalk Command Line Interface (EB CLI).
For more information on a specific command, type "eb {cmd} --help".

commands:
  abort       Cancels an environment update or deployment.
  clone       Clones an environment.
  config      Edits the environment configuration settings or manages saved configurations.
  console     Opens the environment in the AWS Elastic Beanstalk Management Console.
  create      Creates a new environment.
  deploy      Deploys your source code to the environment.
  events      Gets recent events.
  health      Shows detailed environment health.
  init        Initializes your directory with the EB CLI. Creates the application.
  labs        Extra experimental commands.
  list        Lists all environments.
  local       Runs commands on your local machine.
  logs        Gets recent logs.
  open        Opens the application URL in a browser.
  platform    Manages platforms.
  printenv    Shows the environment variables.
  scale       Changes the number of running instances.
  setenv      Sets environment variables.
  ssh         Opens the SSH client to connect to an instance.
  status      Gets environment information and status.
  swap        Swaps two environment CNAMEs with each other.
  terminate   Terminates the environment.
  upgrade     Updates the environment to the most recent platform version.
  use         Sets default environment.

What about CI/CD?

What about CI/CD?

# Setup
terraform plan -out plan.tfplan
terraform apply

# Deploy
./deploy.sh <appname> <environment> <region> <commit_sha>

                ^           ^          ^           ^
           [Same as on Beanstalk] [us-east-1] [might be gibberish]

./deploy.sh

=

1. Login to Container Registry

2. Build Image

3. Add tags to it

4. Deploy to Container Registry

5. Create new Version on beanstalk

6. Create new beanstalk task (new version with new code)

*May be executed locally or on Circle

AWS Beanstalk

By Rafal Wiliński

AWS Beanstalk

  • 545