106
Continuous Deployment Pierre Gilot Solutions Architect, Amazon Web Services

AWS Summit Milan - Continuous Deployment

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: AWS Summit Milan - Continuous Deployment

Continuous Deployment

Pierre Gilot

Solutions Architect, Amazon Web Services

Page 2: AWS Summit Milan - Continuous Deployment

CONTINUOUS

INTEGRATION

Page 3: AWS Summit Milan - Continuous Deployment

DEVELOPER

Page 4: AWS Summit Milan - Continuous Deployment

SOURCE CODE

REPOSITORY

Page 5: AWS Summit Milan - Continuous Deployment

SOURCE CODE

REPOSITORY

PROJECT MANAGEMENT

SERVER

Page 6: AWS Summit Milan - Continuous Deployment

SOURCE CODE

REPOSITORY

PROJECT MANAGEMENT

SERVER

CONTINUOUS

INTEGRATION SERVER

Page 7: AWS Summit Milan - Continuous Deployment

SOURCE CODE

REPOSITORY

PROJECT MANAGEMENT

SERVER

CONTINUOUS

INTEGRATION SERVER

PICK

TASKS

Page 8: AWS Summit Milan - Continuous Deployment

SOURCE CODE

REPOSITORY

PROJECT MANAGEMENT

SERVER

CONTINUOUS

INTEGRATION SERVER

SUBMIT

CODE

Page 9: AWS Summit Milan - Continuous Deployment

SOURCE CODE

REPOSITORY

PROJECT MANAGEMENT

SERVER

CONTINUOUS

INTEGRATION SERVER

SCHEDULE

BUILD

Page 10: AWS Summit Milan - Continuous Deployment

SOURCE CODE

REPOSITORY

PROJECT MANAGEMENT

SERVER

CONTINUOUS

INTEGRATION SERVER

RECURRENT

BUILDS

Page 11: AWS Summit Milan - Continuous Deployment

SOURCE CODE

REPOSITORY

PROJECT MANAGEMENT

SERVER

CONTINUOUS

INTEGRATION SERVER

CODE

FETCH

Page 12: AWS Summit Milan - Continuous Deployment

SOURCE CODE

REPOSITORY

PROJECT MANAGEMENT

SERVER

CONTINUOUS

INTEGRATION SERVER

CODE QUALITY

TESTS

TEST

RESULTS

Page 13: AWS Summit Milan - Continuous Deployment

SOURCE CODE

REPOSITORY

PROJECT MANAGEMENT

SERVER

CONTINUOUS

INTEGRATION SERVER

BUILD OUTPUT

Page 14: AWS Summit Milan - Continuous Deployment

SOURCE CODE

REPOSITORY

PROJECT MANAGEMENT

SERVER

CONTINUOUS

INTEGRATION SERVER

DOCS

BINARIES

& PACKAGES

Page 15: AWS Summit Milan - Continuous Deployment
Page 16: AWS Summit Milan - Continuous Deployment

SOURCE CODE

REPOSITORY

DNS

CONTINUOUS

INTEGRATION SERVER

PROJECT

MANAGEMENT SERVER

BUILDS

Page 17: AWS Summit Milan - Continuous Deployment

PAIN POINTS • UNIT TESTS INCOMPLETE

• MOCK TESTS MAINTENANCE

• EXPENSIVE TEST ENVIRONMENT

• TEST ENVIRONMENT ≠ PRODUCTION

• DEPLOYMENT CYCLES

Page 18: AWS Summit Milan - Continuous Deployment

ON-DEMAND

PAY AS YOU GO

ELASTIC

Page 19: AWS Summit Milan - Continuous Deployment

=

PROGRAMMABLE

PLATFORM

Page 20: AWS Summit Milan - Continuous Deployment
Page 21: AWS Summit Milan - Continuous Deployment
Page 22: AWS Summit Milan - Continuous Deployment
Page 23: AWS Summit Milan - Continuous Deployment

IF YOU CAN PROGRAM IT

YOU CAN AUTOMATE IT

Page 24: AWS Summit Milan - Continuous Deployment
Page 25: AWS Summit Milan - Continuous Deployment
Page 26: AWS Summit Milan - Continuous Deployment
Page 27: AWS Summit Milan - Continuous Deployment
Page 28: AWS Summit Milan - Continuous Deployment

HTTP://SORCERY.SMUGMUG.COM/

Page 29: AWS Summit Milan - Continuous Deployment

AWS

CLOUDFORMATION STACK-BASED DEPLOYMENT

SERVICE

Page 30: AWS Summit Milan - Continuous Deployment

CLOUDFORMATION

TEMPLATE

Page 31: AWS Summit Milan - Continuous Deployment
Page 32: AWS Summit Milan - Continuous Deployment

{ "Description" : "Create RDS with username and password", "Resources" : { "MyDB" : { "Type" : "AWS::RDS::DBInstance", "Properties" : { "AllocatedStorage" : "500", "DBInstanceClass" : "db.m1.small", "Engine" : "MySQL", "EngineVersion" : "5.5", "MasterUsername" : "MyName", "MasterUserPassword" : "MyPassword" } } } }

Page 33: AWS Summit Milan - Continuous Deployment

"AWS::CloudFormation::Init" : { "config" : { "packages" : { "yum" : { "mysql" : [], "mysql-server" : [], "httpd" : [], "php" : [], "php-mysql" : [] } }, "sources" : { "/var/www/html" : "https://s3.amazonaws.com/my-builds/build-v4.zip" } }

Page 34: AWS Summit Milan - Continuous Deployment

{ "Parameters" : { "KeyName" : { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instance", "Type" : "String" } }, }

Page 35: AWS Summit Milan - Continuous Deployment

CLOUDFORMATION

TEMPLATE

PROCEDURAL

DEFINITION Create it programmatically

KNOWN

CONFIGURATION Store stack configuration in

source control

PARAMETER

DRIVEN Dynamic and user-driven

templates

COLLABORATION Share templates with ease

as just files

Page 36: AWS Summit Milan - Continuous Deployment
Page 37: AWS Summit Milan - Continuous Deployment

APPLICATION

VERSIONS

+ INFRASTRUCTURE

VERSIONS

Page 38: AWS Summit Milan - Continuous Deployment

CLOUDFORMATION

TEMPLATE

Page 39: AWS Summit Milan - Continuous Deployment

TEST ENVIRONMENTS

Page 40: AWS Summit Milan - Continuous Deployment

30,000 REQUESTS / SECOND

1 TB TRAFFIC / DAY

Page 41: AWS Summit Milan - Continuous Deployment

“…AWS seemed to be the best solution available to allow a small, independent company to rapidly develop and test a completely new infrastructure, and host it. We also loved the flexibility that AWS allowed us, when spinning up smaller test environments, for beta trials, QA, localization, and during development. The low initial cost was also crucial.” Alex Evans, CTO

Page 42: AWS Summit Milan - Continuous Deployment

LOAD TESTING

Page 43: AWS Summit Milan - Continuous Deployment
Page 44: AWS Summit Milan - Continuous Deployment
Page 45: AWS Summit Milan - Continuous Deployment
Page 46: AWS Summit Milan - Continuous Deployment
Page 47: AWS Summit Milan - Continuous Deployment
Page 48: AWS Summit Milan - Continuous Deployment

USING AMAZON EC2 TO SIMULATE

2.4 MILLION PLAYERS

Page 49: AWS Summit Milan - Continuous Deployment

CONTINUOUS

DEPLOYMENT SMALL, FREQUENT CHANGES

CONSTANTLY INTEGRATING INTO

PRODUCTION

Page 50: AWS Summit Milan - Continuous Deployment
Page 51: AWS Summit Milan - Continuous Deployment

KEY = ITERATION

Page 52: AWS Summit Milan - Continuous Deployment

ITERATION

= MODIFY THE SYSTEM TO BETTER

MEET THE EXPECTATIONS OF

YOUR USERS

Page 53: AWS Summit Milan - Continuous Deployment

11.6s

Mean time

between

deployments

(weekday)

1,079

Max number of

deployments in a

single hour

10,000

Mean number of

hosts

simultaneously

receiving a

deployment

30,000

Max number of

hosts

simultaneously

receiving a

deployment

DEPLOYMENTS AT

AMAZON.COM

Page 54: AWS Summit Milan - Continuous Deployment

SOFTWARE DEPLOY

≠ PRODUCT LAUNCH

Page 55: AWS Summit Milan - Continuous Deployment
Page 56: AWS Summit Milan - Continuous Deployment

1.5 BILLION PAGE VIEWS

OCTOBER 2012

$83 MILLION IN TRANSACTIONS

4.2 MILLION ITEMS SOLD

Page 57: AWS Summit Milan - Continuous Deployment

30 DEPLOYS PER DAY 1 DEPLOY EVERY 20 MINUTES

Page 58: AWS Summit Milan - Continuous Deployment

"Production is truly the only place you

can validate your code."

Page 59: AWS Summit Milan - Continuous Deployment
Page 60: AWS Summit Milan - Continuous Deployment
Page 61: AWS Summit Milan - Continuous Deployment
Page 62: AWS Summit Milan - Continuous Deployment
Page 63: AWS Summit Milan - Continuous Deployment

A / B TESTING

Page 64: AWS Summit Milan - Continuous Deployment
Page 65: AWS Summit Milan - Continuous Deployment

14 BILLION REQUESTS/MONTH

50 000 DATABASE UPDATES / SEC

NO CACHE

Page 66: AWS Summit Milan - Continuous Deployment
Page 67: AWS Summit Milan - Continuous Deployment
Page 68: AWS Summit Milan - Continuous Deployment
Page 69: AWS Summit Milan - Continuous Deployment
Page 70: AWS Summit Milan - Continuous Deployment

DATA-DRIVEN

ARCHITECTURES

Page 71: AWS Summit Milan - Continuous Deployment

METRICS @ETSY

Page 72: AWS Summit Milan - Continuous Deployment

COST-ORIENTED

ARCHITECTURES

Page 73: AWS Summit Milan - Continuous Deployment

PHP+APACHE+VARNISH

NGINX+NODEJS

Page 74: AWS Summit Milan - Continuous Deployment
Page 75: AWS Summit Milan - Continuous Deployment

# USERS

$ COST

APPLICATION

COST

APPLICATION

GENERATED

REVENUE

Page 76: AWS Summit Milan - Continuous Deployment

CONTINUOUS

INTEGRATION

CONTINUOUS

DEPLOYMENT

Page 77: AWS Summit Milan - Continuous Deployment

CONTINUOUS

DEPLOYMENT

=

CONTINUOUS

EXPERIMENTATION

Page 78: AWS Summit Milan - Continuous Deployment

CONTINUOUS

DEPLOYMENT

=

CONTINUOUS

IMPROVEMENT

Page 79: AWS Summit Milan - Continuous Deployment

INNOVATE

Page 80: AWS Summit Milan - Continuous Deployment

« Want to increase innovation?

Lower the cost of failure »

Joi Ito

Page 81: AWS Summit Milan - Continuous Deployment

SPEED AND AGILITY

Experiment

Often

Fail quickly at

a low cost

More

Innovation

Experiment

Infrequently

Failure is

expensive

Less

Innovation

“ON-PREMISE”

Page 82: AWS Summit Milan - Continuous Deployment

Continuous Deployment

at

Marco Pracucci

Page 83: AWS Summit Milan - Continuous Deployment

Platform for Creating

and Sharing Audio

8 people (4 developers)

2M unique listeners / month

3.5M audio tracks created

500 reqs / sec

Page 84: AWS Summit Milan - Continuous Deployment

we run 80% of our

traffic on AWS

about 60 EC2 instances and 50 TB on S3

Page 85: AWS Summit Milan - Continuous Deployment

we deploy frequently

[even on friday]

51 deploys in the last 30 days

Page 86: AWS Summit Milan - Continuous Deployment

how we deploy

the web app

Page 87: AWS Summit Milan - Continuous Deployment

Deploy Task

Page 88: AWS Summit Milan - Continuous Deployment

fab www.deploy

code repository

EC2 instances

1. ssh

Page 89: AWS Summit Milan - Continuous Deployment

fab www.deploy

code repository

EC2 instances

2. checkout

Page 90: AWS Summit Milan - Continuous Deployment

fab www.deploy

code repository

EC2 instances

3. warmup

Checklist

- local cache warmup

- db schema migrations

- check consistency

Page 91: AWS Summit Milan - Continuous Deployment

fab www.deploy

code repository

EC2 instances

4. switch code

everything ok?

Page 92: AWS Summit Milan - Continuous Deployment

fab www.deploy

code repository

EC2 instances

4. switch code

Checklist

- iptables –dport 80 –j DROP

- ln –sfn /var/www/new /var/www/curr

- clear bytecode cache

- iptables –dport 80 –j ACCEPT

Page 93: AWS Summit Milan - Continuous Deployment

fab www.deploy

generate report

notify team on IRC

Page 94: AWS Summit Milan - Continuous Deployment

which instances to deploy?

we do auto-scaling, they change dinamically

Page 95: AWS Summit Milan - Continuous Deployment

we exploited

DNS

Page 96: AWS Summit Milan - Continuous Deployment

api1

api2

api3

www1

www2 www3

worker1

worker2

Split infrastructure into roles

role: api role: web role: worker-web

{ { {

EC2 instances

Page 97: AWS Summit Milan - Continuous Deployment

Tag each instance with roles

[space separated roles for multi-role instances]

Page 98: AWS Summit Milan - Continuous Deployment

Map names and roles to DNS

https://github.com/airbnb/zonify

Creates Route 53 DNS entries

for all instances and roles

Page 99: AWS Summit Milan - Continuous Deployment

Address a single instance

Page 100: AWS Summit Milan - Continuous Deployment

Address instances by role

Page 101: AWS Summit Milan - Continuous Deployment

Easy to integrate with Fabric

Page 102: AWS Summit Milan - Continuous Deployment

Do you remember the starting point?

Internally does

fab –R web www.deploy

Page 103: AWS Summit Milan - Continuous Deployment

few good reasons

Easy, Fast, Robust

Page 104: AWS Summit Milan - Continuous Deployment

few good reasons

Easy, Fast, Robust

Warning: an attacker can easier get your instances IPs

(use an unguessable DNS zone name)

Page 105: AWS Summit Milan - Continuous Deployment

Thank you

www.spreaker.com/marco

@pracucci

Page 106: AWS Summit Milan - Continuous Deployment

Thank You

Pierre Gilot

Solutions Architect, Amazon Web Services