DEV Community

Mukami
Mukami

Posted on

Ready for Terraform Certification: My Final Exam Prep and 30-Day Reflection

Five Practice Exams. 30 Days. 1,247 Lines of HCL. Zero Sanity Left.


Day 30 of the 30-Day Terraform Challenge: and I survived.

Barely. My keyboard has seen things. My AWS bill has seen worse. My terraform destroy reflex is now faster than my morning coffee reflex.

Five practice exams. 30 days of building. Countless "why is this not working" moments. And one certification prep that started as a goal and became an obsession.

Here's where I stand, what I learned, and why I'm finally ready to face the exam.


Practice Exam 5: The Final Boss

Score: 46/57 (81%)

Character Arc:

  • Exam 1 (Day 28): 74% — nervous, sweaty palms, second-guessing everything
  • Exam 5 (Today): 81% — confident, calm, only mildly questioning my life choices

Improvement: +7%

What this tells me: My brain has been successfully reprogrammed. The gaps are filled. The CLI flags no longer haunt my dreams.


Five-Exam Score Summary

Exam Score % Mood
Exam 1 42/57 74% "Wait, what does state rm do again?"
Exam 2 44/57 77% "Oh, I actually know some of this"
Exam 3 45/57 79% "I am become Terraform, destroyer of resources"
Exam 4 43/57 75% "Brain.exe has stopped working" (fatigue)
Exam 5 46/57 81% "Let's do this."

Average: 44/57 (77%) — consistently above passing
Peak: 81% — ready to book


Fill-in-the-Blank Results

My answers (from memory, no peeking):

  1. terraform fmt — because my code was uglier than my sleep schedule
  2. prevent_destroy — the "save me from myself" button
  3. terraform.workspace — the magic variable that knows where you are
  4. encrypt — because secrets in plaintext are a resume-generating event
  5. set — for_each's best friend (maps are also invited to the party)
  6. rm — removes from state, not from existence (confusing? yes. important? also yes)
  7. 3.0 — because ~> 2.0 is a promise, not a suggestion
  8. existing / managed — one reads, one creates. don't mix them up.
  9. .terraform.lock.hcl — the bouncer that keeps provider versions consistent
  10. myplan.tfplan — apply what you planned, not what your tired brain thinks you planned

All correct. The knowledge is in there. Somewhere between the coffee and the broken builds.


Final Readiness Check (The "Can I Actually Do This?" Test)

1. What does terraform init do to your .terraform directory?
Downloads providers and modules. It's like grocery shopping for your infrastructure.

2. Difference between terraform.tfstate and terraform.tfstate.backup?
One is the source of truth. The other is the "oops, I broke it" safety net.

3. Why never commit terraform.tfstate to version control?
Secrets. Also merge conflicts. Also your teammates will never forgive you.

4. What does depends_on do and when should you use it?
Terraform's way of saying "I know you think this doesn't matter, but trust me, it does." Use it when Terraform can't figure out dependencies on its own.

5. Difference between a variable block and a locals block?
Variables are inputs from outside (like asking your friend what pizza topping they want). Locals are internal calculations (like deciding how many slices everyone gets).

6. What happens if you run terraform apply and the state file was modified by another team member?
Chaos. Or an error message. Depends on whether you have state locking enabled. (Enable state locking.)

7. What does terraform graph output and what is it used for?
A beautiful mess of dependencies that looks like a conspiracy theorist's wall. Used for debugging when you have no idea why Resource A depends on Resource B.

8. What is the Terraform Registry?
The App Store for infrastructure. Providers, modules, and policies — all ready to download.

9. Difference between Terraform Cloud and Terraform Enterprise?
One is SaaS (they run it). One is self-hosted (you run it, good luck).

10. When a module uses configuration_aliases, what problem does it solve?
"How do I use this module in two different regions without copying the entire thing?" — this is the answer.

Confidence level: I'm ready. The exam is not ready for me.


30-Day Reflection (The Therapy Session)

What changed?

What changed is how I think.

Before Day 1, infrastructure was something I set up once and prayed no one touched. After Day 30, infrastructure is code. It goes through PRs. It has tests. It has a CI/CD pipeline. It has opinions about how it should be deployed.

The biggest shift: I stopped fearing terraform destroy. I trust it because I know state is backed up, plans are reviewed, and rollback is one command away. That's not confidence — that's engineering.

What am I most proud of?

The EKS cluster on Day 15.

It took 15 minutes to provision. It failed twice. kubectl authentication broke in ways I didn't know were possible. I spent hours debugging. I questioned every life choice that led me to that moment.

But when kubectl get nodes finally returned two Ready nodes, I felt like Neo seeing the Matrix for the first time. That cluster taught me more about debugging, patience, and AWS networking than any tutorial ever could.

What comes next?

First, the certification exam. I'm booking it for next week. The practice exams say I'm ready. My gut says I'm ready. (My sleep schedule says otherwise, but that's a separate issue.)

After that: contributing to open source Terraform modules. I've broken enough things. Time to help fix some.


Exam Logistics

Status: Not yet booked — aiming for next Friday

Plan:

  • Online proctored (so I can wear comfortable pants)
  • Morning slot (my brain works before noon)
  • Clear desk, test webcam, have ID ready
  • One final practice exam the day before, then rest

What could go wrong: Everything. But I've debugged worse.


Closing Message to the Future Participant

You will break things. You will get frustrated. You will stare at terraform plan output wondering why it wants to destroy your entire VPC when you only changed a tag.

That's not failure. That's learning.

Here's what I wish someone told me on Day 1:

  • Commit .gitignore before you commit anything else
  • Write tests earlier — they're not optional
  • Every error message is telling you exactly what's wrong. Read it. Then read it again. Then maybe Google it.
  • terraform state rm does NOT delete the resource. Learn this before you learn it the hard way.

You will finish this challenge knowing more than most engineers learn in their first year.

Trust the process. Break things they won't break you. Fix them. Then break them again.

And when you finally pass the exam, celebrate. You earned it.


The Bottom Line (In Numbers)

Metric Before After
Fear of terraform destroy 10/10 2/10
Hardcoded values Embarrassing Zero
Test coverage None Unit + integration
State location Local laptop (yikes) S3 + DynamoDB
Regions 1 3 (multi-region flex)
Confidence in passing exam "Maybe?" "Let's go."

Day 30. Challenge complete. Exam next. Let's do this.


Top comments (0)