๐ 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