0
0
Terraformcloud~10 mins

Module structure and conventions in Terraform - Step-by-Step Execution

Choose your learning style9 modes available
Process Flow - Module structure and conventions
Create module folder
Add main.tf, variables.tf, outputs.tf
Define resources in main.tf
Declare input variables in variables.tf
Declare outputs in outputs.tf
Use module block in root configuration
Pass variables to module
Run terraform init and apply
This flow shows how to organize a Terraform module with standard files, define inputs and outputs, and use the module in a root configuration.
Execution Sample
Terraform
module "example" {
  source = "./modules/example"
  instance_count = 2
}

output "instance_ids" {
  value = module.example.instance_ids
}
This code uses a module named 'example' from a local folder, passing an input variable and exposing an output.
Process Table
StepActionFile AffectedDetailsResult
1Create module foldermodules/example/New folder created for moduleFolder ready for module files
2Add main.tfmodules/example/main.tfDefine resources like aws_instanceResources defined
3Add variables.tfmodules/example/variables.tfDeclare input variables like instance_countInputs declared
4Add outputs.tfmodules/example/outputs.tfDeclare outputs like instance_idsOutputs declared
5Use module blockroot configurationReference module with source and inputsModule block ready
6Run terraform initroot folderInitialize modules and providersModules downloaded and initialized
7Run terraform applyroot folderApply configuration and create resourcesResources created, outputs available
8Access outputroot folderUse output value from moduleOutput instance_ids available
9Exit-All steps completed successfullyInfrastructure deployed
💡 All module structure steps completed and infrastructure deployed successfully
Status Tracker
VariableStartAfter Step 5After Step 7Final
instance_countundefined2 (passed to module)2 (used to create resources)2
instance_idsundefinedundefinedlist of created instance IDslist of created instance IDs
Key Moments - 3 Insights
Why do we separate variables.tf, main.tf, and outputs.tf in a module?
Separating these files helps organize inputs, resource definitions, and outputs clearly, as shown in steps 2-4 of the execution_table.
How does the root configuration pass values to the module?
The root configuration uses a module block with input variables assigned, like instance_count=2 in step 5, which the module uses to create resources.
How do outputs from the module become accessible in the root?
Outputs declared in outputs.tf (step 4) are exposed via module.<name>.<output> syntax in the root, as seen in step 8.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, at which step are input variables declared inside the module?
AStep 3
BStep 2
CStep 5
DStep 7
💡 Hint
Check the 'File Affected' column for variables.tf in the execution_table.
According to variable_tracker, what is the value of instance_count after step 7?
Alist of instance IDs
B2
Cundefined
D0
💡 Hint
Look at the 'After Step 7' column for instance_count in variable_tracker.
If you forget to declare outputs in outputs.tf, what happens when you try to access module outputs in the root?
AOutputs are accessible but empty
BTerraform creates outputs automatically
CTerraform shows an error that output does not exist
DTerraform ignores the module
💡 Hint
Refer to key_moments about how outputs declared in outputs.tf become accessible.
Concept Snapshot
Terraform modules are organized in folders with main.tf for resources,
variables.tf for inputs, and outputs.tf for outputs.
Root configurations use module blocks to call modules,
passing variables and accessing outputs.
This structure keeps code clean and reusable.
Full Transcript
This visual execution shows how to structure a Terraform module with separate files for resources, inputs, and outputs. First, create a module folder and add main.tf, variables.tf, and outputs.tf files. Define resources in main.tf, declare input variables in variables.tf, and outputs in outputs.tf. Then, in the root configuration, use a module block to reference the module folder and pass input variables. Running terraform init downloads and initializes the module. Terraform apply creates the resources using the inputs. Outputs declared in the module become accessible in the root via module.<name>.<output>. Variables like instance_count start undefined, get assigned when passed to the module, and are used to create resources. Outputs like instance_ids become available after apply. This modular approach organizes code and enables reuse.