Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ITT 2019 - Kief Morris - Building Evolvable Inf...

ITT 2019 - Kief Morris - Building Evolvable Infrastructure

Design strategies for building infrastructure that can be continuously evolved, by using pipelines, automated tests, and loosely integrated stacks to enable a continuous flow of changes and improvements.

People are adopting dynamic infrastructure technologies like cloud, containers, and serverless so that they can easily make changes to it. Defining infrastructure as code should make systems consistent, reliable, and easy to manage. But an infrastructure codebase can easily become a complicated, fragile mess that is scary to change. Teams can gain confidence to make frequent, rapid changes to continuously improve their infrastructure by applying appropriate design patterns and implementation practices.

Istanbul Tech Talks

April 02, 2019
Tweet

More Decks by Istanbul Tech Talks

Other Decks in Technology

Transcript

  1. "The highest performers excel at throughput and stability" State of

    the DevOps Report 2018 Nicole Forsgren, PhD, Jez Humble, Gene Kim https://devops-research.com/
  2. "Since we can't avoid change, we need to exploit it"

    Building Evolutionary Architectures Neal Ford, Rebecca Parsons, Pat Kua
  3. OPTIMIZE FOR CHANGE AS CODE Define all your stuff as

    code So that everything is visible, repeatable, and changes are actionable
  4. OPTIMIZE FOR CHANGE CONTINUOUS VALIDATION Integrate and test all work

    in progress as we go So that problems are discovered and fixed up front
  5. OPTIMIZE FOR CHANGE Build small, independently releasable components So that

    they are easier and faster to change, test, and release SMALL PIECES
  6. Some platforms: • AWS • Azure • Google Cloud Platform

    • VMWare • Digital Ocean • Bare metal clouds Infrastructure Platform A dynamic pool of compute, storage, and networking resources
  7. Stack management tool Stack instances Platform API Stack definition Some

    tools: • Terraform • AWS CloudFormation • Azure Resource Manager • Google Deployment Manager • Ansible Cloud Modules
  8. Changes have a wide blast radius Test Staging Production our_env/

    └── test.tf └── staging.tf └── production.tf !
  9. SINGLETON STACK antipattern our_env/ └── test/ └── servers.tf our_env/ └──

    staging/ └── servers.tf our_env/ └── production/ └── servers.tf Test Staging Production
  10. Code changes by copy/paste our_env/ └── test/ └── servers.tf our_env/

    └── staging/ └── servers.tf our_env/ └── production/ └── servers.tf Test Staging Production !
  11. ! Blast radius is managed ! Environments are consistent !

    Testing is more reliable " Adds moving parts # Requires versioning and parameterization mechanisms
  12. Promote changes to environments using a pipeline BUILD LOCAL APPLY

    TO QA APPLY TO PROD Sandbox QA Production APPLY TO TEST Test
  13. Processes and controls are enforced by code Every change is

    logged and traceable, from commit to production Enable governance with pipelines Environment Definitions Test Code Compliance Specifications Pipeline Definitions
  14. Testing the stack is slow Provision the entire stack on

    the platform, with all elements Or update an environment that we keep running all the time Repeat for every stage
  15. Break out a server role Application server role Stack Server

    configurations Java Cookbook Tomcat Cookbook
  16. Test server configurations Test configuration elements separately Provision and test

    using virtual machines or containers Test locally or on build agents