Virtualization, cloud, containers, server automation, and software-defined networking are meant to simplify IT operations. But many organizations adopting these technologies have found that it only leads to a faster-growing sprawl of unmanageable systems. This is where infrastructure as code can help. With this practical guide, author Kief Morris of ThoughtWorks shows you how to effectively use principles, practices, and patterns pioneered through the DevOps movement to manage cloud age infrastructure.
Ideal for system administrators, infrastructure engineers, team leads, and architects, this book demonstrates various tools, techniques, and patterns you can use to implement infrastructure as code. In three parts, you’ll learn about the platforms and tooling involved in creating and configuring infrastructure elements, patterns for using these tools, and practices for making infrastructure as code work in your environment.
Examine the pitfalls that organizations fall into when adopting the new generation of infrastructure technologies
Understand the capabilities and service models of dynamic infrastructure platforms
Learn about tools that provide, provision, and configure core infrastructure resources
Explore services and tools for managing a dynamic infrastructure
Learn specific patterns and practices for provisioning servers, building server templates, and updating running servers
Chapter 1Challenges and Principles
Why Infrastructure as Code?
What Is Infrastructure as Code?
Challenges with Dynamic Infrastructure
Principles of Infrastructure as Code
Antifragility: Beyond “Robust”
Chapter 2Dynamic Infrastructure Platforms
What Is a Dynamic Infrastructure Platform?
Requirements for a Dynamic Infrastructure Platform
Infrastructure Resources Provided by the Platform
Types of Dynamic Infrastructure Platforms
Deciding on a Dynamic Infrastructure Platform
Mechanical Sympathy with the Cloud and Virtualization
Chapter 3Infrastructure Definition Tools
Choosing Tools for Infrastructure as Code
Configuration Definition Files
Working with Infrastructure Definition Tools
Chapter 4Server Configuration Tools
Goals for Automated Server Management
Tools for Different Server Management Functions
Server Change Management Models
Chapter 5General Infrastructure Services
Considerations for Infrastructure Services and Tools
Sharing a Service Between Teams
Monitoring: Alerting, Metrics, and Logging
Distributed Process Management
Chapter 6Patterns for Provisioning Servers
Patterns for Creating Servers
Patterns for Bootstrapping New Servers
Chapter 7Patterns for Managing Server Templates
Stock Templates: Can’t Someone Else Do It?
Provisioning Servers Using Templates
The Process for Building a Server Template
Updating Server Templates
Building Templates for Roles
Automating Server Template Management
Chapter 8Patterns for Updating and Changing Servers
Models for Server Change Management
General Patterns and Practices
Patterns and Practices for Continuous Deployment
Patterns and Practices for Immutable Servers
Practices for Managing Configuration Definitions
Chapter 9Patterns for Defining Infrastructure
Running Definition Tools
Chapter 10Software Engineering Practices for Infrastructure
VCS for Infrastructure Management
Continuous Integration (CI)
Continuous Delivery (CD)
Managing Major Infrastructure Changes
Chapter 11Testing Infrastructure Changes
The Agile Approach to Testing
Structuring the Test Suite: The Test Pyramid
Implementing a Balanced Test Suite
Managing Test Code
Roles and Workflow for Testing
Chapter 12Change Management Pipelines for Infrastructure
Benefits of a Change Management Pipeline
Guidelines for Designing Pipelines
Basic Pipeline Designs
Practices for Using a Pipeline
Scaling Pipelines to More Complex Systems
Techniques for Handling Dependencies Between Components
Practices for Managing Interfaces Between Components
Kief Morris has been designing, building, and running automated IT server infrastructure for nearly twenty years, having started out with shell scripts and Perl, moving on to CFengine, Puppet, Chef, and Ansible among other technologies as they’ve emerged. He is the head of ThoughtWorks’ European practice for Continuous Delivery and DevOps, helping clients find more effective ways of building and managing infrastructure operations.
The animal on the cover of Infrastructure as Code is Rüppell's vulture (Gyps rueppellii), native to the Sahel region of Africa (a geographic zone that serves as a transition between the Sahara Desert and the savanna). It is named in honor of a 19th-century German explorer and zoologist, Eduard Rüppell.
It is a large bird (with a wingspan of 7–8 feet and weighing 14–20 pounds) with mottled brown feathers and a yellowish-white neck and head. Like all vultures, this species is carnivorous and feeds almost exclusively on carrion. They use their sharp talons and beaks to rip meat from carcasses, and have backward-facing spines on their tongue to thoroughly scrape bones clean. While normally silent, these are very social birds who will voice a loud squealing call at colony nesting sites or when fighting over food.
The Rüppell's vulture is monogamous and mates for life, which can be 40–50 years long. Breeding pairs build their nests near cliffs, out of sticks lined with grass and leaves (and often use it for multiple years). Only one egg is laid each year—by the time the next breeding season begins, the chick is just becoming independent. This vulture does not fly very fast (about 22 mph), but will venture up to 90 miles from the nest in search of food.
Rüppell's vultures are the highest-flying birds on record; there is evidence of them flying 37,000 feet above sea level, as high as commercial aircraft. They have a special hemoglobin in their blood that allows them to absorb oxygen more efficiently at high altitudes.
This species is considered endangered and populations have been in decline. Though loss of habitat is one factor, the most serious threat is poisoning. The vulture is not even the intended target: farmers often poison livestock carcasses to retaliate against predators like lions and hyenas. As vultures identify a meal by sight and gather around it in flocks, hundreds of birds can be killed each time.