004 — HashiCorp Certified: Terraform Associate Exam Blueprint

Practical exam blueprint for the HashiCorp Certified: Terraform Associate (004) exam, covering Terraform workflow, configuration, state, modules, providers, and HCP Terraform readiness.

How to use this exam blueprint

Use this page as an independent readiness map for the HashiCorp Certified: Terraform Associate (004) exam from HashiCorp. It is designed to help you turn broad Terraform exam topics into concrete review tasks.

Do not treat the order of topics as an exam weighting. Instead, use the checklist to answer three questions:

  1. Can I explain the concept clearly?
  2. Can I recognize the right Terraform command, file, or workflow in a scenario?
  3. Can I avoid common traps around state, dependencies, variables, modules, and remote execution?

A good final-review target: for each row below, you should be able to explain the concept, identify the relevant Terraform artifact, and predict what Terraform will do next.

Topic-area readiness table

Readiness areaYou should be able to explainYou should be able to doQuick self-check
Infrastructure as CodeWhy Terraform uses declarative configuration and stateCompare manual changes, scripts, and IaC workflowsCan you explain why Terraform needs state?
Terraform workflowThe normal loop: write, init, validate, plan, apply, review stateChoose the correct CLI command for each stageCan you tell what terraform init does and does not do?
ProvidersHow Terraform uses providers as plugins for APIsConfigure provider source, version constraints, and aliasesCan you identify when a provider must be initialized or upgraded?
Resources and data sourcesDifference between managed infrastructure and read-only lookupsRead resource addresses and referencesCan you explain resource vs data in a scenario?
Configuration languageHCL blocks, arguments, expressions, references, functionsRead variables, locals, outputs, conditionals, loopsCan you predict values from a small .tf snippet?
Variables and outputsInput variable precedence, defaults, validation, sensitivityUse variables, .tfvars, environment variables, and outputsCan you identify where a variable value came from?
DependenciesImplicit references, explicit depends_on, graph orderingPredict create, update, and destroy order at a high levelCan you spot when depends_on is unnecessary?
StateState purpose, resource tracking, drift detection, sensitive data riskInspect, move, remove, and protect state appropriatelyCan you explain why editing state directly is risky?
BackendsLocal vs remote state concepts, locking, shared team workflowsRecognize when remote state is neededCan you choose shared state for a team scenario?
ModulesRoot modules, child modules, registry modules, inputs, outputsCall a module and pass values correctlyCan you explain how a child module exposes an output?
WorkspacesMultiple named state instances for one configurationSelect, create, and list workspacesCan you explain what workspaces are not meant to solve?
HCP Terraform workflowsRemote runs, workspaces, VCS-driven workflows, variables, collaborationIdentify when a remote execution workflow fitsCan you distinguish local CLI execution from remote execution?
SecurityProvider credentials, secret handling, sensitive outputs, state protectionAvoid committing secrets and know where secrets may still appearCan you explain why sensitive = true is not encryption?
TroubleshootingInit, validation, planning, provider, permissions, and state errorsChoose first diagnostic steps from an error messageCan you separate syntax errors from provider/API errors?
Change managementPlans, saved plans, replacements, imports, moved resourcesDecide how to review and apply changes safelyCan you tell when Terraform will replace a resource?

Terraform workflow you must be ready to recognize

    flowchart LR
	    A[Write or update .tf files] --> B[terraform fmt]
	    B --> C[terraform init]
	    C --> D[terraform validate]
	    D --> E[terraform plan]
	    E --> F{Review changes}
	    F -->|Accept| G[terraform apply]
	    F -->|Reject| A
	    G --> H[State updated]
	    H --> E

Ready means you can explain each step

StepWhat it checks or changesWhat it does not guarantee
terraform fmtFormatting consistencyDoes not validate provider permissions
terraform initBackend setup, module download, provider plugin installationDoes not create infrastructure
terraform validateConfiguration syntax and internal consistencyDoes not fully verify remote API permissions or quota-like conditions
terraform planProposed actions compared with state and remote objectsDoes not apply changes; may become stale if inputs or remote state change
terraform applyExecutes approved changes and updates stateDoes not mean every external system is now perfectly documented outside Terraform
terraform destroyPlans and removes managed objectsDoes not remove unmanaged resources

CLI command checklist

CommandKnow the purposeReady if you can answer
terraform versionShow Terraform CLI version and provider version contextWhy might version mismatches matter?
terraform fmtReformat .tf filesWhen would fmt -check be useful in CI?
terraform initInitialize backend, providers, and modulesWhen should you run it again?
terraform init -upgradeRe-evaluate provider and module selections within constraintsHow is this different from a normal init?
terraform validateValidate configuration structureWhy can validation pass but apply fail?
terraform planPreview changesHow do you use plan output to identify create, update, replace, or destroy?
terraform plan -out=FILESave a specific plan for later applyWhy is a saved plan safer than re-planning later?
terraform applyApply a plan or create a new plan and ask for approvalWhat changes if you pass a saved plan file?
terraform destroyRemove managed infrastructureWhy should state and workspace context be checked first?
terraform showDisplay state or plan contentWhen would terraform show -json be useful?
terraform outputRead root module outputsWhat is the difference between an output and a resource attribute?
terraform state listList resources tracked in stateWhat does absence from state imply?
terraform state show ADDRESSInspect a tracked object in stateWhy is this not the same as querying the provider console directly?
terraform state mvMove state bindings between addressesWhen might this avoid recreation during refactoring?
terraform state rmRemove an object from Terraform trackingWhy does this not delete the real object?
terraform importAssociate an existing object with a Terraform addressWhat else must exist after import for future management?
terraform providersShow provider requirements and selectionsHow can this help diagnose dependency issues?
terraform workspace listList named workspacesHow do you know which state you are targeting?
terraform workspace new/selectCreate or switch workspaceWhy can applying in the wrong workspace be dangerous?
terraform loginAuthenticate the CLI to HashiCorp services when neededWhen is a local CLI credential different from provider credentials?
terraform force-unlockClear a stuck state lock when appropriateWhy should this be used cautiously?

“Can you do this?” core skills checklist

Terraform fundamentals

  • Explain declarative configuration: desired end state, not step-by-step imperative instructions.
  • Explain why Terraform compares configuration, state, and real infrastructure.
  • Describe the difference between Terraform CLI, providers, modules, state, and backends.
  • Explain why state is required for mapping resource addresses to real objects.
  • Recognize that Terraform is not a general-purpose configuration management tool.
  • Explain idempotence in practical terms: repeated runs should converge on desired state when inputs are unchanged.
  • Describe drift and how Terraform detects proposed remediation during planning.

Configuration language and files

  • Identify .tf files as Terraform configuration files loaded together in a module directory.
  • Read HCL blocks, labels, arguments, nested blocks, expressions, and references.
  • Distinguish resource, data, variable, locals, output, module, provider, and terraform blocks.
  • Explain that file names do not define dependency order.
  • Use comments, formatting, and naming conventions to make configuration easier to review.
  • Recognize when a value is known only after apply.
  • Identify interpolation and direct references, such as var.name, local.tags, and module.network.id.

Providers

  • Explain providers as plugins that translate Terraform operations into API calls.
  • Configure required_providers with source and version constraints.
  • Explain why .terraform.lock.hcl matters for reproducible provider selections.
  • Know when to run terraform init after provider changes.
  • Explain provider authentication at a high level without hard-coding secrets.
  • Use provider aliases conceptually for multiple accounts, regions, subscriptions, projects, or endpoints.
  • Recognize provider-specific errors versus Terraform syntax errors.

Resources and data sources

  • Explain that resources are managed by Terraform.
  • Explain that data sources read existing information for use in configuration.
  • Read a resource address such as resource_type.name or module.app.resource_type.name.
  • Predict when Terraform will create, update, replace, or destroy a managed object.
  • Explain why some argument changes require replacement while others update in place.
  • Recognize that provider behavior determines many resource-specific details.

Variables, locals, and outputs

  • Define input variables with type constraints, defaults, descriptions, and validation.
  • Explain common variable value sources, including CLI flags, .tfvars, auto-loaded files, environment variables, defaults, and remote workspace variables.
  • Use locals to name computed values and reduce repetition.
  • Use outputs to expose root module or child module values.
  • Mark variables and outputs as sensitive when appropriate.
  • Explain that sensitive values can still be stored in state.
  • Troubleshoot an unset required variable.

Expressions and collection handling

  • Read string, number, bool, list, map, object, and set values.
  • Use conditionals for simple branching.
  • Understand for expressions at a reading level.
  • Explain count and for_each differences.
  • Predict why for_each with stable keys is often safer than count with list indexes.
  • Recognize common functions such as length, lookup, merge, toset, join, and templatefile at a conceptual level.
  • Identify when a value cannot be known until apply.

Dependencies and lifecycle

  • Explain implicit dependencies from references.
  • Explain when explicit depends_on is appropriate.
  • Recognize that Terraform builds a dependency graph.
  • Predict high-level create and destroy order from references.
  • Explain lifecycle behaviors such as preventing accidental destruction or creating replacements before destroying old objects.
  • Recognize when lifecycle settings can hide or complicate drift.
  • Explain replacement triggers at a concept level.

State and backends

  • Explain local state versus remote state.
  • Explain state locking and why teams need it.
  • Identify sensitive data risks in state.
  • Explain why state files should not be casually edited, copied, or committed.
  • Know the difference between removing an object from state and destroying the object.
  • Explain when state movement can support refactoring.
  • Recognize backend initialization and migration prompts.
  • Explain why backend configuration changes require care.

Modules

  • Explain root module and child module.
  • Call a module using source.
  • Pass variables into a child module.
  • Read outputs from a child module.
  • Understand local modules, registry modules, and version-pinned remote modules at a high level.
  • Explain why modules improve reuse but do not eliminate the need to understand state and providers.
  • Recognize module nesting in resource addresses.

HCP Terraform and remote workflows

  • Explain why teams use remote execution and shared workspaces.
  • Distinguish Terraform CLI local execution from remote runs.
  • Recognize VCS-driven run workflows at a high level.
  • Know that variables can be managed in remote workspaces.
  • Explain remote state, locking, run history, and collaboration benefits.
  • Recognize that provider credentials for remote runs must be available to the remote execution environment.
  • Explain that workspace names and state context matter before planning or applying.

HCL readiness checks

You do not need to memorize every provider-specific argument for the HashiCorp Certified: Terraform Associate (004) exam. You should be comfortable reading the structure and predicting Terraform behavior.

Provider and Terraform block pattern

terraform {
  required_providers {
    random = {
      source  = "hashicorp/random"
      version = "~> 3.0"
    }
  }
}

provider "random" {}

Can you explain?

  • What required_providers controls.
  • What provider source means.
  • Why version constraints matter.
  • Why terraform init is needed before planning.
  • Why provider plugins are separate from the Terraform CLI.

Variables, locals, and outputs

variable "environment" {
  type        = string
  description = "Deployment environment"

  validation {
    condition     = contains(["dev", "test", "prod"], var.environment)
    error_message = "Environment must be dev, test, or prod."
  }
}

locals {
  name_prefix = "app-${var.environment}"
}

output "prefix" {
  value = local.name_prefix
}

Can you explain?

  • When validation is evaluated.
  • Why locals can simplify repeated expressions.
  • How an output is accessed from the root module.
  • What changes if an output is marked sensitive = true.

Module call pattern

module "network" {
  source      = "./modules/network"
  environment = var.environment
}

output "network_id" {
  value = module.network.id
}

Can you explain?

  • Which directory is the root module.
  • Which directory is the child module.
  • How input variables are passed to the child module.
  • How child module outputs are exposed.
  • Why child module resources appear with module paths in state.

Multiple instances pattern

variable "names" {
  type = set(string)
}

resource "example_resource" "item" {
  for_each = var.names

  name = each.key
}

Can you explain?

  • Why for_each creates addressable instances by key.
  • Why sets and maps are commonly used with for_each.
  • How changing a key can affect resource identity.
  • How this differs from count.index.

State readiness checklist

State is one of the most tested practical concepts because it affects safety, collaboration, and troubleshooting.

State conceptWhat ready looks like
Resource addressYou can map module.web.resource_type.name[0]-style addresses to configuration structure
Object bindingYou understand state links Terraform resource addresses to real infrastructure objects
DriftYou can explain how Terraform notices remote changes during planning
Sensitive dataYou know state may contain sensitive values even when outputs are marked sensitive
LockingYou can explain why simultaneous applies can corrupt or conflict with state
Remote stateYou can explain why teams avoid unmanaged local-only state
State movementYou know state mv changes Terraform’s tracking address, not the real object
State removalYou know state rm stops tracking without destroying the object
ImportYou know import associates an existing object with Terraform state and requires matching configuration for ongoing management
Backend changesYou know backend changes require initialization and careful migration decisions

State scenario checks

ScenarioBest Terraform reasoning
A resource exists in the cloud console but not in stateTerraform does not manage it until imported or recreated through configuration
A resource is in state but removed from configurationTerraform will usually plan to destroy it
A resource is removed with terraform state rmThe real object remains, but Terraform stops tracking it
A resource block is renamedTerraform may plan destroy/create unless state is moved or a move is declared
Two users apply against the same state at the same timeLocking or remote workflow should prevent unsafe concurrent operations
A secret output is marked sensitiveCLI display may be redacted, but state still requires protection
A saved plan is applied laterIt applies the reviewed plan, but context and validity still matter

Providers and dependency lock file

Be ready to reason about provider installation and version selection.

Artifact or settingPurposeExam-style trap
required_providersDeclares provider source and version constraintsNot the same as configuring provider credentials
Provider blockConfigures provider settings such as region, endpoint, or aliasMay be optional for some providers but required for others
.terraform.lock.hclRecords selected provider versionsDeleting or ignoring it can reduce reproducibility
.terraform/ directoryLocal working directory for downloaded plugins and modulesUsually not committed as source configuration
Provider aliasAllows multiple configurations of the same providerResources must explicitly reference the alias when needed
Environment credentialsCommon way to avoid hard-coded secretsMust exist in the execution environment, local or remote

Module readiness table

Module topicYou should know
Root moduleThe current working directory where Terraform is run
Child moduleA module called by another module
Module inputA variable defined in the child and assigned by the caller
Module outputA value exposed by the child and referenced by the caller
Module sourceLocal path, registry source, or other supported source form
Module versionUsed with registry-style sources to improve repeatability
Nested modulesCan make resource addresses longer and troubleshooting more complex
Provider inheritanceChild modules can inherit or receive provider configurations depending on configuration
Reuse tradeoffModules reduce repetition but can hide complexity if poorly documented

Module self-test prompts

  • Can you identify all inputs a module requires?
  • Can you identify which outputs a module exposes?
  • Can you explain why changing a module source or version may require terraform init?
  • Can you trace a resource address inside module.network or module.app.module.database?
  • Can you explain why copying a module is different from versioning and reusing it?
  • Can you explain why a module should not rely on undeclared root variables?

Variable precedence and value-source checks

You should know that Terraform can receive variable values from multiple places. Exact precedence details are worth reviewing in your Terraform study materials, but for exam readiness you should be able to identify likely sources and troubleshoot conflicts.

SourceExampleReadiness point
Default valuedefault = "dev"Used when no other value is supplied
Variable definition fileterraform.tfvarsCommon for environment-specific values
Auto-loaded file*.auto.tfvarsLoaded automatically when present
CLI variable-var="environment=prod"Useful for explicit one-off values
CLI var file-var-file=prod.tfvarsUseful for environment selection
Environment variableTF_VAR_environment=prodUseful in automation
Remote workspace variableManaged outside local filesMust be available to remote runs

Variable traps

  • A variable declared without a default must be provided.
  • locals are not input variables.
  • Outputs do not pass values into a module; inputs do.
  • Marking a variable sensitive changes display behavior, not all storage risks.
  • tfvars files can accidentally expose secrets if committed.
  • Type constraints can reject values before provider calls happen.

Workspaces readiness

Terraform workspaces are often misunderstood. Be ready for practical questions about state context.

TopicReady explanation
Default workspaceTerraform starts with a default named workspace
Named workspaceA separate state instance for the same configuration
Workspace selectionDetermines which state the next plan/apply uses
Use caseCan separate similar environments in simple workflows
TrapWorkspaces are not a full access-control, account-boundary, or architecture strategy by themselves
Remote workspacesHCP Terraform workspaces also include collaboration and run settings concepts

Workspace safety checks

Before planning or applying, ask:

  • Which workspace am I in?
  • Which backend is configured?
  • Which variable values are being used?
  • Which provider credentials are active?
  • Which state will be modified?
  • Am I using local execution or remote execution?

HCP Terraform and collaborative workflow checks

For the HashiCorp Certified: Terraform Associate (004), be ready to reason about why an organization would use a managed Terraform workflow such as HCP Terraform.

Capability areaPractical readiness
Remote stateExplain shared state storage and team access
State lockingExplain why coordinated runs are safer than ad hoc local applies
Remote executionKnow that plans and applies can run outside the local machine
VCS integrationRecognize pull/request-driven or commit-driven run workflows conceptually
Workspace variablesUnderstand that run-time inputs and credentials can be stored in workspace settings
Run historyExplain auditability and review benefits at a high level
Private registryRecognize reusable internal modules and providers conceptually
Policy and governanceUnderstand policy checks as a control point without needing to overfit vendor-specific implementation details

Local CLI vs remote run prompt

Can you explain what changes when a run is remote?

  • The Terraform configuration still defines desired infrastructure.
  • The execution environment changes.
  • Provider credentials must be available remotely.
  • Workspace variables may replace local .tfvars.
  • State is usually managed remotely.
  • Local files not committed or uploaded may be unavailable to the remote run.
  • The plan/apply review process may be controlled by workspace settings.

Scenario and decision-point checks

If the scenario says…Think…Avoid this trap
“A team needs shared state and locking”Remote backend or HCP Terraform-style workflowDo not keep separate local state files
“Terraform says provider not installed”Run or revisit terraform initDo not jump straight to apply
“Configuration syntax is invalid”Use terraform fmt and terraform validateDo not assume it is a cloud permission problem
“Plan shows replacement”Identify which argument or lifecycle condition forces replacementDo not assume every update is in-place
“Resource renamed in code”Move state or use a move strategy to preserve bindingDo not accept destroy/create blindly
“Existing infrastructure must be managed”Import plus matching configurationImport alone is not complete management design
“Sensitive output is hidden in CLI”State still needs protectionDo not treat redaction as encryption
“Module output is needed by root”Define output in child, reference module.name.outputDo not reference child internals directly as a stable interface
“Multiple similar objects need stable identity”Prefer key-based for_each when appropriateAvoid fragile count indexes if list order changes
“Two provider configurations are needed”Provider aliases and explicit provider assignmentDo not assume one provider block covers all cases
“Plan differs between laptop and remote run”Compare variables, credentials, Terraform version, provider selections, workspace, and filesDo not assume Terraform is nondeterministic
“Apply failed halfway”Review state, provider error, and next planDo not manually edit state as a first step
“Manual console change was made”Run plan to detect drift and decide whether to accept or revertDo not assume Terraform automatically knows intent
“Need to prevent accidental deletion”Lifecycle, permissions, review process, and remote workflow controlsDo not rely on memory or naming alone
“Need different environments”Consider separate workspaces, directories, backends, variables, or accounts depending on complexityDo not treat workspaces as a complete environment strategy

Troubleshooting readiness

SymptomLikely areaFirst checks
terraform init failsBackend, provider source, network, credentials to registry or backendBackend block, provider source, connectivity, authentication
terraform validate failsHCL syntax or configuration structureMissing arguments, bad references, type errors
terraform plan fails before provider callsConfiguration evaluationVariables, expressions, unknown values, module inputs
terraform plan fails during provider refreshProvider authentication or API accessCredentials, provider config, remote object access
Plan shows unexpected destroyConfiguration removed, wrong workspace, wrong variables, state mismatchWorkspace, state, VCS diff, variable source
Plan shows replacementForce-new argument, lifecycle, resource identity changeAttribute diff, provider docs, address changes
Apply fails after partial workProvider/API error or dependency issueError output, state, next plan, remote system status
State lock errorAnother run or stale lockActive run, remote workspace, lock owner, cautious unlock
Module not foundModule source or init issueSource path, registry address, terraform init
Variable not setMissing input valueDefaults, var files, environment variables, workspace variables

Artifact checklist

ArtifactKnow what it isCommon mistake
.tfTerraform configuration filesAssuming file order controls execution
.tfvarsVariable value filesCommitting secrets
*.auto.tfvarsAutomatically loaded variable filesForgetting they affect plans
.terraform.lock.hclProvider dependency lock fileDeleting it to “fix” version issues without understanding impact
.terraform/Local working directory for initialized modules/providersTreating it as source code
terraform.tfstateLocal state file when using local stateStoring it casually or committing it
Plan fileSaved plan from terraform plan -outRe-planning later and assuming it is identical
Module directoryReusable Terraform configurationForgetting child module variable and output contracts
Backend configurationDefines where state is storedChanging it without planning migration
CLI credentials fileMay store Terraform service login tokenConfusing it with provider cloud credentials

Security and sensitive-data checks

Security questions are often practical rather than theoretical. Focus on how Terraform handles credentials, state, and review.

You should be able to explain

  • Provider credentials should not be hard-coded in .tf files.
  • Environment variables, secure variable stores, and remote workspace variables are common credential patterns.
  • Terraform state may contain sensitive values.
  • sensitive = true reduces accidental display but does not remove the value from state.
  • State access should be limited to people and systems that need it.
  • Remote execution changes where credentials must be available.
  • Module inputs can accidentally expose secrets if passed or output carelessly.
  • Version constraints and dependency locks support supply-chain predictability.
  • Review plans before applying, especially when destruction or replacement appears.

Security trap table

TrapBetter thinking
“The secret is hidden in output, so it is safe everywhere”State and logs still need review and protection
“A local plan is safe because it did not apply”Plan output can still reveal sensitive values
“Remote execution removes credential concerns”It moves credential requirements to the remote environment
“Provider alias is an access boundary”Access is controlled by credentials and platform permissions, not alias names
“State is just a cache”State is critical operational data

Refactoring, import, and drift checks

Be ready for conceptual scenarios where Terraform configuration changes but the desired real infrastructure should remain.

TaskTerraform conceptReady explanation
Rename a resource blockState move or moved declarationPreserve mapping from old address to new address
Split configuration into modulesState addresses may changePlan carefully to avoid unintended replacement
Start managing an existing objectImportImport links object to address; configuration must match desired management
Stop managing without deletingRemove from stateState removal does not destroy the real object
Accept manual change into configUpdate configuration to match intended stateDo not let drift remain unexplained
Revert manual changePlan/apply desired configurationTerraform will attempt to converge back to configuration
Force recreationReplacement-oriented workflowUnderstand replacement consequences before applying

Example moved block pattern:

moved {
  from = example_resource.old_name
  to   = example_resource.new_name
}

Can you explain?

  • Why this is different from deleting one block and creating another.
  • How it helps Terraform understand address changes.
  • Why you still need to review the plan.

Common weak areas and traps

Weak areaWhy candidates miss itFinal-review fix
init vs plan vs applyCommands are memorized but not understoodExplain what each command changes locally, remotely, and in state
State purposeState is treated as a simple output filePractice mapping resource addresses to real objects
Sensitive valuesRedaction is confused with encryptionReview where values can appear: config, variables, plan, logs, state
Variable sourcesCandidates know variables but not how values arriveTrace a value from declaration to final plan
count vs for_eachBoth create multiple instancesFocus on resource identity and address stability
Module outputsCandidates try to reach into child module internalsUse declared outputs as module interface
Provider aliasesAlias is configured but not attached to resources/modulesCheck explicit provider mapping where needed
Saved plansCandidates plan once, then apply a different planKnow why plan -out can matter
WorkspacesTreated as full environment isolationRemember workspace primarily selects state context
ImportViewed as automatic configuration generationImport associates state; configuration still matters
DriftManual changes are ignored conceptuallyUse plan to identify and decide how to handle drift
Lifecycle rulesUsed as magic safety switchesUnderstand side effects, especially ignored changes and create-before-destroy
Backend migrationBackend change treated as a normal editKnow that state location changes are operationally sensitive
Provider lock fileIgnored as generated noiseUnderstand reproducible provider selection
Remote executionAssumed to behave exactly like a laptopCheck files, variables, credentials, workspace, and execution context

Mini practice prompts

Use these prompts during final review. If you cannot answer quickly, revisit the related topic.

  1. A teammate changed a resource name in Terraform code, and the plan now shows destroy/create. What Terraform concepts could prevent unnecessary replacement?
  2. A plan succeeds locally but fails in HCP Terraform. What differences should you check?
  3. A variable has a default, a .tfvars value, and an environment value. How would you investigate the value used in the plan?
  4. A secret output is marked sensitive. Where might the secret still exist?
  5. A module needs to expose a generated ID to the root module. What must be declared?
  6. A resource exists in the cloud console but not in Terraform state. What are the options?
  7. A team accidentally applied in the wrong workspace. What did the workspace control?
  8. A provider upgrade changes the plan unexpectedly. Which files and settings should you inspect?
  9. A plan shows -/+ replacement. What should you look for before approving?
  10. A state lock is stuck. Why is force-unlocking risky?

Final-week checklist

Seven days out

  • Rebuild your command map: fmt, init, validate, plan, apply, destroy, show, output, state, workspace.
  • Review provider source, version constraint, and lock-file behavior.
  • Practice reading small HCL snippets without running them.
  • Review state concepts: binding, drift, locking, import, move, remove, backend.
  • Review module inputs, outputs, source, versioning, and nested addresses.

Three to four days out

  • Work through scenario questions about wrong workspace, wrong variables, provider errors, and unexpected replacement.
  • Compare local and remote execution workflows.
  • Review sensitive data handling and where secrets can appear.
  • Practice identifying whether a problem is syntax, initialization, provider authentication, state, or remote API behavior.
  • Revisit count vs for_each and implicit vs explicit dependencies.

Final day

  • Do not cram provider-specific service details at the expense of Terraform fundamentals.
  • Review the normal workflow from configuration change to state update.
  • Review common command flags only where they change workflow meaning, such as saved plans.
  • Review what Terraform does not do: it does not automatically secure state, infer business intent, or manage resources absent from state unless imported or declared.
  • Practice explaining each major topic aloud in one or two sentences.

Readiness scorecard

Use this as a quick go/no-go review before more practice.

SkillGreenYellowRed
CLI workflowYou can choose commands from scenariosYou know commands but mix up effectsYou rely on memorized order only
HCL readingYou can predict references and valuesYou understand blocks but struggle with expressionsYou cannot trace variables or outputs
ProvidersYou understand source, version, init, aliases, credentialsYou know providers but not lock-file behaviorYou confuse providers with resources
StateYou can reason about drift, import, move, remove, lockingYou know state exists but avoid scenariosYou treat state as optional
ModulesYou can trace inputs, outputs, and addressesYou can call modules but struggle with outputsYou confuse root and child module scope
WorkspacesYou check workspace before plan/applyYou know commands but not risksYou treat workspaces as full isolation
Remote workflowYou can compare local and HCP Terraform runsYou know remote state but not remote execution detailsYou assume laptop context always applies
SecurityYou protect credentials and stateYou know sensitive but overtrust itYou commit or expose secrets in examples
TroubleshootingYou classify errors by workflow stageYou can fix simple syntax onlyYou guess randomly from error messages

Practical next step

Pick one weak area from the scorecard and do a focused practice loop: read a small Terraform configuration, predict the plan behavior, identify the state impact, and explain which command you would run next. Then move into exam-style practice questions for the HashiCorp Certified: Terraform Associate (004) until your misses are concentrated in only one or two reviewable topics.