Infrastructure as Code (IaC) Introduction
(Simple Explanation)
Imagine you need to create:
• 10 Virtual Machines
• 5 Networks
• 3 Load Balancers
• 2 Kubernetes Clusters
You can create them manually through the cloud portal.
But what if tomorrow you need the exact same setup again?
Creating everything manually becomes:
Slow
Error-prone
Difficult to maintain
Hard to replicate
Infrastructure as Code (IaC) solves this problem by allowing you to define infrastructure
using code.
Think of it as:
Traditional Infrastructure
Engineer
│
▼
Portal Clicks
│
▼
Infrastructure
vs
Infrastructure as Code
Code
│
▼
Automation
│
▼
Infrastructure
Why IaC?
Without IaC:
Engineer
│
▼
Manual Configuration
│
▼
VM
Network
Storage
Firewall
Problems:
Human Errors
Inconsistent Environments
Slow Deployment
Difficult Recovery
With IaC:
Code
│
▼
Automation Tool
│
▼
Infrastructure
Benefits:
Automation
Consistency
Repeatability
Version Control
Faster Deployment
What Can Be Created Using IaC?
Infrastructure
│
├── Virtual Machines
├── Virtual Networks
├── Storage Accounts
├── Load Balancers
├── Databases
├── AKS Clusters
├── OpenShift Clusters
└── Security Rules
IaC Architecture
Developer
│
▼
IaC Code
│
▼
Git Repository
│
▼
Terraform / ARM / Bicep
│
▼
Cloud Provider
│
▼
Infrastructure
Popular IaC Tools
Terraform
Bicep
ARM Templates
CloudFormation
Ansible
Pulumi
Most Common:
Terraform
Because it works across:
Azure
AWS
GCP
OpenShift
Kubernetes
VMware
Terraform Overview
Terraform is the most widely used IaC tool.
Flow:
Terraform Code
│
▼
Terraform Apply
│
▼
Infrastructure Created
Example:
1 VM
1 VNet
1 Storage Account
created automatically.
Terraform Architecture
Terraform Code
│
▼
Terraform CLI
│
▼
Provider
│
▼
Azure / AWS / GCP
What is a Provider?
Provider allows Terraform to talk to a platform.
Examples:
Azure Provider
AWS Provider
Kubernetes Provider
OpenShift Provider
Flow:
Terraform
│
▼
Provider
│
▼
Cloud Resource
Terraform Workflow
Write Code
│
▼
terraform init
│
▼
terraform plan
│
▼
terraform apply
│
▼
Infrastructure Created
Step 1: terraform init
Downloads required providers.
Terraform
│
▼
Azure Provider Downloaded
Step 2: terraform plan
Shows what will be created.
Example:
+ VM
+ VNet
+ Storage Account
No changes yet.
Step 3: terraform apply
Actually creates resources.
Terraform
│
▼
Azure Resources Created
Step 4: terraform destroy
Deletes resources.
Terraform
│
▼
Infrastructure Removed
Terraform Example
Create a Resource Group:
resource "azurerm_resource_group" "rg" {
name = "demo-rg"
location = "UAE North"
}
Flow:
Terraform Code
│
▼
Apply
│
▼
Resource Group Created
State File
Terraform keeps track of infrastructure.
Terraform
│
▼
[Link]
Contains:
Resource IDs
Names
Configurations
Purpose:
Know Current State
Complete IaC Flow
Developer
│
▼
Terraform Code
│
▼
Git Repository
│
▼
Pipeline
│
▼
Terraform Apply
│
▼
Azure Infrastructure
IaC in Azure
Resources Managed:
Resource Groups
VNets
Subnets
VMs
NSGs
Load Balancers
AKS
Storage
Key Vault
Flow:
Terraform
│
▼
Azure Provider
│
▼
Azure Resources
IaC in Kubernetes
Resources Managed:
Namespaces
Deployments
Services
Ingress
Secrets
Flow:
Terraform
│
▼
Kubernetes Provider
│
▼
Kubernetes Objects
IaC in OpenShift
Resources Managed:
Projects
Routes
Deployments
Services
Secrets
Operators
Flow:
Terraform
│
▼
OpenShift Provider
│
▼
OpenShift Resources
CI/CD + IaC Flow
Developer
│
▼
Git Push
│
▼
Azure DevOps Pipeline
│
▼
Terraform Plan
│
▼
Approval
│
▼
Terraform Apply
│
▼
Infrastructure Created
IaC Learning Flowchart
START
│
▼
Learn Linux
│
▼
Learn Cloud Basics
│
▼
Learn Azure
│
▼
Learn Git Basics
│
▼
Learn Terraform
│
▼
Learn Providers
│
▼
Learn State File
│
▼
Learn Modules
│
▼
Learn CI/CD
│
▼
Learn Kubernetes IaC
│
▼
Learn OpenShift IaC
│
▼
IaC Engineer
Terraform Project Structure
terraform-project
│
├── [Link]
├── [Link]
├── [Link]
├── [Link]
├── [Link]
└── modules
Purpose:
[Link] → Resources
[Link] → Inputs
[Link] → Outputs
[Link] → Cloud Connection
Modules
Modules are reusable templates.
Without Modules:
VM Code
VM Code
VM Code
Repeated many times.
With Modules:
Module
│
▼
VM1
VM2
VM3
Benefits:
Reusability
Standardization
Easier Maintenance
Real-World Enterprise IaC Flow
Developer
│
▼
Git Repository
│
▼
Pull Request
│
▼
Pipeline
│
▼
Terraform Plan
│
▼
Approval
│
▼
Terraform Apply
│
▼
Azure Infrastructure
│
▼
AKS Cluster
│
▼
Applications
IaC Security Best Practices
✓ Store Code in Git
✓ Use Remote State
✓ Enable State Locking
✓ Use Least Privilege Access
✓ Store Secrets in Key Vault
✓ Review Terraform Plans
✓ Use Modules
✓ Version Control Everything
Terraform vs ARM vs Bicep
Terraform
├── Multi-Cloud
├── Most Popular
└── Open Source
ARM
├── Azure Only
└── JSON Based
Bicep
├── Azure Only
├── Easier than ARM
└── Microsoft Recommended
IaC Engineer Learning Path
Beginner
Linux
Cloud Basics
Azure Fundamentals
Git
Intermediate
Terraform
Providers
State Management
Modules
Advanced
Azure DevOps
CI/CD Pipelines
Kubernetes IaC
OpenShift IaC
Expert
Multi-Cloud Architecture
Enterprise Terraform Design
Automation Frameworks
Governance & Compliance
Most Important IaC Concepts
1. Terraform
2. Providers
3. State File
4. Modules
5. Variables
6. Outputs
7. Remote State
8. CI/CD Integration
9. Automation
10. Version Control
Traditional Infrastructure vs IaC
Traditional
├── Manual Creation
├── Slow
├── Error Prone
└── Hard to Repeat
IaC
├── Code Driven
├── Automated
├── Consistent
└── Repeatable
Think of it this way:
Traditional = Building a House Manually
IaC = Using an Approved Blueprint
to Build Identical Houses Every Time
One-Line Summary
Infrastructure as Code (IaC) is the practice of provisioning and managing
infrastructure using code and automation tools such as Terraform, enabling
consistent, repeatable, scalable, and version-controlled deployments across cloud
and on-premises environments.