The Complete Terraform Learning Roadmap — From Beginner to Expert
You have decided to learn Terraform. Maybe you are a sysadmin moving into DevOps, a developer who wants to understand infrastructure, or an engineer preparing for the HashiCorp Terraform Associate certification. Whatever your starting point, you need a structured path — not a random collection of tutorials. This roadmap gives you a 4-month plan with weekly objectives, hands-on projects, a skills checklist, and links to every Terraform post on Goel Academy organized by topic.
The 4-Month Learning Plan
Month 1: Foundations
The goal is to understand what Terraform does, write basic configurations, and get comfortable with the workflow.
| Week | Focus | Hands-On Project |
|---|---|---|
| 1 | Install Terraform, HCL syntax, first init/plan/apply | Deploy a single EC2 instance or Azure VM |
| 2 | Variables, outputs, locals, data types | Parameterize your config with variables and outputs |
| 3 | Providers, resource lifecycle, data sources | Add an S3 bucket with lifecycle rules, query existing VPC |
| 4 | State basics, terraform.tfstate, CLI commands | Explore state with state list, state show, console |
Monthly self-check: Can you write a Terraform configuration from scratch that provisions a VM, a storage bucket, and a security group using variables and outputs?
# Week 1 target: Deploy this without looking at docs
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = var.instance_type
tags = {
Name = "${var.project}-web"
}
}
variable "instance_type" {
type = string
default = "t3.micro"
}
variable "project" {
type = string
default = "learning"
}
output "public_ip" {
value = aws_instance.web.public_ip
}
Month 2: Intermediate Skills
The goal is to write reusable, production-grade code with modules, remote state, and proper structure.
| Week | Focus | Hands-On Project |
|---|---|---|
| 5 | Modules — creating, calling, inputs/outputs | Refactor Month 1 code into a reusable module |
| 6 | Remote state (S3 + DynamoDB), state locking | Migrate local state to S3 backend |
| 7 | Workspaces, multi-environment patterns | Deploy same infra to dev and staging using workspaces |
| 8 | Expressions — for_each, count, conditionals, functions | Create multiple IAM users with for_each, conditional resources |
Monthly self-check: Can you create a module that accepts variables, deploy it to two environments using workspaces, with remote state in S3?
# Week 5 target: Your first module call
module "web_server" {
source = "./modules/ec2-instance"
instance_type = var.environment == "prod" ? "m5.large" : "t3.micro"
subnet_id = module.networking.public_subnet_id
project = var.project
environment = var.environment
}
Month 3: Production Patterns
The goal is to manage real infrastructure with CI/CD, testing, and security scanning.
| Week | Focus | Hands-On Project |
|---|---|---|
| 9 | AWS VPC from scratch — subnets, NAT, route tables | Build a full 3-tier VPC with public and private subnets |
| 10 | Azure resources — resource groups, VNets, AKS | Deploy an Azure Kubernetes cluster with Terraform |
| 11 | CI/CD for Terraform — GitHub Actions, plan on PR | Set up a GitHub Actions pipeline with plan and apply |
| 12 | Testing and security — terraform test, tflint, checkov | Write tests for your modules, run security scans |
Monthly self-check: Can you build a VPC, deploy an EKS or AKS cluster, and run the entire workflow through a CI/CD pipeline with automated tests?
# Week 11 target: GitHub Actions pipeline
name: Terraform
on:
pull_request:
paths: ['infrastructure/**']
jobs:
plan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
- run: terraform init
- run: terraform validate
- run: terraform plan -no-color
Month 4: Advanced and Expert
The goal is to handle complex real-world scenarios, prepare for certification, and understand the broader ecosystem.
| Week | Focus | Hands-On Project |
|---|---|---|
| 13 | State surgery, import, moved blocks | Import existing resources, refactor with moved blocks |
| 14 | Module design patterns, Terraform Cloud | Publish a module to a private registry |
| 15 | Multi-environment, drift detection, troubleshooting | Build a drift detection pipeline with Slack alerts |
| 16 | Custom providers, scaling patterns, exam prep | Take practice exams, review all topics |
Monthly self-check: Can you import existing infrastructure, detect drift automatically, troubleshoot state corruption, and explain Terraform architecture to someone else?
# Week 13 target: State surgery workflow
terraform import aws_s3_bucket.existing my-existing-bucket
terraform state mv aws_instance.old module.compute.aws_instance.web
terraform state rm aws_instance.deprecated
terraform plan # Should show no unexpected changes
HashiCorp Terraform Associate (003) Certification
The Terraform Associate 003 is the industry-recognized certification. Here is what you need to know:
| Detail | Info |
|---|---|
| Exam code | TA-003 |
| Duration | 60 minutes |
| Questions | ~57 multiple choice and multi-select |
| Passing score | ~70% (HashiCorp does not publish exact threshold) |
| Cost | $70.50 USD |
| Validity | 2 years |
| Prerequisites | None (recommended: 6+ months Terraform experience) |
Exam Domains
1. Understand IaC concepts (~14%)
2. Understand the purpose of Terraform (~14%)
3. Understand Terraform basics (~22%)
4. Use Terraform outside of core workflow (~14%)
5. Interact with Terraform modules (~14%)
6. Use the core Terraform workflow (~11%)
7. Implement and maintain state (~14%)
Study Tips
- Complete all 4 months of the roadmap above — it covers every exam domain.
- Use the HashiCorp official study guide and practice exams.
- Focus on state management (domain 7) — it is heavily tested and commonly misunderstood.
- Practice in a real cloud account. Free tiers on AWS and Azure are sufficient.
- Read every Terraform CLI command's help output:
terraform <command> -help.
Skills Checklist
Track your progress across 25 essential Terraform skills:
Beginner
[ ] Install Terraform and run init/plan/apply/destroy
[ ] Write HCL with resources, variables, outputs, and locals
[ ] Understand providers and version constraints
[ ] Read and interpret terraform plan output
[ ] Use terraform.tfvars and environment variables
[ ] Navigate and query state with terraform state commands
[ ] Use terraform console for expression evaluation
Intermediate
[ ] Create and consume reusable modules
[ ] Configure remote state with locking (S3/DynamoDB or Azure Storage)
[ ] Use workspaces for multi-environment deployments
[ ] Write for_each, count, and conditional expressions
[ ] Use dynamic blocks for repeated nested configuration
[ ] Import existing resources into state
[ ] Understand resource lifecycle (create_before_destroy, prevent_destroy)
Advanced
[ ] Set up CI/CD pipelines with plan-on-PR and apply-on-merge
[ ] Write and run terraform test or terratest tests
[ ] Run security scanning with tflint and checkov
[ ] Perform state surgery (mv, rm, import, push, pull)
[ ] Design module interfaces with validation and custom conditions
[ ] Configure Terraform Cloud or Enterprise
[ ] Implement drift detection and alerting
Expert
[ ] Manage state blast radius and split state by concern
[ ] Build or customize Terraform providers in Go
[ ] Implement policy-as-code with Sentinel or OPA
[ ] Migrate from CloudFormation or ARM Templates
[ ] Design Terraform patterns for 10+ team organizations
Career Paths
Terraform skills open several career doors:
| Role | Focus | Terraform Use |
|---|---|---|
| DevOps Engineer | CI/CD, automation, infrastructure | Day-to-day Terraform for application infrastructure |
| IaC Engineer | Infrastructure code, modules, standards | Full-time module development, state architecture |
| Platform Engineer | Internal platforms, developer experience | Building self-service infrastructure with modules |
| Cloud Architect | Multi-cloud strategy, governance | Terraform design patterns, policy enforcement |
| SRE | Reliability, monitoring, incident response | Terraform for observability stack, disaster recovery |
Practice Resources
You do not need an expensive cloud account to learn Terraform:
# Free practice options
# 1. AWS Free Tier — 12 months of t2.micro, S3, RDS, etc.
# https://aws.amazon.com/free/
# 2. Azure Free Account — $200 credit + 12 months free services
# https://azure.microsoft.com/en-us/free/
# 3. Terraform local providers (no cloud needed)
# Docker provider — manage containers locally
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0"
}
}
}
resource "docker_container" "nginx" {
name = "learning-nginx"
image = docker_image.nginx.image_id
ports {
internal = 80
external = 8080
}
}
resource "docker_image" "nginx" {
name = "nginx:latest"
}
# 4. LocalStack — fake AWS APIs running locally
# https://localstack.cloud/
pip install localstack
localstack start
# Configure Terraform to use LocalStack
provider "aws" {
region = "us-east-1"
access_key = "test"
secret_key = "test"
skip_credentials_validation = true
skip_metadata_api_check = true
endpoints {
s3 = "http://localhost:4566"
ec2 = "http://localhost:4566"
iam = "http://localhost:4566"
}
}
Progression to Advanced Tools
Once you are comfortable with Terraform, explore the broader ecosystem:
| Tool | What It Does | When to Adopt |
|---|---|---|
| Terragrunt | DRY wrapper for Terraform — shared backends, inputs | When you have 10+ state files with duplicated config |
| Atlantis | Pull request automation for Terraform | When your team needs PR-based plan/apply workflow |
| Terraform Cloud | Remote execution, state management, policy | When you need governance and centralized runs |
| Pulumi | IaC in real programming languages (Python, TypeScript, Go) | When your team prefers general-purpose languages over HCL |
| AWS CDK for Terraform (CDKTF) | Write Terraform with TypeScript, Python, Java, Go | When you want CDK constructs with Terraform providers |
| OpenTofu | Open-source fork of Terraform | When you want BSL-free Terraform-compatible tooling |
All 29 Goel Academy Terraform Posts by Topic
Getting Started
- Terraform Basics — Your First Infrastructure as Code
- Terraform Variables and Outputs — The Complete Guide
- Terraform CLI Commands — The Complete Reference
Core Concepts
- Terraform State Management — Local, Remote, and Best Practices
- Terraform Providers — How Terraform Talks to the Cloud
- Terraform Resource Lifecycle — Create, Update, Destroy
- Terraform Data Sources — Querying Existing Infrastructure
- Terraform Expressions — Loops, Conditionals, and Functions
Modules and Reusability
- Terraform Modules — Write Once, Deploy Everywhere
- Terraform Module Design Patterns — Composable, Opinionated, and Wrapper Modules
- Terraform Workspaces — Managing Multiple Environments
Cloud-Specific
- Building an AWS VPC with Terraform — From Zero to Production
- Terraform for Azure — Resource Groups, VNets, and Beyond
State and Operations
- Terraform Remote State — Backends, Locking, and Cross-Stack References
- Terraform State Surgery — Import, Move, Remove, and Recover
- Terraform Drift Detection — When Reality Doesn't Match Your Code
- Terraform Troubleshooting — Debug Logs, Crash Recovery, and Common Errors
CI/CD and Testing
- Terraform CI/CD — Automating Plan and Apply with GitHub Actions
- Terraform Testing — Unit Tests, Integration Tests, and Policy
- Terraform Security Scanning — tflint, checkov, and Sentinel
Production and Scale
- Terraform Multi-Environment — Dev, Staging, and Prod Without Duplication
- Terraform Cloud — Remote State, Remote Execution, and Team Management
- Terraform at Scale — Monorepo vs Polyrepo, and State Blast Radius
- Writing Custom Terraform Providers in Go
Migration and Career
- Migrating from CloudFormation and ARM Templates to Terraform
- Top 50 Terraform Interview Questions for DevOps Engineers
This Post
Closing Note
Terraform is not a tool you learn in a weekend. It is a skill you build over months of practice, real deployments, and debugging production issues at midnight. This roadmap gives you the structure, but the effort is yours. Start with Month 1, resist the urge to skip ahead, and build a real project at every stage. By the end of four months, you will not just know Terraform — you will think in Terraform. And that is what makes the difference in interviews, on the job, and in your career.
