HashiCorp Certified: Terraform Associate
The certifications page summarizes this exam in a few paragraphs alongside two others. This page is the deep profile: the full official domain breakdown — infrastructure-as-code concepts, Terraform's purpose, the basics and providers, the CLI, modules, the core workflow, state, HCL configuration, and HCP Terraform — the version note every returning candidate needs (004 replaced the retired 003), and a direct map from each domain onto the two lessons that actually teach it: infrastructure as code for the vendor-neutral model the exam assumes you already hold, and the Terraform tool page for the tool-specific syntax the exam tests directly.
Imagine a test about a single, very specific tool — not "can you build anything," just "do you know this one wrench inside and out." No workbench, no real screws to turn — you sit at a computer and answer questions about what the wrench is for, how to hold it, which end goes where, and what happens if you use it wrong. That's the Terraform Associate: one tool, nine topics about that tool, no hands-on lab, an hour on the clock.
What the Terraform Associate is, and who it's for
☺ Like you're 10: A one-hour, closed-book, multiple-choice test about one specific tool's syntax and workflow — no terminal, no real infrastructure touched.
The HashiCorp Certified: Terraform Associate is HashiCorp's own entry-level credential for people who write, read, or review Terraform configuration. Unlike the CKA, it is entirely knowledge-based — multiple choice, true/false, and multiple-answer questions delivered online, proctored remotely, with no live terminal and no infrastructure actually provisioned during the exam. It certifies foundational knowledge of the tool itself: HCL syntax, the core workflow, state, providers, and modules. It does not certify infrastructure architecture, cloud design, or the judgment to choose Terraform over another approach in the first place — that broader, vendor-neutral thinking is what infrastructure as code covers, and this exam assumes you already hold it.
It targets anyone who writes or reviews Terraform day to day — application engineers provisioning their own service's infrastructure, platform engineers building the shared modules other teams consume, and anyone whose job touches a .tf file often enough that "I've picked it up informally" is starting to feel shaky. HashiCorp does not formally require anything before you sit it, but its own study guide assumes some hands-on Terraform usage already — this is not the exam to attempt before you've run terraform apply against something real at least a few times.
| Item | What is generally published |
|---|---|
| Format | Online proctored, closed-book — multiple choice, true/false, and multiple-answer questions, no hands-on lab component |
| Question count | Approximately 57–60 (third-party reported; HashiCorp does not always publish an exact count — verify at the official page) |
| Duration | 60 minutes |
| Passing score | Not officially published by HashiCorp; informally reported around 70% — verify at the vendor's own page before you plan around a number |
| Price | Historically around USD $70.50 for HashiCorp associate-level exams — confirm the current fee before you register, it is one of the figures most likely to have moved |
| Prerequisites | None formally required — but HashiCorp's own study guide assumes hands-on Terraform experience |
| Validity | 2 years from the date you pass |
| Current version | 004 — see the version note below before you study from anything older |
004 vs. the retired 003: what changed, and why it matters if you're studying with old material
☺ Like you're 10: If your study notes still say "Terraform Cloud" instead of "HCP Terraform," they were written for the old version of this test.
The exam you'll actually sit today is version 004. Version 003 is retired — HashiCorp does not let you register for it anymore, but plenty of study guides, flashcard decks, and old blog posts written against it are still circulating, and they are the single most common way candidates walk in under-prepared. The nine domain topics carry over largely intact between the two versions — HCL syntax, the workflow, state, providers, and modules were the substance of 003 and remain the substance of 004 — so old material is not wrong, exactly. It is stale in three specific ways worth checking for before you trust anything you didn't get from HashiCorp's own current page.
- Terraform Cloud became HCP Terraform. HashiCorp rebranded its hosted product; any objective, question, or study note still saying "Terraform Cloud" is describing the same product under its old name — the underlying concepts (managed state, run history, policy checks, a private registry) didn't change, only the label did.
- The CLI has moved on underneath the objectives. Features that didn't exist when 003 was written — the declarative
importblock (1.5+),movedblocks (1.1+) for safe resource renames,-consolidate-warnings-era plan output changes — are fair game under a 004-era objective that just says "read, generate, and modify configuration." A study guide frozen at 003 won't mention any of them. - Exact question counts and pass marks are rarely republished verbatim. Neither version has ever had a precisely, permanently published passing score — both are informally reported, not vendor-confirmed — so a number quoted from an old 003 writeup is no more or less authoritative than one quoted today. Treat any specific percentage you read anywhere, including this page, as directional.
The safest check: open HashiCorp's own certification page and confirm the exam guide you're reading is currently labeled 004. If a practice-question source doesn't say which version it targets at all, treat it as suspect rather than assuming it's current — an outdated deck that's 90% overlapping content is exactly the kind of "close enough" material that leaves gaps in exactly the newest, least-covered corner of a domain.
The official domain breakdown
☺ Like you're 10: Nine topics, and — unlike the CKA — HashiCorp doesn't publish a percentage for each one, so don't assume they're weighted equally or that any one is "the big one."
HashiCorp's own exam guide lists nine objective domains, each broken into several specific, testable sub-objectives. Unlike the CKA's curriculum, HashiCorp does not publish a percentage weight per domain — there is no "30% troubleshooting" equivalent here, so treat the list below as complete coverage, not a prioritization guide, and verify the exact current wording against HashiCorp's own study guide before you treat any single sub-bullet as gospel.
Reading left to right above roughly matches how most candidates find it natural to study: understand why IaC and Terraform exist, learn the language and workflow that makes up the bulk of the exam, then round out state and the hosted platform. The full nine, in HashiCorp's own published order:
- Understand infrastructure as code (IaC) concepts — what IaC is, and the advantages of the declarative pattern over ad hoc scripting. Covered in full at infrastructure as code.
- Understand Terraform's purpose (vs. other IaC) — multi-cloud and provider-agnostic benefits, and why state is what makes Terraform's approach work.
- Understand Terraform basics — installation and versioning, the plugin-based provider architecture, using multiple providers (including aliased providers for multi-region setups), and when — and when not — to reach for a
provisioner. - Use the Terraform CLI outside the core workflow —
fmt,import,workspace,state,output,console, and the resource-replacement mechanics historically covered bytaint. - Interact with Terraform modules — module sources, inputs and outputs, variable scope across parent and child modules, discovering modules on the public registry, and pinning module versions.
- Navigate the Terraform workflow —
init,validate,plan,apply,destroy, in order, and what each one is actually responsible for. - Implement and maintain state — the default local backend, state locking, backend authentication, remote backend options, handling drift, and what does and doesn't stay secret inside a state file.
- Read, generate, and modify configuration — variables and outputs, secure secret injection, collection and structural types, resources vs. data sources, resource addressing, built-in functions,
dynamicblocks, and Terraform's implicit dependency graph. - Understand HCP Terraform capabilities — how the hosted platform helps manage infrastructure, and how it supports team collaboration and governance (policy checks, a private registry, run history).
Domain wording above is written from HashiCorp's long-published objective structure and is a close, study-oriented paraphrase rather than a verbatim quote — check the exact current sub-bullet text on HashiCorp's own study guide before treating any single phrase as exam-verbatim.
What you need to know cold: HCL syntax, workflow, state, providers, modules
☺ Like you're 10: Five things your fingers and your eyes both need to recognize instantly — the shape of the language, the five-command workflow, where state lives, how a provider gets pinned, and how a module gets called.
HCL syntax: blocks, meta-arguments, and the pieces that actually get tested
Every .tf file is blocks: a keyword, optional labels in quotes, a body in { }. The exam expects instant recognition of terraform, provider, resource, data, variable, locals, output, and module — the same set the Terraform tool page covers in full — plus the handful of meta-arguments that aren't tied to any one resource type: count and for_each for creating multiple instances, depends_on for an explicit dependency the graph can't infer on its own, provider for pointing a resource at a non-default aliased provider, and the lifecycle block (create_before_destroy, prevent_destroy, ignore_changes).
provider "aws" {
region = "us-east-1"
}
provider "aws" {
alias = "replica"
region = "us-west-2"
}
resource "aws_s3_bucket" "primary" {
bucket = "acme-reports-primary"
}
resource "aws_s3_bucket" "replica" {
provider = aws.replica # meta-argument: use the aliased provider, not the default
bucket = "acme-reports-replica"
lifecycle {
prevent_destroy = true # meta-argument: refuse to destroy this resource, even via destroy
}
}
resource "aws_instance" "web" {
for_each = toset(["a", "b", "c"]) # meta-argument: one instance per set member, stable keys
ami = data.aws_ami.app.id
instance_type = "t3.micro"
depends_on = [aws_s3_bucket.primary] # meta-argument: explicit ordering the graph can't infer
}One distinction the exam tests directly: resource blocks create and own something; data blocks only read something that already exists and never modify it. Confusing the two — writing a data source expecting Terraform to manage its lifecycle, or a resource block expecting it to just look something up — is a reliable source of wrong answers.
The core workflow: five commands, in order
Domain 6 is exactly this sequence, and exam questions frequently describe a symptom and ask which stage of the workflow it belongs to.
$ terraform init # download providers/modules, set up the backend — run first, always
$ terraform validate # syntax + internal consistency check — no state, no provider API calls
$ terraform plan # read-only diff: desired config vs. real infrastructure via provider APIs
$ terraform apply # execute the diff — the only command in this list allowed to change anything
$ terraform destroy # plan and apply the removal of everything this config ownsterraform fmt rewrites files into canonical formatting and is technically part of domain 4 (CLI outside the workflow), not domain 6 — a distinction the exam has been known to probe directly. Note also that validate cannot catch an error that only a real provider API would know about (a bad AMI ID, an out-of-range instance size) — that's exactly what plan, which does talk to the provider, is for.
State: where it lives, what locks it, what's in it
Without backend configuration, state is a local terraform.tfstate file — plain JSON holding every tracked resource's attributes and the dependency graph between them. A remote backend (S3, GCS, Azure's azurerm, or HCP Terraform's own managed state) moves that file to shared storage and adds locking, so two concurrent applies can't race against the same state. The domain-7 fact most candidates miss: marking an output sensitive = true only hides it from CLI and UI display — the raw value is still written to the state file in plaintext, which is why state file access control is a real secret boundary and not a formality. Full depth, including the exact backend configuration syntax and the state list / state mv / state rm / import command family, lives on the Terraform tool page; the secrets angle specifically is covered in secrets & credential management.
Providers: versioning and where plugins come from
Providers are plugins, resolved and pinned in the terraform block's required_providers, downloaded by terraform init from the public Terraform Registry by default, and recorded — exact version and hash — in .terraform.lock.hcl, which belongs in version control so every teammate and every CI run gets identical providers. The version-constraint operators are worth memorizing cold:
| Operator | Meaning |
|---|---|
= (or bare) | Exactly this version |
!= | Any version except this one |
>, >=, <, <= | Standard numeric comparison |
~> | Pessimistic constraint — allows only the rightmost version component to increment. ~> 5.13 means >= 5.13, < 6.0 |
terraform {
required_version = ">= 1.9.0"
required_providers {
aws = {
source = "hashicorp/aws" # registry namespace/name — how init knows where to fetch it
version = "~> 5.60"
}
}
}Modules: composing configuration, not just writing it
A module is any directory of .tf files invoked through a module block. The directory you run Terraform in directly is the root module; anything it calls is a child module. Domain 5 tests source-type recognition specifically: a local relative path (./modules/vpc), the public Terraform Registry's short form (terraform-aws-modules/vpc/aws), a Git URL with an optional ?ref=, or a generic HTTP/S3 archive — plus variable scope (a child module cannot see its caller's variables or locals unless they're explicitly passed in as module inputs) and version pinning on registry modules using the same operators as providers.
module "vpc" {
source = "terraform-aws-modules/vpc/aws" # registry short form
version = "~> 5.13"
cidr = "10.20.0.0/16"
}
module "app" {
source = "./modules/service" # local path — no version argument; it isn't versioned
vpc_id = module.vpc.vpc_id # a child module's output feeding another module's input
}Try writing one yourself in Drill — Write a Reusable IaC Module, then use it in a real stack in Capstone Part 2 — Infrastructure as Code.
Every one of the nine domains reduces to one of two questions: "do you understand the model" (domains 1, 2, 7, 9 — concepts, purpose, state, the hosted platform) or "can you read and write the syntax" (domains 3, 4, 5, 6, 8 — basics, CLI, modules, workflow, configuration). If you can already explain why Terraform reconciles instead of scripting steps, most of your remaining study time belongs in the second bucket — actually reading and writing HCL, not re-reading conceptual explanations you've already internalized.
How to prepare using this site
☺ Like you're 10: Two lessons here cover almost the entire exam — one for the "why," one for the "how" — plus a few smaller pages for the edges.
| Domain | Study here |
|---|---|
| 1–2 · IaC concepts & Terraform's purpose | Infrastructure as code — declarative vs. imperative, idempotency, drift, state locking, all covered vendor-neutral before Terraform's specific syntax is introduced |
| 3, 4, 6, 8 · Basics, CLI, workflow, configuration | Terraform — HCL syntax in full, the day-to-day command set, and the exact init → plan → apply mechanics |
| 5 · Modules | Terraform's module-ecosystem section, then Drill — Write a Reusable IaC Module for hands-on practice |
| 7 · State | Terraform's state, backend, and locking section; Secrets & Credential Management for what does and doesn't belong in state |
| 9 · HCP Terraform | Terraform's coverage of HCP Terraform/Terraform Enterprise as the hosted control plane; HashiCorp Vault for the adjacent secrets product in the same vendor's suite |
| Adjacent tool boundary | Configuration management — the exam expects you to know what Terraform provisions versus what a tool like Ansible configures afterward, even though that boundary isn't its own domain |
| Speed & recall | Flashcards for HCL syntax and CLI-flag drilling · Glossary for terminology |
| The neighboring HashiCorp cert | Vault Associate — same exam style, same vendor, the secrets half of the toolchain instead of the provisioning half |
A workable shape for most candidates: a few days on infrastructure as code to lock in the vendor-neutral model, most of the remaining time inside the Terraform tool page actually typing every code block rather than reading it, and a final pass working through flashcards and the domain list above from memory, out loud, without looking anything up.
Exam logistics — verify these yourself before you register
☺ Like you're 10: Prices and question counts drift over time — read the vendor's own page the week you plan to book, not a page like this one from months ago.
| Item | What is generally published |
|---|---|
| Delivery | Online, remotely proctored — no testing-center-only option is typically required |
| Retake policy | A waiting period before a retake is standard practice across HashiCorp's associate exams; confirm the current window on the vendor's page |
| Permitted resources | Closed-book — no documentation, notes, or second monitor during the exam, unlike the CKA's open-book format |
| Recertification | Retaking the current version of the exam before your 2-year validity lapses |
| Study materials HashiCorp itself provides | An official study guide and sample questions, published on the same certification page — a legitimate first stop before any third-party material |
Price, question count, passing score, and retake policy all change without much notice. This site is independent and unofficial. Confirm current details on HashiCorp's own certification page before you pay for anything, and re-read the current exam guide there in full — it is the only source that's authoritative about which of the nine domains' sub-bullets are current for version 004 specifically.
Where it sits, and who should take it
☺ Like you're 10: It's the fast, narrow one — a good first certification, and a weak substitute for actually operating a cluster or a cloud account under pressure.
Of the three certifications this course covers in depth, the Terraform Associate is the narrowest and the fastest to prepare for — one tool, no hands-on component, an hour long. That makes it a strong first certification if you're building a résumé with no prerequisites to clear first, and a weak only certification if the job actually requires proving you can operate infrastructure under a clock, which is what the performance-based CKA is for instead.
| Terraform Associate | CKA | |
|---|---|---|
| Question | Do you know Terraform's syntax and workflow? | Can you actually run a Kubernetes cluster? |
| Format | Knowledge-based, multiple choice | 100% performance-based, live clusters |
| Scope | One tool | One platform (Kubernetes), any tooling around it |
| Prerequisites | None formal; some hands-on Terraform assumed | None formal |
| Typical first move | Often the very first cert someone sits | After you're already comfortable at a Linux/kubectl shell |
Take it if: you write or review Terraform regularly and have never had that knowledge externally checked, or you want a fast, concrete, no-prerequisite win while building toward a harder performance-based exam. Consider skipping it if: you already hold deep, provable Terraform experience and a knowledge-based multiple-choice exam would tell a hiring manager nothing they couldn't already see in your work; or your actual gap is elsewhere entirely — Kubernetes operations (CKA) or AWS-specific delivery services, in which case the certifications page walks the full comparison.
Foxy: I studied from a Terraform Associate deck my friend gave me. It never once mentioned HCP Terraform — just "Terraform Cloud" everywhere.
Ellie the Elephant: Then your friend's deck was written for 003, Foxy. It's retired. The concepts mostly still hold, but the branding — and a few CLI features — moved on to 004.
Recon: Check for the import block, too. If a study guide only shows the old imperative terraform import command and never the declarative block, that's another 003 tell.
Foxy: Okay, but the domains — modules, state, the workflow — those are still the actual test, right?
Ellie the Elephant: Same nine domains, same substance. Just make sure the last coat of paint you studied is the current one.
Gizmo: Or skip studying and just pattern-match "the answer that sounds most like Terraform." Works about half the time. 🤑
Timmy: Half the time is a failing score, Gizmo. Read the current study guide. It's free and it's HashiCorp's own.
1. Is the Terraform Associate exam hands-on/performance-based like the CKA, or knowledge-based? 2. Name the nine official domains in HashiCorp's published order — or at least five of them. 3. What is the single biggest branding tell that a piece of study material was written for the retired 003 version instead of 004? 4. What does the ~> version-constraint operator mean, and what does ~> 5.13 specifically allow? 5. Does marking a Terraform output as sensitive = true keep its value out of the state file?
Check your answers
- Knowledge-based — multiple choice, true/false, and multiple-answer questions, with no hands-on lab component, unlike the 100% performance-based CKA.
- Understand IaC concepts; understand Terraform's purpose; understand Terraform basics; use the CLI outside the core workflow; interact with modules; navigate the core workflow; implement and maintain state; read/generate/modify configuration; understand HCP Terraform capabilities.
- Material that still says "Terraform Cloud" instead of "HCP Terraform" throughout — that rebrand is the clearest, fastest tell that a source predates the 004 version.
~>is the pessimistic constraint operator — it allows only the rightmost version component to increment.~> 5.13allows any version >= 5.13 and < 6.0.- No.
sensitive = trueonly redacts the value from CLI and UI display — the raw value is still written to the state file in plaintext, which is why state file access control is the real secret boundary.