Terraform has become a key player in the DevOps world for defining, launching, and managing infrastructure as code (IaC) across a variety of cloud and virtualization platforms, including AWS, Google Cloud, Azure, and more. This hands-on second edition, expanded and thoroughly updated for Terraform version 0.12 and beyond, shows you the fastest way to get up and running.
Gruntwork cofounder Yevgeniy (Jim) Brikman walks you through code examples that demonstrate Terraform’s simple, declarative programming language for deploying and managing infrastructure with a few commands. Veteran sysadmins, DevOps engineers, and novice developers will quickly go from Terraform basics to running a full stack that can support a massive amount of traffic and a large team of developers.
• Explore changes from Terraform 0.9 through 0.12, including backends, workspaces, and first-class expressions
• Learn how to write production-grade Terraform modules
• Dive into manual and automated testing for Terraform code
• Compare Terraform to Chef, Puppet, Ansible, CloudFormation, and Salt Stack
• Deploy server clusters, load balancers, and databases
• Use Terraform to manage the state of your infrastructure
• Create reusable infrastructure with Terraform modules
• Use advanced Terraform syntax to achieve zero-downtime deployment
Author(s): Yevgeniy Brikman
Edition: 2
Publisher: O'Reilly Media
Year: 2019
Language: English
Commentary: Vector PDF
Pages: 368
City: Sebastopol, CA
Tags: DevOps; Amazon Web Services; Clusters; Best Practices; Unit Testing; Web Servers; Automation; Integration Testing; Testing; Terraform; Infrastructure as Code; Teamwork
Cover
Copyright
Table of Contents
Preface
Who Should Read This Book
Why I Wrote This Book
What You Will Find in This Book
What’s New in the Second Edition
What You Won’t Find in This Book
Open Source Code Examples
Using the Code Examples
Conventions Used in This Book
O’Reilly Online Learning
How to Contact O’Reilly Media
Acknowledgments
Chapter 1. Why Terraform
The Rise of DevOps
What Is Infrastructure as Code?
Ad Hoc Scripts
Configuration Management Tools
Server Templating Tools
Orchestration Tools
Provisioning Tools
The Benefits of Infrastructure as Code
How Terraform Works
How Terraform Compares to Other IaC Tools
Configuration Management Versus Provisioning
Mutable Infrastructure Versus Immutable Infrastructure
Procedural Language Versus Declarative Language
Master Versus Masterless
Agent Versus Agentless
Large Community Versus Small Community
Mature Versus Cutting Edge
Using Multiple Tools Together
Conclusion
Chapter 2. Getting Started with Terraform
Setting Up Your AWS Account
Install Terraform
Deploy a Single Server
Deploy a Single Web Server
Deploy a Configurable Web Server
Deploying a Cluster of Web Servers
Deploying a Load Balancer
Cleanup
Conclusion
Chapter 3. How to Manage Terraform State
What Is Terraform State?
Shared Storage for State Files
Limitations with Terraform’s Backends
Isolating State Files
Isolation via Workspaces
Isolation via File Layout
The terraform_remote_state Data Source
Conclusion
Chapter 4. How to Create Reusable Infrastructure with Terraform Modules
Module Basics
Module Inputs
Module Locals
Module Outputs
Module Gotchas
File Paths
Inline Blocks
Module Versioning
Conclusion
Chapter 5. Terraform Tips and Tricks: Loops, If-Statements, Deployment, and Gotchas
Loops
Loops with the count Parameter
Loops with for_each Expressions
Loops with for Expressions
Loops with the for String Directive
Conditionals
Conditionals with the count Parameter
Conditionals with for_each and for Expressions
Conditionals with the if String Directive
Zero-Downtime Deployment
Terraform Gotchas
count and for_each Have Limitations
Zero-Downtime Deployment Has Limitations
Valid Plans Can Fail
Refactoring Can Be Tricky
Eventual Consistency Is Consistent…Eventually
Conclusion
Chapter 6. Production-Grade Terraform Code
Why It Takes So Long to Build Production-Grade Infrastructure
The Production-Grade Infrastructure Checklist
Production-Grade Infrastructure Modules
Small Modules
Composable Modules
Testable Modules
Releasable modules
Beyond Terraform Modules
Conclusion
Chapter 7. How to Test Terraform Code
Manual Tests
Manual Testing Basics
Cleaning Up After Tests
Automated Tests
Unit Tests
Integration Tests
End-to-End Tests
Other Testing Approaches
Conclusion
Chapter 8. How to Use Terraform as a Team
Adopting IaC in Your Team
Convince Your Boss
Work Incrementally
Give Your Team the Time to Learn
A Workflow for Deploying Application Code
Use Version Control
Run the Code Locally
Make Code Changes
Submit Changes for Review
Run Automated Tests
Merge and Release
Deploy
A Workflow for Deploying Infrastructure Code
Use Version Control
Run the Code Locally
Make Code Changes
Submit Changes for Review
Run Automated Tests
Merge and Release
Deploy
Putting It All Together
Conclusion
Appendix A. Recommended Reading
Books
Blogs
Talks
Newsletters
Online Forums
Index
About the Author
Colophon