📖 Scenario: You are managing cloud infrastructure using Terraform. You want to create reusable code blocks to deploy virtual machines with consistent settings across different projects.
🎯 Goal: Build a Terraform module for a virtual machine and reuse it twice with different names and IP addresses.
📋 What You'll Learn
Create a Terraform module with variables for VM name and IP address
Use the module twice in the main configuration with different inputs
Output the VM names from the module instances
💡 Why This Matters
🌍 Real World
Cloud engineers use Terraform modules to reuse infrastructure code for similar resources across projects, saving time and reducing errors.
💼 Career
Understanding modules is essential for infrastructure as code roles, enabling scalable and maintainable cloud deployments.
Progress0 / 4 steps
1
Create a Terraform module with variables
Create a Terraform module folder named vm_module. Inside it, create a file main.tf that defines a resource aws_instance with the name set to the variable vm_name and private IP set to the variable vm_ip. Also create a variables.tf file defining the variables vm_name and vm_ip as strings.
Terraform
Hint
Define variables in variables.tf and use them in main.tf inside the module folder.
2
Add module usage in main Terraform configuration
In the root Terraform configuration, create a file main.tf. Add two module blocks named vm1 and vm2 that use the vm_module source. Set vm_name to "web-server-1" and vm_ip to "10.0.1.10" for vm1. Set vm_name to "web-server-2" and vm_ip to "10.0.1.11" for vm2.
Terraform
Hint
Use module "name" { source = "./vm_module" ... } blocks to reuse the module with different inputs.
3
Add outputs in the module
Inside the vm_module folder, create a file outputs.tf. Add an output named vm_name_output that outputs the tag Name of the aws_instance.vm resource.
Terraform
Hint
Outputs allow you to expose values from modules. Use output "name" { value = ... }.
4
Output module instance names in root configuration
In the root main.tf, add two outputs named vm1_name and vm2_name. Set their values to the outputs vm_name_output from the modules vm1 and vm2 respectively.
Terraform
Hint
Use output "name" { value = module.module_name.output_name } to expose module outputs.
Practice
(1/5)
1. What is the main benefit of using modules in Terraform?
easy
A. They let you reuse code to save time and reduce errors
B. They increase the cost of cloud resources
C. They make Terraform run slower
D. They prevent you from customizing infrastructure
Solution
Step 1: Understand what modules do
Modules are reusable pieces of Terraform code that you can use multiple times.
Step 2: Identify the main benefit
Using modules saves time and reduces errors by avoiding repeated code.
Final Answer:
They let you reuse code to save time and reduce errors -> Option A
Quick Check:
Modules = Reusability and error reduction [OK]
Hint: Modules = reusable code blocks to save time [OK]
Common Mistakes:
Thinking modules increase costs
Believing modules slow down Terraform
Assuming modules prevent customization
2. Which syntax correctly calls a module named network in Terraform?
easy
A. resource "module" "network" { source = "./network" }
B. module "network" { source = "./network" }
C. module network { source = ./network }
D. resource "network" { source = "./network" }
Solution
Step 1: Recall module block syntax
Modules are called using the module "name" { ... } block syntax.
Step 2: Check the correct usage
module "network" { source = "./network" } uses the correct syntax with quotes around the module name and source path.
Final Answer:
module "network" { source = "./network" } -> Option B