Preface Part Ⅰ. Foundations 1. Challenges and Principles Why Infrastructure as Code? What Is Infrastructure as Code? Goals of Infrastructure as Code Challenges with Dynamic Infrastructure Server Sprawl Configuration Drift Snowflake Servers Fragile Infrastructure Automation Fear Erosion Principles of Infrastructure as Code Systems Can Be Easily Reproduced Systems Are Disposable Systems Are Consistent Processes Are Repeatable Design Is Always Changing Practices Use Definition Files Self-Documented Systems and Processes Version All the Things Continuously Test Systems and Processes Small Changes Rather Than Batches Keep Services Available Continuously Antifragility: Beyond "Robust" The Secret Ingredient of Antifragile IT Systems Conclusion What's Next? 2. Dynamic Infrastructure Platforms What Is a Dynamic Infrastructure Platform? Requirements for a Dynamic Infrastructure Platform Programmable On-Demand Self-Service Infrastructure Resources Provided by the Platform Compute Resources Storage Resources Network Resources Types of Dynamic Infrastructure Platforms Public IaaS Cloud Community IaaS Cloud Private IaaS Cloud Antipattern: Hand-Cranked Cloud Hybrid and Mixed Cloud Options Bare-Metal Clouds Deciding on a Dynamic Infrastructure Platform Public or Private? Cloud Portability Mechanical Sympathy with the Cloud and Virtualization Conclusion 3. Infrastructure Definition Tools Choosing Tools for Infrastructure as Code Requirement: Scriptable Interface Requirement: Unattended Mode for Command-Line Tools Requirement: Support for Unattended Execution Requirement: Externalized Configuration Configuration Definition Files Reusability with Configuration Definitions Working with Infrastructure Definition Tools Provisioning Infrastructure with Procedural Scripts Defining Infrastructure Declaratively Using Infrastructure Definition Tools Configuring Servers …… Part Ⅱ.Patterns Part Ⅲ.Practices