100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace
Terraform & Infrastructure as Code
35 minintermediate

Functions, Loops and Conditionals

Infrastructure configurations frequently need to do what programming code does: transform strings, iterate over lists to create multiple resources, conditionally include resources based on environment, and convert between data structures. Terraform's expression language provides built-in functions for string manipulation, collection transformations, and encoding; `count` and `for_each` meta-arguments for creating multiple resource instances; and conditional expressions for environment-specific resource inclusion. These features are what transform a configuration that hardcodes three specific subnet CIDR blocks into one that dynamically generates any number of subnets from a list. Understanding Terraform's approach to iteration and conditionals is essential for writing configurations that scale from a one-server dev setup to a multi-AZ, multi-region production deployment without duplicating resource blocks.

Analogy🏏Cricket
🏏 Think of it like cricket: Before standardised cricket rulebooks existed, every ground played by its own local customs — different LBW interpretations, different wide-ball rules, inconsistent DRS protocols. A touring team playing in a new city had to learn an entirely different set of rules. The standardised ICC rulebook is IaC: a version-controlled document that specifies exactly how cricket is played anywhere in the world. When any ground host asks 'how should this match be set up?', they apply the rulebook — not their memory, not local tradition, not a wiki page from 2019. Every ground becomes reproducible because they're all applying the same version-controlled specification. The insight is that codifying rules enables consistency at scale — you can run a thousand simultaneous cricket matches and every one follows the same rules because they all reference the same canonical document.
Lesson 11 of 24
0% complete