Chapter 5. Terraform Tips and Tricks: Loops, If-Statements, Deployment, and Gotchas
Terraform is a declarative language. As discussed in Chapter 1, IaC in a declarative language tends to provide a more accurate view of what’s actually deployed than a procedural language, so it’s easier to reason about and makes it easier to keep the codebase small. However, certain types of tasks are more difficult in a declarative language.
For example, because declarative languages typically don’t have for-loops, how do you repeat a piece of logic—such as creating multiple similar resources—without copy and paste? And if the declarative language doesn’t support if-statements, how can you conditionally configure resources, such as creating a Terraform module that can create certain resources for some users of that module but not for others? Finally, how do you express an inherently procedural idea, such as a zero-downtime deployment, in a declarative language?
Fortunately, Terraform provides a few primitives—namely, the
expressions, a life cycle block called
create_before_destroy, a ternary operator, plus a large number of
functions—that allow you to do certain types of loops, if-statements, and zero-downtime deployments. Here are
the topics I’ll cover in this chapter:
- Zero-downtime deployment
- Terraform gotchas
As a reminder, you can find all of the code examples in the book at: https://github.com/brikis98/terraform-up-and-running-code ...