Bird
Raised Fist0
Terraformcloud~10 mins

Module versioning 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 specify the module source version.

Terraform
module "network" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "[1]"
}
Drag options to blanks, or click blank then click option'
A"1.2"
B"latest"
C"v1"
D"3.0.0"
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'latest' as a version string
Omitting quotes around the version number
2fill in blank
medium

Complete the code to pin the module version to a specific release.

Terraform
module "storage" {
  source  = "terraform-aws-modules/s3-bucket/aws"
  version = "[1]"
}
Drag options to blanks, or click blank then click option'
A"latest"
B">= 1.0.0"
C"~> 2.5.0"
D"2"
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'latest' which is invalid
Using only a major version without constraint operator
3fill in blank
hard

Fix the error in the module version specification.

Terraform
module "compute" {
  source  = "terraform-aws-modules/ec2-instance/aws"
  version = [1]
}
Drag options to blanks, or click blank then click option'
A"1.4.0"
B1.4.0
C"latest"
Dlatest
Attempts:
3 left
💡 Hint
Common Mistakes
Not quoting the version string
Using 'latest' without quotes
4fill in blank
hard

Fill both blanks to specify a module with a version constraint and a source registry.

Terraform
module "database" {
  source  = "[1]"
  version = "[2]"
}
Drag options to blanks, or click blank then click option'
Aterraform-aws-modules/rds/aws
B1.0.0
C~> 3.2.1
Daws-modules/rds
Attempts:
3 left
💡 Hint
Common Mistakes
Using incomplete source paths
Using exact version instead of constraint
5fill in blank
hard

Fill all three blanks to define a module with a Git source and a specific ref version.

Terraform
module "app" {
  source = "git::https://github.com/terraform-modules/app.git?ref=[1]"
  version = "[2]"
  providers = { aws = [3] }
}
Drag options to blanks, or click blank then click option'
Av1.2.3
B1.2.3
Caws.default
Daws.main
Attempts:
3 left
💡 Hint
Common Mistakes
Omitting 'v' in the Git ref
Using wrong provider alias

Practice

(1/5)
1. What is the main purpose of specifying a version when using a Terraform module from a registry?
easy
A. To speed up Terraform plan execution
B. To enable local module usage
C. To automatically update the module to the latest version
D. To keep your infrastructure stable by locking the module version

Solution

  1. Step 1: Understand module versioning purpose

    Specifying a version locks the module to a specific release, preventing unexpected changes.
  2. Step 2: Compare options

    Only locking the version ensures stability; automatic updates or speed improvements are not guaranteed by versioning.
  3. Final Answer:

    To keep your infrastructure stable by locking the module version -> Option D
  4. Quick Check:

    Module versioning = Stability [OK]
Hint: Version locks module to prevent unexpected changes [OK]
Common Mistakes:
  • Thinking version speeds up execution
  • Assuming version auto-updates modules
  • Confusing local modules with versioned modules
2. Which of the following is the correct syntax to specify a module version from the Terraform Registry?
easy
A. module "example" { source = "registry/module" version = "1.2.0" }
B. module "example" { source = "registry/module" ver = "1.2.0" }
C. module "example" { source = "registry/module" version: "1.2.0" }
D. module "example" { source = "registry/module" v = "1.2.0" }

Solution

  1. Step 1: Recall correct version attribute

    The correct attribute to specify module version is version with an equals sign.
  2. Step 2: Check syntax correctness

    module "example" { source = "registry/module" version = "1.2.0" } uses correct attribute and syntax; others use incorrect attribute names or syntax.
  3. Final Answer:

    module "example" { source = "registry/module" version = "1.2.0" } -> Option A
  4. Quick Check:

    Correct attribute is version = "x.y.z" [OK]
Hint: Use 'version = "x.y.z"' exactly for module versions [OK]
Common Mistakes:
  • Using 'ver' or 'v' instead of 'version'
  • Using colon instead of equals sign
  • Omitting quotes around version number
3. Given this Terraform module block:
module "network" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "3.0.0"
}

What happens if a newer version 3.1.0 is released and you run terraform init without changing the version?
medium
A. Terraform upgrades the module to version 3.1.0 automatically
B. Terraform uses version 3.0.0 and does not upgrade automatically
C. Terraform throws an error about version mismatch
D. Terraform ignores the version and uses the latest

Solution

  1. Step 1: Understand version locking behavior

    Specifying version "3.0.0" locks the module to that exact version.
  2. Step 2: Effect of terraform init

    Running terraform init downloads the locked version; it does not upgrade unless version is changed.
  3. Final Answer:

    Terraform uses version 3.0.0 and does not upgrade automatically -> Option B
  4. Quick Check:

    Locked version stays fixed until changed [OK]
Hint: Locked version stays fixed unless manually updated [OK]
Common Mistakes:
  • Assuming terraform init upgrades modules automatically
  • Expecting errors on version mismatch
  • Thinking latest version is always used
4. You have this module block:
module "db" {
  source = "git::https://github.com/example/db-module.git"
}

You want to use a specific version tag v1.4.2. What is missing?
medium
A. Add tag = "v1.4.2" inside the block
B. Add version = "v1.4.2" inside the block
C. Add ?ref=v1.4.2 to the source URL
D. Nothing, it uses latest by default

Solution

  1. Step 1: Understand versioning for Git modules

    Git modules use URL query parameter ?ref= to specify version or tag.
  2. Step 2: Identify correct way to specify tag

    Adding ?ref=v1.4.2 to source URL locks module to that tag.
  3. Final Answer:

    Add ?ref=v1.4.2 to the source URL -> Option C
  4. Quick Check:

    Git module version = source URL + ?ref=tag [OK]
Hint: Use ?ref=tag in Git source URL for versioning [OK]
Common Mistakes:
  • Using version attribute for Git modules
  • Using tag attribute which does not exist
  • Assuming latest is always used without specifying ref
5. You have a local module at ./modules/app and a remote module from the registry. You want to ensure only the remote module uses versioning. How should you configure the modules?
hard
A. Specify version only for the remote module; omit for local module
B. Specify version for both local and remote modules
C. Specify version only for the local module
D. Omit version for both modules

Solution

  1. Step 1: Recall versioning rules for local modules

    Local modules do not support versioning; version attribute is ignored or causes error.
  2. Step 2: Apply version only to remote modules

    Only remote modules from registries or Git support versioning and require version locking.
  3. Final Answer:

    Specify version only for the remote module; omit for local module -> Option A
  4. Quick Check:

    Version only for remote modules [OK]
Hint: Version attribute only for remote modules, never local [OK]
Common Mistakes:
  • Adding version to local modules causing errors
  • Omitting version for remote modules causing instability
  • Confusing local and remote module versioning rules
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