Bird
Raised Fist0
Terraformcloud~20 mins

Module structure and conventions in Terraform - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Terraform Module Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Understanding Terraform Module Inputs

Which of the following correctly describes how to define an input variable in a Terraform module?

Aparameter "region" { default = "us-west-1" }
Binput "region" { type = string default = "us-west-1" }
Cvar region = "us-west-1"
Dvariable "region" { type = string default = "us-west-1" }
Attempts:
2 left
💡 Hint

Terraform uses a specific block keyword to declare variables.

❓ Configuration
intermediate
2:00remaining
Correct Output Declaration in Terraform Module

Which option correctly defines an output named instance_ip in a Terraform module?

Aoutput instance_ip = aws_instance.web.private_ip
Boutput "instance_ip" { value = aws_instance.web.private_ip }
Coutput "instance_ip" = aws_instance.web.private_ip
Doutput { name = "instance_ip" value = aws_instance.web.private_ip }
Attempts:
2 left
💡 Hint

Outputs use a block with a name and a value attribute.

❓ Architecture
advanced
2:30remaining
Best Practice for Module Directory Structure

Which directory structure follows Terraform best practices for a reusable module named network?

A
network/
  main.tf
  variables.tf
  outputs.tf
  README.md
B
network/
  network.tf
  inputs.tf
  results.tf
  docs.md
C
network/
  main.tf
  vars.tf
  outs.tf
  README.md
D
network/
  terraform.tf
  variables.tf
  outputs.tf
  README.md
Attempts:
2 left
💡 Hint

Look for standard file names used in Terraform modules.

❓ security
advanced
2:00remaining
Handling Sensitive Variables in Terraform Modules

Which option correctly marks a variable as sensitive in a Terraform module to avoid showing its value in logs?

Avariable "db_password" { type = string private = true }
Bvariable "db_password" { type = string hidden = true }
Cvariable "db_password" { type = string sensitive = true }
Dvariable "db_password" { type = string secret = true }
Attempts:
2 left
💡 Hint

Terraform uses a specific attribute to mark variables as sensitive.

❓ service_behavior
expert
3:00remaining
Effect of Module Source Changes on Terraform State

You update the source attribute of a Terraform module to point to a new version. What happens to the existing resources managed by the old module version when you run terraform apply?

ATerraform treats the new module as a separate resource set and plans to create new resources while keeping old ones unless explicitly destroyed.
BTerraform ignores the source change and continues using the old module version until manually refreshed.
CTerraform deletes all old resources immediately before applying the new module changes.
DTerraform automatically updates existing resources in place to match the new module source without recreating them.
Attempts:
2 left
💡 Hint

Think about how Terraform tracks resources and modules in state files.

Practice

(1/5)
1. What is the main purpose of using a Terraform module?
easy
A. To group and reuse cloud resource configurations
B. To write scripts for cloud providers
C. To store cloud provider credentials
D. To monitor cloud resource usage

Solution

  1. Step 1: Understand module purpose

    Terraform modules are designed to group related cloud resources together for reuse and better organization.
  2. Step 2: Compare options

    Only To group and reuse cloud resource configurations correctly describes this purpose. Other options describe unrelated tasks.
  3. Final Answer:

    To group and reuse cloud resource configurations -> Option A
  4. Quick Check:

    Module purpose = reuse and grouping [OK]
Hint: Modules group resources for reuse and clarity [OK]
Common Mistakes:
  • Confusing modules with scripts
  • Thinking modules store credentials
  • Assuming modules monitor usage
2. Which of the following is the correct way to call a module named network located in a folder modules/network?
easy
A. module "network" { source = "modules/network" }
B. resource "network" { source = "modules/network" }
C. module network { path = "modules/network" }
D. resource "network" { path = "modules/network" }

Solution

  1. Step 1: Identify module call syntax

    Terraform uses module "name" { source = "path" } to call modules.
  2. Step 2: Check options

    Only module "network" { source = "modules/network" } uses correct module block and source attribute.
  3. Final Answer:

    module "network" { source = "modules/network" } -> Option A
  4. Quick Check:

    Module call uses module block and source [OK]
Hint: Use module block with source attribute for calling modules [OK]
Common Mistakes:
  • Using resource instead of module
  • Using path instead of source
  • Omitting quotes around module name
3. Given this module folder structure:
modules/
  webserver/
    main.tf
    variables.tf
    outputs.tf
What is the purpose of the variables.tf file inside the module?
medium
A. To declare output values from the module
B. To define input variables for the module
C. To write the main resource definitions
D. To store provider configurations

Solution

  1. Step 1: Understand file roles in module

    In Terraform modules, variables.tf defines input variables the module accepts.
  2. Step 2: Match options

    To define input variables for the module correctly states this. Outputs are in outputs.tf, main resources in main.tf, and provider configs are outside modules.
  3. Final Answer:

    To define input variables for the module -> Option B
  4. Quick Check:

    variables.tf = input variables [OK]
Hint: variables.tf defines inputs; outputs.tf defines outputs [OK]
Common Mistakes:
  • Confusing variables.tf with outputs.tf
  • Putting resource code in variables.tf
  • Adding provider config inside module
4. You wrote this module call:
module "db" {
  source = "modules/database"
  db_name = "prod"
}
But Terraform shows an error: "Unsupported argument: db_name". What is the likely cause?
medium
A. The source path is incorrect
B. Module names cannot contain underscores
C. The module does not declare an input variable named db_name
D. db_name should be declared inside main.tf

Solution

  1. Step 1: Understand error meaning

    "Unsupported argument" means the module does not expect the given input variable.
  2. Step 2: Check module inputs

    If db_name is not declared as a variable in the module's variables.tf, Terraform rejects it.
  3. Final Answer:

    The module does not declare an input variable named db_name -> Option C
  4. Quick Check:

    Input variables must be declared to be used [OK]
Hint: Declare input variables in module to avoid unsupported argument errors [OK]
Common Mistakes:
  • Assuming source path causes unsupported argument
  • Thinking module names restrict underscores
  • Trying to declare inputs inside main.tf
5. You want to create a reusable module for deploying a virtual machine with optional tags. Which structure correctly supports optional tags with a default empty map?
hard
A. In variables.tf: variable "tags" { type = list(string) }
B. In main.tf: variable "tags" { default = null }
C. In outputs.tf: output "tags" { value = var.tags }
D. In variables.tf: variable "tags" { type = map(string) default = {} }

Solution

  1. Step 1: Define optional input variable

    To make tags optional, define a variable with type map(string) and default empty map {}.
  2. Step 2: Evaluate options

    In variables.tf: variable "tags" { type = map(string) default = {} } correctly defines this in variables.tf. In main.tf: variable "tags" { default = null } lacks type and uses null default. In outputs.tf: output "tags" { value = var.tags } is output, not input. In variables.tf: variable "tags" { type = list(string) } uses list instead of map.
  3. Final Answer:

    In variables.tf: variable "tags" { type = map(string) default = {} } -> Option D
  4. Quick Check:

    Optional map variable needs default empty map [OK]
Hint: Use map(string) with default {} for optional tags [OK]
Common Mistakes:
  • Using list instead of map for tags
  • Not setting a default value
  • Declaring variables in outputs.tf
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard