Deploying systems using AWS DevOps tools

39
Deploying systems using AWS DevOps Matt Parr – Karl Schwirz – Michael Hodgdon

Transcript of Deploying systems using AWS DevOps tools

Page 1: Deploying systems using AWS DevOps tools

Deploying systems using AWS DevOpsMatt Parr – Karl Schwirz – Michael Hodgdon

Page 2: Deploying systems using AWS DevOps tools

Agenda

Introduction DevOps DevOps with AWS

Continuous Deployment

Release Management

Configuration Management

Infrastructure as Code

Q&A

Page 3: Deploying systems using AWS DevOps tools

3

We are a business and technology consulting firm with more than 3,500 consultants across 17 offices in North America and London.

Founded in 2000, headquartered in Seattle

Local consulting model, supported by national capabilities

Broad service offering spanning business optimization, technology enablement and operational effectiveness

Flexible partnering models and a collaborative, agile approach

Consulting Magazine’s Best Firm to Work For 2014 & Glassdoor Best Places to Work 2015

AWS Premier Partner; Global Delivery Success; 100+ AWS Certified Architects

DENVERSAN FRANCISCO

SOUTHERN CALIFORNIA

PHOENIX

DALLAS

HOUSTON

MINNEAPOLIS

PORTLAND

SEATTLE

ATLANTA

CHICAGO NEW YORK

HARTFORD

SILICON VALLEY

TORONTOBOSTON

LONDON

Slalom at a Glance

Page 4: Deploying systems using AWS DevOps tools

Footer 4

Slalom DevOps Blog - https://www.slalom.com/thinking/deploy-all-things-with-devops

AWS Services Code Deploy – https://aws.amazon.com/codedeploy/ Cloud Formation – https://aws.amazon.com/cloudformation/ Code Pipeline – https://aws.amazon.com/codepipeline/

Chef - https://docs.chef.io/ Continuous Delivery - Amazon Books

Reference Material

Page 5: Deploying systems using AWS DevOps tools

DevOps

Karl Schwirz – [email protected] - @DrKarl66

5

Page 6: Deploying systems using AWS DevOps tools
Page 7: Deploying systems using AWS DevOps tools

7

“Complexity and human-reliant approaches don’t scale; simplicity and algorithm-driven approaches do.” Philip Fisher-Ogden

Netf l ix

DevOps is changing software delivery

“We’re adopting a strategy of weekly release, desired zero downtime, and continuous build, where we deploy capabilities when capabilities are defined to be ready.”

Ken VennerSpaceX

“Asking "What would prevent the broadest class of future problems?" has led us pretty steadily towards improving Mean-Time-To-Repair, and focusing a lot less on Mean-Time-Between-Failures.” Dan Millstein

HubSpot

Page 8: Deploying systems using AWS DevOps tools

8

DevOps is about tools and a process

You want to break down the barriers that traditionally exist which separate the development and operations teams.

Code

Development Operations

“Breaking down silos and bringing people together is the MOST IMPORTANT part of DevOps.”

- GearStream Blog

Development Operations QA

Aligning your teams to work together to establish a process which enables them to drive toward the same goal

Page 9: Deploying systems using AWS DevOps tools

9

Code Repository

Automated Build

Continuous Delivery

Automated Testing

Build Versioning

Infrastructure as Code

Configuration Management Monitoring

Release Management

Page 10: Deploying systems using AWS DevOps tools

DevOps Tools Continuum

AWS CloudFormatio

nAWS CodeDeploy AWS OpsWorks Elastic

Beanstalk

Control Convenience

Page 11: Deploying systems using AWS DevOps tools

Tonight we will cover…

AWS CloudFormation

Templated driven Infrastructure

AWS CodeDeployAutomated

deployments to EC2

AWS CodePipelineAutomated code

delivery

ChefScripted Configuration

Page 12: Deploying systems using AWS DevOps tools

Continuous DeploymentAWS Code Deploy

Page 13: Deploying systems using AWS DevOps tools

Automation of the deployment process that delivers a changeset to a hosted environment

Continuous Deployment

Deployment

Source Control

Feature Build

Changeset

TriggerDev

Test

Production

Page 14: Deploying systems using AWS DevOps tools

Staging

Code DeployProduction

Dev

Application Deployment Groups Revisions

S3 EC2

Code Deploy

“AWS CodeDeploy is a service that automates code deployments to any instance, including Amazon EC2 instances and instances running on-premises.“ – Read More

Page 15: Deploying systems using AWS DevOps tools

15

Deployment AppSpec

Define what you want to be installed onto your instance as well as execute predefined lifecycle hooks

Page 16: Deploying systems using AWS DevOps tools

1) Package your application (with an AppSpec)

version: 0.0 os: linux files:

- source: chef/destination: /etc/chef/codedeploy

- source: target/hello.wardestination: /var/lib/tomcat6/webapps

hooks: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.shValidateService:

- location: deploy_hooks/verify_service.sh

Page 17: Deploying systems using AWS DevOps tools

1) Package your application (with an AppSpec)

Start

BeforeInstall

ApplicationStart

ApplicationStop

Install

ValidateService

DownloadBundle

AfterInstall

End

Page 18: Deploying systems using AWS DevOps tools

Release ManagementAWS Code Pipeline

Page 19: Deploying systems using AWS DevOps tools

Code Pipeline

“AWS CodePipeline is a continuous delivery service for fast and reliable application updates.” – Read More

Page 20: Deploying systems using AWS DevOps tools

Configuration ManagementChef

Matt Parr - [email protected]

Page 21: Deploying systems using AWS DevOps tools

The Non-Configuration

Management Checklist

Use long checklists for everything

Many people assembling small pieces of the puzzle

Inevitable confusion and frustration

Page 22: Deploying systems using AWS DevOps tools

What is Configuration Management?

Page 23: Deploying systems using AWS DevOps tools

Configuration Management

Configuration management (CM) : a systems engineering process for establishing and maintaining consistency of a product's performance, functional and physical attributes with its requirements, design and operational information throughout its life.

Page 24: Deploying systems using AWS DevOps tools

Case Study : Improvement Opportunities

Entirely manual

Multiple teams involved

Scattered and undocumented process

Poor knowledge transfer / knowledge gaps

Multiple bottlenecks and single points of failure

Inconsistent and not repeatable

Time consuming

Page 25: Deploying systems using AWS DevOps tools

Clearly Define Infrastructure

Organized environments, roles and dependencies

Repeatable & Reliable

Efficient & Flexible

Version Controlled

Case Study : Recommendations

Page 26: Deploying systems using AWS DevOps tools

A build should be a unit of code whose configuration is maintained

outside the codebase

Page 27: Deploying systems using AWS DevOps tools

Examples

Page 28: Deploying systems using AWS DevOps tools

Communities

What to look for when selecting a Configuration Management Framework

Well Documented Extensible

Page 29: Deploying systems using AWS DevOps tools

Well-established support community through Puppet Labs.

Mature interface that is intuitive and runs on nearly every OS.

Simple installation and setup.

Strong reporting capabilities.

Puppet

Ruby knowledge required for advanced tasks

Pure-ruby versions are being scaled back with more focus on Puppet’s customized DSL

Not focused on simplicity

Code base can grow large and unwieldy

Steep learning curve

Model-driven approach means less control compared to code-driven approaches.

Pros Cons

Page 30: Deploying systems using AWS DevOps tools

Rich collection of modules and configuration recipes.

Code-driven approach gives you more control and flexibility over your configurations.

Being centered around Git gives it strong version control capabilities.

Ease of install when it comes to it’s components.

Chef

Learning curve is steep if you’re not already familiar with Ruby and procedural coding.

It’s not a simple tool, which can lead to large code bases and complicated environments.

Doesn’t support push functionality.

Pros Cons

Page 31: Deploying systems using AWS DevOps tools

Infrastructure as CodeAWS Cloud Formation

Page 32: Deploying systems using AWS DevOps tools

Utilize code to manage configurations and automate provisioning of infrastructure in

addition to deployments

Page 33: Deploying systems using AWS DevOps tools

Infrastructure as Code – What to look for?

Flexible

Organized

Concise

Controlled

Multifaceted

Page 34: Deploying systems using AWS DevOps tools

Examples

Page 35: Deploying systems using AWS DevOps tools

CloudFormation

Collection of related AWS resources Visualize your infrastructure Predictable Orderly Efficient Customizable

Page 36: Deploying systems using AWS DevOps tools

CloudFormation

Version controlled infrastructure – your hardware is scripted! Nothing is forever! Ease of integration Increased organizational efficiency

Page 37: Deploying systems using AWS DevOps tools

37

Build and configure your application architecture using Chef Cookbooks Visualize using Stacks/Layers

Build from scratch or incorporate existing architectures OpsWorks Agent EC2 or On-Prem

AWS OpsWorks

Page 38: Deploying systems using AWS DevOps tools

Questions?

Page 39: Deploying systems using AWS DevOps tools

© 2015 Slalom, LLC. All rights reserved. The information herein is for informational purposes only and represents the current view of Slalom, LLC. as of the date of this presentation.SLALOM MAKES NO WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

slalom.com