













 https://www.slalom.com/thinking/deploy-all-things-with-devops

 https://aws.amazon.com/codedeploy/
 https://aws.amazon.com/cloudformation/
 https://aws.amazon.com/codepipeline/
 https://docs.chef.io/
 Amazon Books
Reference Material
karl.schwirz@slalom.com
Philip Fisher-Ogden
Netflix
DevOps is changing software delivery
Ken Venner
SpaceX
Dan Millstein
HubSpot
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.
“Breaking down silos and bringing people together is
the MOST IMPORTANT part of DevOps.”
- GearStream Blog
Aligning your teams to work together to establish a
process which enables them to drive toward the
same goal
9
Code
Repository
Automated
Build
Continuous
Delivery
Automated
Testing
Build
Versioning
Infrastructure
as Code
Configuration
Management Monitoring
Release
Management
DevOps Tools Continuum
AWS
CloudFormation
AWS CodeDeploy AWS OpsWorks Elastic Beanstalk
Control Convenience
Tonight we will cover…
Templated driven
Infrastructure
Automated
deployments to EC2
Automated code
delivery
Scripted Configuration

Continuous Deployment
Deployment
Staging
Code Deploy
Production
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
Deployment AppSpec
1) Package your application (with an AppSpec)
version: 0.0
os: linux
files:
- source: chef/
destination: /etc/chef/codedeploy
- source: target/hello.war
destination: /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.sh
ValidateService:
- location: deploy_hooks/verify_service.sh
1) Package your application (with an AppSpec)
Start
BeforeInstall
ApplicationStart
ApplicationStop
Install
ValidateService
DownloadBundle
AfterInstall
End
AWS Code Pipeline
Code Pipeline
continuous delivery
Read More
What is Configuration Management?
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.
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
Clearly Define Infrastructure
Organized environments, roles and dependencies
Efficient & Flexible
Version Controlled
Case Study : Recommendations
Communities
What to look for when selecting a Configuration
Management Framework
 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.
 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.
Utilize code to manage configurations and
automate provisioning of infrastructure in
addition to deployments
Infrastructure as Code – What to look for?
CloudFormation
 Collection of related AWS resources
 Visualize your infrastructure
 Predictable
 Orderly
 Efficient
 Customizable
CloudFormation
 Version controlled infrastructure – your hardware is scripted!
 Nothing is forever!
 Ease of integration
 Increased organizational efficiency





AWS OpsWorks
Deploying systems using AWS DevOps tools
Deploying systems using AWS DevOps tools

Deploying systems using AWS DevOps tools

Editor's Notes

  • #6 So we’re here to talk about DevOps tonight? To talk about tools on the AWS stack that help our teams when implementing DevOps solutions. Quick show of hands; who’s been to a DevOps talk before?
  • #7 Everyone is talking about DevOps… Including us. And it’s great. The more people in the conversation the better.
  • #8 It’s not just small boutiques, either. Netflix – forward thinkers in the space. Hubspot – Local to Boston. (Now nation wide LA – BOS) SpaceX – Big Enterprise taking on DevOps Facebook Spotify Etsy Disney Chaos Monkey – The name comes from the idea of releasing a wild monkey with a weapon on your production data center and letting it cause havoc on random infrastructure and using this as an opportunity to learn the weaknesses of the system and continuously improve your ability to absorb and recover from failures (cattle vs. pets)
  • #9 Before I go down the technical road of cool tools, we should remember. A clearly defined DevOps process is just as important as picking the right tool for the job. Agile project management is a major tenant of DevOps. Getting an agile team together to agree and subscribe to a process will create an environment of collaboration and by default promote a feedback loop that will allow you to refine the process.
  • #10 Source Control – GIT / TFS / Sub Version Build Runners – Jenkins, TeamCity, TFS Automated Testing – nUnit, Selenium, Build Versioning – S3, nuget IaC – CloudFormation, Azure, VMWare Configuration Management – Chef, Puppet Continuous Delivery – CodeDeploy, Octopus, Azure Monitoring – CloudWatch, New Relic
  • #11 When you’re looking at tools, think about how much control you want think about how much control you have over your services. Something like Cloud formation gives you granular control over the particulars of your systems And on the other end, something like elastic beanstalk is more convenient, but you’re relying on AWS to provision and configure your system.
  • #12 Icons across the top with descriptions of services
  • #14 Continuous integration – merging code early and often Continuous delivery – the process which code goes from Dev to Prod
  • #15 Fully managed Assumes you already have setup EC2 servers or on prem Repeated deployments to existing application fleet Configure Deployment Groups Versioned Deployments Automate scripts to execute during each deployment Can be used with existing physical servers
  • #17 Hooks - These steps are AWS defined
  • #18 These steps are AWS defined
  • #20 You might hear the term Continuous Delivery applied here
  • #22 In a world without Config Management, amongst other difficulties…. First and foremost you’re following long procedural checklists More people = more potential for a breakdown in the pipeline Confusion and frustration
  • #26 The ability to clearly define your infrastructure to fit it's landscape. “a build should be a unit of code with configuration outside of it.” Environments, roles, dependencies, etc Eliminate manual changes, inconsistent state of resources, and human error. Your infrastructure is version controlled - interacts with Git, etc Your configurations should endure the same rigorous testing and QA as your code. Organized view of infrastructure past, present, and future. Your configurations should endure the same testing and QA as your code.
  • #29 There are many great options out there. Choose the best one that fits your needs. Talk about tools – ansible, salt, chef, puppet, fabric Tools – chef, puppet, ansible, salt, fabric. – each using different methods Loads of online documentation, examples, etc. – you’re not alone. There are "hooks", plugins, and native solutions available – go into windows specific tools, aws-s3, etc. When you really get down to it – while they may all take different paths, they arrive at the same goal. You are managing your infrastructure and systems Talk about plugins and addons – specific example is chef windows cookbook Loads of easy to find information and documentation for most tools – chefdocs/puppetdocs examples Talk about user community and contributors You are not alone – chances are you aren’t the first to have issues, obstacles, and ideas – seek and you shall find
  • #30 Puppet is a good choice if stability and maturity are key factors for you. It’s good for large enterprises with a heterogeneous environment and range of skills on the DevOps team. Puppet is one of the long standing tools in the full-fledged configuration management space. It’s an open source tool, but given how long it’s been around, it has been well vetted and deployed in some of the biggest and most demanding environments. Puppet is based in Ruby, but uses a customized Domain Scripting Language (DSL) closer to JSON for working within it. It runs as a master-client setup and uses a model-driven approach. The Puppet code design works as a list of dependencies, which can make things easier or more confusing, depending on your setup.
  • #31 Puppet is a good choice if stability and maturity are key factors for you. It’s good for large enterprises with a heterogeneous environment and range of skills on the DevOps team. Puppet is one of the long standing tools in the full-fledged configuration management space. It’s an open source tool, but given how long it’s been around, it has been well vetted and deployed in some of the biggest and most demanding environments. Puppet is based in Ruby, but uses a customized Domain Scripting Language (DSL) closer to JSON for working within it. It runs as a master-client setup and uses a model-driven approach. The Puppet code design works as a list of dependencies, which can make things easier or more confusing, depending on your setup.
  • #34 Reduced learning curve with descriptive languages such as those used by Chef, Puppet, and Ansible. Flexibility allows for use with other languages (python, ruby, etc) as well as the ability to leverage vendor APIs. IaC is an organized and concise representation of your infrastructure's configuration. Code should follow the same rigorous testing procedures and QA as your other code IaC can be used to achieve full orchestration of the entire deployment process as well as the automation of all necessary tasks in that cycle.
  • #36 CloudFormation is an easy way to create and manage a collection of related AWS resources. Provisioning and updating “stacks” and resources becomes a predictable, orderly, and efficient process. Flexible templates allow for customization using parameters, forming relationships between resources, and scripting. Provides the ability to visualize your infrastructure.
  • #37 CloudFormation provides a means to version control your infrastructure using your organization’s tool of choice. CloudFormation stacks can be launched and/or terminated via the AWS Management Console, AWS API, or the AWS command line interface. – cows and pigs With the use of custom scripting, CloudFormation can be integrated with configuration management tools.