01 Language
What this stage buys you: you can write a multi-resource configuration from scratch, understanding every line, without copying an example and adjusting it until the errors stop.
This is the longest stage and the one people rush, because the first three topics feel like syntax you could pick up as you go. You can — and the cost arrives later, at intermediate level, as a persistent sense that Terraform is arbitrary. Almost every "Terraform is weird" complaint traces back to one of four things: not knowing HCL has a real type system, not knowing that provider versions are resolved independently of Terraform, not knowing what makes a dependency, or not knowing when a value is decided.
So this stage is deliberately unhurried about the type system and about providers, and both come before resources. Providers land second because a resource you can't authenticate is a resource you can't run — and because provider versioning is the first place a working example silently breaks a month later.
What you should already know: how to run init, plan and apply, and what the files in a
working directory are. In article terms, Orientation.
| # | Topic | What it covers |
|---|---|---|
| 1 | HCL & the Type System | Blocks, arguments and attributes; primitive types; list / set / map / object / tuple and why set versus list matters later; conversion rules; null; why a .tf file is evaluated rather than executed top to bottom |
| 2 | Providers & the Registry | Providers as independently-versioned plugins; required_providers and the ~> constraint; the lock file and why it's committed; alias and multi-account setups; the authentication chain for each cloud; the cross-provider comparison table the rest of the article links back to |
| 3 | Resources & References | The resource block; arguments versus attributes; referencing another resource and the dependency that creates; (known after apply); the resource address format every error message speaks in; data sources and when they're the wrong reach |
| 4 | Variables, Locals & Outputs | Typed inputs with description, validation and sensitive; the precedence order that trips everyone; locals versus variables; what outputs are really for |
| 5 | Expressions & Functions | Conditionals; for expressions; splat; dynamic blocks and when they're a mistake; templatefile; the functions worth memorising |
Rough time: three weeks. The first two topics are worth more than a week between them; the last one you'll keep returning to as a reference rather than reading once.