Bird
Raised Fist0
Terraformcloud~10 mins

Module structure and conventions in Terraform - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to define a Terraform module source path.

Terraform
module "example" {
  source = "[1]"
}
Drag options to blanks, or click blank then click option'
Aterraform-example
Bexample-module
C./modules/example
D/modules/example
Attempts:
3 left
💡 Hint
Common Mistakes
Using just the module name without a path.
Starting the path with a slash which makes it absolute instead of relative.
2fill in blank
medium

Complete the code to declare a variable inside a Terraform module.

Terraform
variable "region" {
  type    = string
  default = "[1]"
}
Drag options to blanks, or click blank then click option'
Aus-east-1
Bregion-1
Cdefault-region
Dus-west-2
Attempts:
3 left
💡 Hint
Common Mistakes
Using invalid or placeholder strings that are not real regions.
Leaving the default empty or missing.
3fill in blank
hard

Fix the error in the module output declaration.

Terraform
output "instance_id" {
  value = [1]
}
Drag options to blanks, or click blank then click option'
Aexample.id
Baws_instance.example
Cinstance.id
Daws_instance.example.id
Attempts:
3 left
💡 Hint
Common Mistakes
Referencing the resource without the attribute.
Using incomplete or incorrect resource names.
4fill in blank
hard

Fill both blanks to create a module call with a variable and output.

Terraform
module "web_server" {
  source = "[1]"
  region = var.[2]
}
Drag options to blanks, or click blank then click option'
A./modules/webserver
Bregion
Cwebserver
D./webserver
Attempts:
3 left
💡 Hint
Common Mistakes
Using incorrect source paths.
Passing variables without the var. prefix.
5fill in blank
hard

Fill all three blanks to define a module with variables and outputs correctly.

Terraform
module "db" {
  source = "[1]"
  db_name = var.[2]
  db_port = var.[3]
}
Drag options to blanks, or click blank then click option'
A./modules/database
Bname
Cport
D./database
Attempts:
3 left
💡 Hint
Common Mistakes
Using incorrect source paths.
Mismatching variable names between module and call.

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