38
© 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2015, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Jeremy Cowan, Solutions Architect August 30 th , 2016 Continuous Delivery to Amazon EC2 Container Service

Continuous Delivery to Amazon ECS - AWS August Webinar Series

Embed Size (px)

Citation preview

Page 1: Continuous Delivery to Amazon ECS - AWS August Webinar Series

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

Jeremy Cowan, Solutions Architect

August 30th, 2016

Continuous Delivery to Amazon EC2 Container Service

Page 2: Continuous Delivery to Amazon ECS - AWS August Webinar Series

What is continuous delivery?

• Software development practice where code changes are automatically built, tested, and prepared for a release to production.

• Extends continuous integration by deploying all code changes to a testing environment and/or a production environment after the build stage.

• Developers approve the update to production when they are ready.• Different from continuous deployment, where the push to  production

happens automatically without explicit approval.• Continuous delivery lets developers automate testing beyond just

unit tests to verify application updates across multiple dimensions before deploying.

Page 3: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Why use containers?

• Process isolation• Portable• Fast• Efficient

Page 4: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Why use containers for continuous delivery?

• Roll out features as quickly as possible• Predictable and reproducible environment• Fast feedback

Page 5: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Development and deployment workflow

Code repository

Build environment

Test environment

Deployment environment

Source

Page 6: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Stage 1 - Source

Page 7: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Development environment

Code repository

Source

Page 8: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Docker and Docker Toolbox

• Docker (Linux > 3.10) • Docker Toolbox or Docker Beta (OS X, Windows)• Define app environment with Dockerfile

Page 9: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Dockerfile

FROM ruby:2.2.2RUN apt-get update -qq && apt-get install -y build-essential libpq-devRUN mkdir -p /opt/webWORKDIR /tmpADD Gemfile /tmp/ADD Gemfile.lock /tmp/RUN bundle installADD . /opt/webWORKDIR /opt/web

Page 10: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Docker Compose

Define and run multi-container applications:1. Define app environment with Dockerfile2. Define services that make up your app in docker-

compose.yml3. Run docker-compose up to start and run entire app

Page 11: Continuous Delivery to Amazon ECS - AWS August Webinar Series

docker-compose.yml

proxy: build: ./proxy ports: - "80:80" links: - webweb: build: ./web command: bundle exec rails server -b 0.0.0.0 environment: - SECRET_KEY_BASE=secretkey expose: - "3000"

Page 12: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Stage 2 - Build

Page 13: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Build environment

Build environment

Page 14: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Build environment

Containers can be used in two ways: • Execution environment for the build jobs • Output of the build process itself

Page 15: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Containers as build execution environment

Page 16: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Containers as build artifacts

Page 17: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Amazon EC2 Container Registry

• Security• IAM Resource-based Policies• CloudTrail Audit Logs• Images encrypted at transit and at rest

• Easily Manage & Deploy Images• Tight Integration with ECS• Integration with Docker Toolset• Management Console & AWS CLI

• Reliability & Performance• S3 Backed

Page 18: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Stage 3 - Test

Page 19: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Test environment

Test environment

Page 20: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Running test inside a container

Usual Docker commands available within your test environmentRun the container with the commands necessary to execute your tests, e.g.:docker run web bundle exec rake test

Page 21: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Running test against a container

Start a container running in detached mode with an exposed port serving your appRun browser tests or other black box tests against the container, e.g. headless browser tests

Page 22: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Stage 4 - Deploy

Page 23: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Deployment environment

Deployment environment

Page 24: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Amazon EC2 Container Service

• Highly scalable container management service• Easily manage clusters for any scale• Flexible container placement• Integrated with other AWS services• Extensible

• Amazon ECS concepts• Cluster and container instances• Task definition and task

Page 25: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Recent Enhancements to ECS

• Task Roles• Dynamic Port Mapping and path based routing• Auto-scaling policies for services• Network modes for Docker

Page 26: Continuous Delivery to Amazon ECS - AWS August Webinar Series

AWS Elastic Beanstalk

• Deploy and manage applications without worrying about the infrastructure

• AWS Elastic Beanstalk manages your database, Elastic Load Balancing (ELB), Amazon ECS cluster, monitoring and logging

• Docker support• Single container (on Amazon EC2)• Multi container (on Amazon ECS)

Page 27: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Amazon ECS CLI

• Easily create Amazon ECS clusters & supporting resources such as EC2 instances

• Run Docker Compose configuration files on Amazon ECS

• Available today – http://amzn.to/1jBf45a

Page 28: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Configuring the ECS CLI

# Configure the CLI using environment variables> export AWS_ACCESS_KEY_ID=<my_access_key>> export AWS_SECRET_ACCESS_KEY=<my_secret_key> > ecs-cli configure --region us-east-1 --access-key $AWS_ACCESS_KEY_ID --secret-key $AWS_SECRET_ACCESS_KEY --cluster ecs-cli-demo

# Configure the CLI using an existing AWS CLI profile> ecs-cli configure --region us-west-2 --profile ecs-profile --cluster ecs-cli-demo

Page 29: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Deploy and scale Compose app with ECS CLI

# Deploy a Compose app as a Task or as a Service> ecs-cli compose up> ecs-cli compose ps > ecs-cli compose service create> ecs-cli compose service start

# Scale a Compose app deployed as a Task or as a Service> ecs-cli compose scale n> ecs-cli compose service scale n

Page 30: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Continuous Delivery Workflows

Page 31: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Continuous delivery to ECS with Jenkins

4. Push image to Docker registry

2. Build image from sources 3. Run test on image

1. Code push triggers build

5. Update Service

6. Pull image

Page 32: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Continuous delivery to ECS with Jenkins

Easy DeploymentDevelopers – Merge into master, done!

Jenkins Build StepsTrigger via Webhooks, Monitoring, LambdaBuild Docker image via Build and Publish plugin Push Docker image into RegistryRegister Updated Job with ECS API

Page 33: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Continuous delivery to ECS with CodePipeline

1. Code push triggers pipeline

2. Lambda function creates EC2 instance

3. Image is built and pushed to ECR

4. Lambda function terminates EC2 instance

5. Lambda function deploy new task revision to ECS

Page 34: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Continuous delivery to ECS with CodePipeline

• Lambda custom actions• Create and terminate EC2 instance• Update ECS service

• EC2 instance uses user data to build an image and push it to Amazon ECR

Page 35: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Amazon ECS continuous delivery partners

Page 36: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Continuous delivery to ECS with Shippable

Page 37: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Demo

Page 38: Continuous Delivery to Amazon ECS - AWS August Webinar Series

Thank you!