📘 What is a Terraform Module?
In Terraform, a module is a container for multiple resources that are used together.
👉 Simple definition:
A module = reusable Terraform code block
- Root module → main configuration
- Child module → reusable components
🎯 Why Use Modules?
- Reusability (write once, use many times)
- Standardization across environments
- Cleaner and organized code
- Easy scaling for large infrastructure
☁️ Azure Use Case
Using AzureRM Provider, you can create reusable modules for:
- Resource Groups
- Virtual Networks
- Storage Accounts
- AKS Clusters
📁 Project Structure
/home/user/tfmodule
│
├── provider.tf
├── m_imp_rg.tf
└── modules/
└── rg/
├── rg.tf
├── variable.tf
└── output.tf⚙️ Module Code (Resource Group)
📌 modules/rg/rg.tf
resource "azurerm_resource_group" "rg" {
name = var.rg_name
location = var.rg_location
tags = {
environment = "Dev"
}
}📌 modules/rg/variable.tf
variable "rg_name" {
default = "demo_rg"
}
variable "rg_location" {
default = "eastus"
}📌 modules/rg/output.tf
output "rg_output" {
value = azurerm_resource_group.rg
}👉 This output exposes the resource group details to the root module.
🧩 Root Module Usage
📌 provider.tf
provider "azurerm" {
features {}
}📌 m_imp_rg.tf
module "prj_001_rg" {
source = "./modules/rg"
rg_name = "mydemorg"
rg_location = "eastus"
}
module "prj_002_rg" {
source = "./modules/rg"
rg_name = "mydemorg2"
rg_location = "eastus"
}👉 Same module reused twice → creates two resource groups
📤 Access Module Output
output "myoutput" {
value = module.prj_001_rg.rg_output
}👉 Syntax:
module.<module_name>.<output_name>🔎 What Happens Here?
- Module
rgis defined once - Called multiple times with different inputs
- Each call creates a separate Azure Resource Group
- Outputs allow sharing values
💡 Real-World Benefits
- Create 10+ resource groups using one module
- Maintain consistency across environments
- Reduce duplication and errors
- Faster deployments
🧠 Best Practices
- Keep modules small and focused
- Use variables for flexibility
- Expose only required outputs
- Follow naming conventions
- Store modules in version-controlled repos
🎓 Learn with EduArn
At Eduarn, we teach real-world DevOps using:
- Terraform
- Azure cloud projects
- Hands-on labs and corporate scenarios
✔ Retail training (individual learners)
✔ Corporate training (team upskilling)
🚀 Final Thoughts
Terraform modules are the foundation of scalable infrastructure design.
If you're not using modules yet, you're:
❌ Writing duplicate code
❌ Increasing risk
❌ Slowing down deployments
👉 Start modularizing today and build like a pro DevOps engineer.
#Terraform #Azure #DevOps #InfrastructureAsCode #TerraformModules #CloudComputing #EduArn
Copy Pest code:
#!/bin/bash
# Create directory structure
mkdir -p tfmodule/modules/rg
cd tfmodule || exit
# Create provider.tf
cat <<EOF > provider.tf
provider "azurerm" {
features {}
}
EOF
# Create main module usage file
cat <<EOF > m_imp_rg.tf
module "prj_001_rg" {
source = "./modules/rg"
rg_name = "mydemorg"
rg_location = "eastus"
}
module "prj_002_rg" {
source = "./modules/rg"
rg_name = "mydemorg2"
rg_location = "eastus"
}
output "myoutput" {
value = module.prj_001_rg.rg_output
}
EOF
# Create module: rg.tf
cat <<EOF > modules/rg/rg.tf
resource "azurerm_resource_group" "rg" {
name = var.rg_name
location = var.rg_location
tags = {
environment = "Dev"
}
}
EOF
# Create module: variable.tf
cat <<EOF > modules/rg/variable.tf
variable "rg_name" {
default = "demo_rg"
}
variable "rg_location" {
default = "eastus"
}
EOF
# Create module: output.tf
cat <<EOF > modules/rg/output.tf
output "rg_output" {
value = azurerm_resource_group.rg
}
EOF
echo "✅ Terraform module structure created successfully!"
echo "👉 Next steps:"
echo "1. terraform init"
echo "2. terraform plan"
echo "3. terraform apply"

No comments:
Post a Comment