Bird
Raised Fist0
Terraformcloud~5 mins

Module outputs in Terraform - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a module output in Terraform?
A module output is a way to expose values from a Terraform module so that they can be used by the root module or other modules. It acts like a window to see important information from inside the module.
Click to reveal answer
beginner
How do you define an output in a Terraform module?
You define an output using the output block with a name and a value. For example:
output "instance_ip" {
value = aws_instance.example.public_ip
}
Click to reveal answer
beginner
Why should you use outputs in Terraform modules?
Outputs help share important information like IP addresses, IDs, or URLs from a module to other parts of your configuration or to users. This makes your infrastructure easier to connect and manage.
Click to reveal answer
beginner
How do you access a module output in the root module?
You access it using the syntax module.<module_name>.<output_name>. For example, if your module is called webserver and output is instance_ip, you use module.webserver.instance_ip.
Click to reveal answer
intermediate
Can module outputs be sensitive? How do you mark them?
Yes, outputs can be marked as sensitive by adding sensitive = true inside the output block. This hides the value from Terraform's normal output to protect secrets.
Click to reveal answer
What is the purpose of an output block in a Terraform module?
ATo expose values from the module for use elsewhere
BTo define variables inside the module
CTo create resources in the module
DTo delete resources after deployment
How do you reference an output named 'db_password' from a module called 'database'?
Avar.database.db_password
Bmodule.database.db_password
Coutput.database.db_password
Dresource.database.db_password
Which keyword marks an output as sensitive in Terraform?
Asensitive = true
Bhidden = true
Cprivate = true
Dsecret = true
What happens if you do not define outputs in a module?
AOutputs are automatically created
BTerraform will throw an error
CYou cannot access any values from the module externally
DThe module will not create resources
Which of the following is a valid output block in Terraform?
Aoutput name = var.name
Boutput name { value = var.name }
Coutput "name" = var.name
Doutput "name" { value = var.name }
Explain how Terraform module outputs help in connecting different parts of infrastructure.
Think about how you share important info from one part to another.
You got /4 concepts.
    Describe how to define and use a sensitive output in a Terraform module.
    Consider how to hide passwords or keys in outputs.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of output blocks in a Terraform module?
      easy
      A. To share information from inside the module to the outside
      B. To define variables that the module accepts
      C. To create resources inside the module
      D. To delete resources after deployment

      Solution

      1. Step 1: Understand the role of output blocks

        Output blocks are used to expose values from a module so other parts of the Terraform configuration can use them.
      2. Step 2: Differentiate outputs from variables and resources

        Variables are inputs to modules, resources create infrastructure, outputs share info outwards.
      3. Final Answer:

        To share information from inside the module to the outside -> Option A
      4. Quick Check:

        Outputs = share info outside module [OK]
      Hint: Outputs pass info out of modules, variables bring info in [OK]
      Common Mistakes:
      • Confusing outputs with variables
      • Thinking outputs create resources
      • Assuming outputs delete resources
      2. Which of the following is the correct syntax to define an output named instance_ip in a Terraform module?
      easy
      A. output "instance_ip" : aws_instance.example.public_ip
      B. output instance_ip = aws_instance.example.public_ip
      C. output "instance_ip" { value = aws_instance.example.public_ip }
      D. output { instance_ip = aws_instance.example.public_ip }

      Solution

      1. Step 1: Recall Terraform output block syntax

        Outputs use the keyword output followed by the name in quotes, then a block with value = ....
      2. Step 2: Match syntax to options

        output "instance_ip" { value = aws_instance.example.public_ip } matches the correct syntax: output "name" { value = ... }.
      3. Final Answer:

        output "instance_ip" { value = aws_instance.example.public_ip } -> Option C
      4. Quick Check:

        Output block = output "name" { value = ... } [OK]
      Hint: Outputs need quotes and value assignment inside braces [OK]
      Common Mistakes:
      • Missing quotes around output name
      • Using equals sign outside block
      • Incorrect colon or braces placement
      3. Given this module output block:
      output "bucket_name" {
        value = aws_s3_bucket.my_bucket.id
      }

      And this root module code:
      module "storage" {
        source = "./modules/s3"
      }
      
      output "name" {
        value = module.storage.bucket_name
      }

      What will be the value of the root module's name output after applying?
      medium
      A. The name of the S3 bucket resource type
      B. Null because the module output is not defined
      C. An error because outputs cannot be nested
      D. The ID of the S3 bucket created by the module

      Solution

      1. Step 1: Understand module output propagation

        The module outputs the bucket's ID as bucket_name. The root module accesses it via module.storage.bucket_name.
      2. Step 2: Confirm root output value

        The root output name simply passes through the module's output value, so it will be the bucket ID.
      3. Final Answer:

        The ID of the S3 bucket created by the module -> Option D
      4. Quick Check:

        Root output = module output value [OK]
      Hint: Root outputs can reference module outputs directly [OK]
      Common Mistakes:
      • Thinking outputs cannot be nested or chained
      • Confusing bucket ID with resource type name
      • Assuming output is null if not explicitly set in root
      4. You have this output block inside a module:
      output "subnet_id" {
        value = aws_subnet.example
      }

      Why is this incorrect for outputting the subnet ID?
      medium
      A. The output value should reference a specific attribute, like aws_subnet.example.id
      B. Output blocks cannot reference resources directly
      C. The output name cannot be "subnet_id"
      D. The module source path is missing

      Solution

      1. Step 1: Check output value correctness

        To output the subnet ID, the value must reference a specific attribute like aws_subnet.example.id, not the whole resource object.
      2. Step 2: Identify correct attribute to output

        For subnet ID, use aws_subnet.example.id instead of the resource itself.
      3. Final Answer:

        The output value should reference a specific attribute, like aws_subnet.example.id -> Option A
      4. Quick Check:

        Output value = resource attribute, not resource object [OK]
      Hint: Always output resource attributes, not whole resources [OK]
      Common Mistakes:
      • Outputting entire resource instead of attribute
      • Wrong output block name
      • Ignoring module source configuration
      5. You want to create a module that outputs a list of public IPs from multiple instances it creates. Which output block correctly returns this list?
      hard
      A. output "public_ips" { value = aws_instance.example[0].public_ip }
      B. output "public_ips" { value = [for inst in aws_instance.example : inst.public_ip] }
      C. output "public_ips" { value = aws_instance.example[*].id }
      D. output "public_ips" { value = aws_instance.example }

      Solution

      1. Step 1: Understand how to output multiple values

        When multiple instances exist, use a for-expression to collect their public IPs into a list.
      2. Step 2: Match correct syntax for list output

        output "public_ips" { value = [for inst in aws_instance.example : inst.public_ip] } uses a for-expression to extract public_ip from each instance correctly.
      3. Final Answer:

        output "public_ips" { value = [for inst in aws_instance.example : inst.public_ip] } -> Option B
      4. Quick Check:

        Use for-expression to output lists from multiple resources [OK]
      Hint: Use for-expressions to gather attributes from multiple resources [OK]
      Common Mistakes:
      • Outputting single attribute from multiple instances without list
      • Using wrong attribute like id instead of public_ip
      • Outputting entire resource object
      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