running microservices and docker on aws elastic beanstalk - august 2016 monthly webinar series

53
© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Brandon Chavis | Solutions Architect 08/25/2016 AWS Elastic Beanstalk (EB) Deploying Containers on EB

Upload: amazon-web-services

Post on 17-Jan-2017

1.499 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved.

Brandon Chavis | Solutions Architect

08/25/2016

AWS Elastic Beanstalk (EB)Deploying Containers on EB

Page 2: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Agenda

Elastic Beanstalk vs DIY

How to use Elastic Beanstalk

Multi-Container Docker with AWS Elastic Beanstalk

Recently added features

Page 3: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Developer Challenges

Complexity of deploying code, provisioning and managing infrastructure

Expertise and time needed to manage and configure servers, databases, load balancers, firewalls, and networks

How to automate application scaling

Page 4: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

What is Elastic Beanstalk?

AWS Elastic Beanstalk is an easy-to-use service for deploying and scaling web applications and services.

Page 5: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

AWS Elastic Beanstalk vs. Do It Yourself

Your code

HTTP Server

Application Server

Language Interpreter

Operating System

Host

Elastic Beanstalk configures each EC2 instance in your

environment with the components necessary to run applications for the selected

platform.

Focus on building your application

Provided by you

Provided and managed by AWS Elastic Beanstalk (EB)

On-instance configuration

Page 6: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

AWS Elastic Beanstalk vs. Do It Yourself

Preconfigured Infrastructure Single Instance (Dev, Low Cost) Load Balanced, Auto Scaling (Production)

Web & Worker tiers Elastic Beanstalk provisions necessary

infrastructure resources such as the load balancer, auto scaling group, security groups, database (optional), etc.

Provides a unique domain name for your application(e.g.: youapp.regionx.elasticbeanstalk.com)

Infrastructure stack

Page 7: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Common Use Cases

Websites

API backends

Mobile backends

Asynchronous workers

Page 8: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Customers

Page 9: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Elastic Beanstalk Benefits

Fast & simple to begin

Developer productivity

Impossible to outgrow

Complete resource control

No additional charge to use. You only pay for underlying AWS resources (i.e.: EC2 instances, S3, etc.)

Page 10: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

How do I get startedwith Elastic Beanstalk

Page 11: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

01

02

03

04

Region

Stack (container) type

Single Instance Load Balanced with auto-scaling

OR

Database (RDS) Optional

Your code Supported Platforms

Information required to deploy application

Page 12: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Building applications with Elastic Beanstalk

Application: api

Environmentprod-api V1

Environmentdev-api V1.1

EnvironmentbrowserClient V2

EnvironmentbrowserClient V2.1

Environmentdev-api V1.2

EnvironmentbrowserClient V3

Application: browser

Page 13: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

How to deploy applications

1. Via AWS Management Console

2. Via AWS Toolkit for Eclipse and Visual Studio IDE

3. Via AWS SDK’s and CLI

4. Via EB command line interface$ eb deploy

Page 14: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Deploy Sample Application (EB CLI)Initial application deployment workflow

$ git clone https://github.com/awslabs/eb-node-express-sample.git

Download sample application02

$ eb initCreate your Elastic Beanstalk app0

3

Follow the prompts to configure the environment

04

05 Create the resources and launch the

application$ eb create

$ pip install --upgrade awsebcli

Install the AWS Elastic Beanstalk command line interface (EB CLI)

01

Page 15: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Update Sample Application (EB CLI)Update application workflow

Update your code01

$ git add .$ git commit –m “v2.0”$ eb deploy

Add & commit code to repository02

Open application once deployment completes.

03

$ eb open

Page 16: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Docker with AWS Elastic Beanstalk

Page 17: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Benefits of using Multi-Container Docker with Elastic Beanstalk

Automation of capacity provisioning, load balancing, scaling, and application health monitoring

One stop management of your application in an environment that supports range of services that are integrated with Elastic Beanstalk, including but not limited to VPC, RDS, and IAM. 

Page 18: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

I’ve built my containers, how do I…?

Store my container images? Configure containers for Beanstalk? Test my config? Deploy to Beanstalk? Update my application?

Page 19: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Store your container images: Amazon ECR

Beanstalk can interact with any Docker Repository Options include Dockerhub, Amazon ECR, and private

repos Amazon ECR allows access control via IAM for fine-

grained permissions Elastic Beanstalk can automatically authenticate with

ECR

Page 20: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Amazon ECR Registry Usage

Page 21: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Dockerrun.aws.json: Introduction

Specifies the version number as the value "2" for multicontainer Docker environments

AWSEBDockerrunVersion01

An array of container definitionsContainerDefinitions03

Mount points in the container instance that a container can use

Volumes02

"volumes": [ { "name": "volumename", "host": { "sourcePath": "/path/on/host/instance" } } ],

Format:

Page 22: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Dockerrun.aws.json: A snippet "AWSEBDockerrunVersion": 2, "volumes": [ { "name": "php-app", "host": { "sourcePath": "/var/app/current/php-app" } }, { "name": "nginx-proxy-conf", "host": { "sourcePath": "/var/app/current/proxy/conf.d" } } ], "containerDefinitions": [ { "name": "php-app", "image": "php:fpm", "environment": [ { "name": "Container", "value": "PHP" } ], "essential": true, "memory": 128, "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true } ] },

{ "name": "nginx-proxy", "image": "nginx", "essential": true, "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80 } ], "links": [ "php-app" ], "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true }, { "sourceVolume": "nginx-proxy-conf", "containerPath": "/etc/nginx/conf.d", "readOnly": true }, { "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" } ] } ] }

Multi Container requires version 2

VolumeContainer Definition

The container definition and volumes sections of Dockerrun.aws.json use the same formatting as the corresponding sections of an Amazon ECS task definition file.

Page 23: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Test your Beanstalk application locally

Use EB “eb local run” command to run and test dockerrun.aws.json application locally

Page 24: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Choose the right Beanstalk container platform

Single Container Docker

Multi-Container Docker

Page 25: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Multi Container: Architecture

Each environment has its own ECS Cluster Supports a single ECS Task definition per environment The ECS Task is defined in the Dockerrun.aws.json file Uses a flood scheduling mechanism Provides out of the box auto scaling for ECS Tasks

Elastic Beanstalk Environment

Auto Scaling Group / ECS Cluster

Instance 1 Instance 2

app1.elasticbeanstalk.com

Elastic Load Balancing

Container 2Container 1

Container 3

Container 2Container 1

Container 3

Page 26: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Multi Container with Elastic Beanstalk

Nginx Proxy ExampleCode at: https://github.com/awslabs/eb-docker-nginx-proxy

Page 27: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Update your application: Application Deployment

Page 28: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Update your application: Deployment Policies All at once: Deploy new version to all instances

simultaneously

Rolling: Deploy new version in batches

Rolling with additional batch: Deploy in batches, +1 extra batch

Immutable: Deploy to fresh group of instances

Page 29: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

All At Once Deployments

Page 30: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 0: All At Once

Auto Scaling Group

Elastic Beanstalk Environment

v1 v1

myapp.elasticbeanstalk.com

v1v1

Page 31: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 1: All At Once

Auto Scaling Group

Elastic Beanstalk Environment

v2 v2

myapp.elasticbeanstalk.com

v2v2

Page 32: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Rolling with Additional Batch

Page 33: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 0: Rolling with Additional Batch

Auto Scaling Group

Elastic Beanstalk Environment

v1 v1

myapp.elasticbeanstalk.com

v1v1

Page 34: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 1: Rolling with Additional Batch

Auto Scaling Group

Elastic Beanstalk Environment

v2 v2 v1 v1

myapp.elasticbeanstalk.com

v1v1

Page 35: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 2: Rolling with Additional Batch

Auto Scaling Group

Elastic Beanstalk Environment

v2 v2 v1 v1

myapp.elasticbeanstalk.com

v1v1

Page 36: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 3: Rolling with Additional Batch

Auto Scaling Group

Elastic Beanstalk Environment

v2 v2 v1 v1

myapp.elasticbeanstalk.com

v1v1

Page 37: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 4: Rolling with Additional Batch

Auto Scaling Group

Elastic Beanstalk Environment

v2 v2 v2 v2

myapp.elasticbeanstalk.com

v1v1

Page 38: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 5: Rolling with Additional Batch

Auto Scaling Group

Elastic Beanstalk Environment

v2 v2 v2 v2

myapp.elasticbeanstalk.com

v1v1

Page 39: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 6: Rolling with Additional Batch

Auto Scaling Group

Elastic Beanstalk Environment

v2 v2 v2 v2

myapp.elasticbeanstalk.com

v1v1

Page 40: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 7: Rolling with Additional Batch

Auto Scaling Group

Elastic Beanstalk Environment

v2 v2

myapp.elasticbeanstalk.com

v2v2

Page 41: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Update your application: Blue/Green

Page 42: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Update your application: Blue/Green Pros:

Fast rollback because the previous environment is still running

Cons: Slower deployment (5 minutes) due to new environment spin-up Potential of DNS caching by mobile clients after CNAME swap

Page 43: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 0: Blue/Green

Auto Scaling Group

Elastic Beanstalk Environment

v1 v1

myapp.elasticbeanstalk.com

v1v1

Page 44: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 1: Blue/Green

Auto Scaling Group

Elastic Beanstalk Environment

v1 v1

myapp.elasticbeanstalk.com

v1v1

Auto Scaling Group

v2

Page 45: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 2: Blue/Green

Auto Scaling Group

Elastic Beanstalk Environment

v1 v1

myapp.elasticbeanstalk.com

v1v1

Auto Scaling Group

v2

Page 46: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 3: Blue/Green

Auto Scaling Group

Elastic Beanstalk Environment

v1 v1

myapp.elasticbeanstalk.com

v1v1

Auto Scaling Group

v2 v2 v2v2

Page 47: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 4: Blue/Green

Auto Scaling Group

Elastic Beanstalk Environment

v1 v1

myapp.elasticbeanstalk.com

v1v1

Auto Scaling Group

v2 v2 v2v2

Page 48: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 5: Blue/Green

Auto Scaling Group

Elastic Beanstalk Environment

v1 v1

myapp.elasticbeanstalk.com

v1v1

Auto Scaling Group

v2 v2 v2v2

Page 49: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Step 6: Blue/Green

Auto Scaling Group

Elastic Beanstalk Environment

v2 v2

myapp.elasticbeanstalk.com

v2v2

Page 50: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Demo!

Page 51: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

New Features

Page 53: Running Microservices and Docker on AWS Elastic Beanstalk - August 2016 Monthly Webinar Series

Questions?

How to get in touch with the EB team?

Forum:https://forums.aws.amazon.com/forum.jspa?forumID=86

Twitter@aws_eb