Preface
Part I. Foundations
Chapter 1. Challenges and Principles
Why Infrastructure as Code?
What Is Infrastructure as Code?
Challenges with Dynamic Infrastructure
Principles of Infrastructure as Code
Practices
Antifragility: Beyond “Robust”
Conclusion
What’s Next?
Chapter 2. Dynamic 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
Conclusion
Chapter 3. Infrastructure Definition Tools
Choosing Tools for Infrastructure as Code
Configuration Definition Files
Working with Infrastructure Definition Tools
Configuration Registries
Conclusion
Chapter 4. Server Configuration Tools
Goals for Automated Server Management
Tools for Different Server Management Functions
Server Change Management Models
Containers
Conclusion
Chapter 5. General Infrastructure Services
Considerations for Infrastructure Services and Tools
Sharing a Service Between Teams
Monitoring: Alerting, Metrics, and Logging
Service Discovery
Distributed Process Management
Software Deployment
Conclusion
Patterns
Chapter 6. Patterns for Provisioning Servers
Server Provisioning
Patterns for Creating Servers
Patterns for Bootstrapping New Servers
Conclusion
Chapter 7. Patterns for Managing Server Templates
Stock Templates: Can’t Someone Else Do It?
Provisioning Servers Using Templates
The Process for Building a Server Template
Origin Images
Updating Server Templates
Building Templates for Roles
Automating Server Template Management
Conclusion
Chapter 8. Patterns 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
Conclusion
Chapter 9. Patterns for Defining Infrastructure
Environments
Organizing Infrastructure
Running Definition Tools
Conclusion
Practices
Chapter 10. Software Engineering Practices for Infrastructure
System Quality
VCS for Infrastructure Management
Continuous Integration (CI)
Continuous Delivery (CD)
Code Quality
Managing Major Infrastructure Changes
Conclusion
Chapter 11. Testing 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
Conclusion
Chapter 12. Change 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
Conclusion
Chapter 13. Workflow for the Infrastructure Team
Automate Anything That Moves
Using a Local Sandbox
Codebase Organization Patterns
Workflow Effectiveness
Conclusion
Chapter 14. Continuity with Dynamic Infrastructure
Service Continuity
Zero-Downtime Changes
Data Continuity
Disaster Recovery
Security
Conclusion
Chapter 15. Organizing for Infrastructure as Code
Evolutionary Architecture
Measuring Effectiveness
Organize to Empower Users
Governance through Continuous Change Management
Conclusion: It’s Never Finished