58
Application Deployment on AWS [email protected] @IanMmmm Ian Massingham — Technical Evangelist

Application Deployment on AWS - Startup Talks June 2015

Embed Size (px)

Citation preview

Application Deployment on AWS

[email protected]@IanMmmm

Ian Massingham — Technical Evangelist

Before we start …

… I’d love your feedback @IanMmmm

What will we cover?

Options for Application Deployment on AWS

Resources you can use to learn more

Some Background123

Some Background

Startups on AWS

http://aws.amazon.com/solutions/case-studies/

Meerkat

400,000people are hosted on any given night

Up by Over 10 Million in One YearTotal Number of Guests

Sep 2008 Mar 2009 Sep 2013Sep 2009 Mar 2013Sep 2012Mar 2012Sep 2011Mar 2011Mar 2010 Sep 2010

June 2014 15 Million

3M

Mar 2014 Jun 2014

6M

9M

12M

15M

June 2015 25 Million

0

350

700

1,050

1,400

2010 2014

24 48

432

1,300

Total Number of EC2 instances

Why AWS?

EC2 Servers, Production Traffic,

Hive, Hadoop

RDSAll Relational Databases

S3Storage, User Generated

Content

DynamoDBRollups, Metadata

ElastiCacheMemcache

Route 53DNS, Inventory

We have a 5 person operations team.

AWS allows us to devote our resources and mindshare to the core business.

“”

Deployment Options

Deployment & ManagementContainers

Dev/ops Tools

Resource Templates

Usage Tracking

Monitoring and Logs

AWS Elastic Beanstalk AWS Elastic Beanstalk is an easy-to-use service for deploying and scaling web applications and services developed with Java, .NET, PHP, Node.js, Python, Ruby, Go, and Docker on familiar servers such as Apache, Nginx, Passenger, and IIS.

AWS CodeDeploy AWS CodeDeploy makes it easier for you to rapidly release new features, helps you avoid downtime during deployment, and handles the complexity of updating your applications.

AWS CloudFormation AWS CloudFormation gives developers and systems administrators an easy way to create and manage a collection of related AWS resources, provisioning and updating them in an orderly and predictable fashion.

AWS Elastic Beanstalk AWS Elastic Beanstalk is an easy-to-use service for deploying and scaling web applications and services developed with Java, .NET, PHP, Node.js, Python, Ruby, Go, and Docker on familiar servers such as Apache, Nginx, Passenger, and IIS.

AWS CodeDeploy AWS CodeDeploy makes it easier for you to rapidly release new features, helps you avoid downtime during deployment, and handles the complexity of updating your applications.

AWS CloudFormation AWS CloudFormation gives developers and systems administrators an easy way to create and manage a collection of related AWS resources, provisioning and updating them in an orderly and predictable fashion.

DEMO: AWS ELASTIC BEANSTALK

Elastic Beanstalk: Deploy Applications with 7 Popular Containers

Alert

Log

Mon

App

E

LB

AZ

http://your-app.elasticbeanstalk.com

Elastic Beanstalk Deploy your app to a load balanced, auto scaled Environment

Alert

Log

Mon

App

AZ

ELB

http://your-app.elasticbeanstalk.com

Elastic Beanstalk Deploy your app to a load balanced, auto scaled Environment

Alert

DB

Log

Mon

App

AZ

AZ

ELB

http://your-app.elasticbeanstalk.com

Elastic Beanstalk Deploy your app to a load balanced, auto scaled Environment

AWS Elastic Beanstalk AWS Elastic Beanstalk is an easy-to-use service for deploying and scaling web applications and services developed with Java, .NET, PHP, Node.js, Python, Ruby, Go, and Docker on familiar servers such as Apache, Nginx, Passenger, and IIS.

AWS CodeDeploy AWS CodeDeploy makes it easier for you to rapidly release new features, helps you avoid downtime during deployment, and handles the complexity of updating your applications.

AWS CloudFormation AWS CloudFormation gives developers and systems administrators an easy way to create and manage a collection of related AWS resources, provisioning and updating them in an orderly and predictable fashion.

AWS CodeDeploy

• Scale from 1 instance to thousands • Deploy without downtime • Centralize deployment control and monitoring • On-Premises support

StagingCodeDeployv1, v2, v3

Production

Dev

Coordinate automated deployments, just like Amazon

Application Revisions

Deployment Groups

DEMO: AWS CODEDEPLOY

1) Package your application (with an AppSpec)version: 0.0os: linuxfiles: - source: chef/ destination: /etc/chef/codedeploy - source: target/hello.war destination: /var/lib/tomcat6/webappshooks: ApplicationStop: - location: deploy_hooks/stop-tomcat.sh BeforeInstall: - location: deploy_hooks/install-chef.sh AfterInstall: - location: deploy_hooks/knife-install.sh ApplicationStart: - location: deploy_hooks/chef-solo.sh ValidateService: - location: deploy_hooks/verify_service.sh

1) Package your application (with an AppSpec)version: 0.0os: linuxfiles: - source: chef/ destination: /etc/chef/codedeploy - source: target/hello.war destination: /var/lib/tomcat6/webappshooks: ApplicationStop: - location: deploy_hooks/stop-tomcat.sh BeforeInstall: - location: deploy_hooks/install-chef.sh AfterInstall: - location: deploy_hooks/knife-install.sh ApplicationStart: - location: deploy_hooks/chef-solo.sh ValidateService: - location: deploy_hooks/verify_service.sh

1) Package your application (with an AppSpec)

Start

BeforeInstall

ApplicationStart

ApplicationStop

Install

ValidateService

DownloadBundle

AfterInstall

End

1) Package your application (with an AppSpec)version: 0.0os: linuxfiles: - source: chef/ destination: /etc/chef/codedeploy - source: target/hello.war destination: /var/lib/tomcat6/webappshooks: ApplicationStop: - location: deploy_hooks/stop-tomcat.sh BeforeInstall: - location: deploy_hooks/install-chef.sh AfterInstall: - location: deploy_hooks/knife-install.sh ApplicationStart: - location: deploy_hooks/chef-solo.sh ValidateService: - location: deploy_hooks/verify_service.sh

2) Set up your target environments

Agent Agent Agent

Staging

Agent Agent

Agent Agent

Agent

Agent

Production

Deployment GroupDeployment Group

• Group instances by: • Auto Scaling group • EC2 tag • On-premises tag

3) Deploy!

aws deploy create-deployment \

--application-name MyApp \

--deployment-group-name TargetGroup \

--s3-location bucket=MyBucket,key=MyApp.zip

AWS CLI & SDKs AWS Console CI / CD Partners GitHub

Deployment Config – Choose speed

v2 v1 v1 v1 v1 v1 v1 v1

v2 v2 v2 v2 v1 v1 v1 v1

v2 v2 v2 v2 v2 v2 v2 v2

One-at-a-Time

Half-at-a-Time

All-at-Once

Rolling Update – Deploy without downtime

v1v1 v1

Load Balancer

Rolling Update – Deploy without downtime

v1v2 v1

Load Balancer

Rolling Update – Deploy without downtime

v2v2 v1

Load Balancer

Rolling Update – Deploy without downtime

v2v2 v2

Load Balancer

Rolling Update – Deploy without downtime

v2v2 v2

Load Balancer

Health Tracking – Catch deployment problems

v3 v2 v2Stop

Load Balancer

Health Tracking – Catch deployment problems

v2v2 v2

Load Balancer

Rollback

Health Tracking – Catch deployment problems

v2v2 v2

Load Balancer

AWS CodePipeline

• Inspired by Pipelines • Flexible workflow engine • Extensible, plugin based architecture

Continuous delivery and release automation, just like Amazon

Build1) Build 2) Unit test

1) Deploy 2) UI test

Source Beta Production1) Deploy 2) Load test

Gamma1) Deploy region1 2) Deploy region2 3) Deploy region3

AWS CodeCommit

• Data redundancy across AZs • Data at rest encryption • Integrated with AWS Identity and Access Management • No repo size limit

git  push CodeCommit

Git objects in S3

Git index in DynamoDB

Encryption key in KMS

SSH or HTTPS

Secure, scalable, and managed Git source control

AWS Elastic Beanstalk AWS Elastic Beanstalk is an easy-to-use service for deploying and scaling web applications and services developed with Java, .NET, PHP, Node.js, Python, Ruby, Go, and Docker on familiar servers such as Apache, Nginx, Passenger, and IIS.

AWS CodeDeploy AWS CodeDeploy makes it easier for you to rapidly release new features, helps you avoid downtime during deployment, and handles the complexity of updating your applications.

AWS CloudFormation AWS CloudFormation gives developers and systems administrators an easy way to create and manage a collection of related AWS resources, provisioning and updating them in an orderly and predictable fashion.

AWS CloudFormation

An easy way to create & manage a collection of AWS resources Allows orderly and predictable provisioning and updating of resources

Allows you to version control your AWS infrastructure Deploy and update stacks using console, command line or API

You only pay for the resources you create

https://youtu.be/6R44BADNJA8

Building With Smaller Blocks

Quicker to build Lower costEasier to adapt and update

</> </></>

Containers, the Cloud & Application Architecture

Applicationportability

Environmentfidelity

Continuousdeployment

High availability& scale

The Four Horsemen of Container-Based Applications

Applicationcomponents

Resourcedescription

Capacitypool

Placement& management

1 2 3 4

Launch and terminate Docker containers

Across a cluster of EC2 instances

Mount persistent volumes at launch

Private Docker repositories

Amazon EC2 Container Service

EC2 Container Service Is Now Generally Available

Available to all customers

New

Managementconsole

New

Geographic expansion

US East, US West, EU West and Japan

New

CloudTrailintegration

New

aws.amazon.com/ecs

λAWS Lambda

An event-driven computing service for dynamic applications

A Focus on Functions, Data and Events

AutomaticCloud FunctionsEvents from AWS services

RESOURCES YOU CAN USETO LEARN MORE

aws.amazon.com/elasticbeanstalk

aws.amazon.com/codedeploy

aws.amazon.com/cloudformation

aws.amazon.com/ecs

Follow us fo

r more

events

& webina

rs

@AWScloud for Global AWS News & Announcements

@AWS_UKI for local AWS events & news

@IanMmmmIan Massingham — Technical Evangelist