Infrastructure as Code (IaC)
Infrastructure as Code is the practice of managing and provisioning computing infrastructure through machine-readable configuration files, rather than through manual processes or interactive tools.
Manual vs IaC
Manual Setup (Snowflake Servers):
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ SSH into server โ
โ Install packages manually โ
โ Copy config files โ
โ "Works on my server!" โ
โ - No version history โ
โ - Not reproducible โ
โ - Drift over time โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Infrastructure as Code:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ main.tf / playbook.yml โ
โ โโโโโโโโโโโโโโโโโโโโโ โ
โ - Version controlled (Git) โ
โ - Reproducible environments โ
โ - Consistent every time โ
โ - Self-documenting โ
โ - Automated provisioning โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
IaC Tools
- Terraform โ Multi-cloud, declarative, uses HCL language
- AWS CloudFormation โ AWS-native, JSON/YAML templates
- Ansible โ Agentless, uses YAML playbooks for configuration management
- Pulumi โ Uses real programming languages (Python, TypeScript, Go)
- Chef/Puppet โ Agent-based configuration management
Terraform Example
# Create an AWS EC2 instance
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "WebServer"
Environment = "production"
}
}
# What this does:
# 1. Declaratively describes desired state
# 2. Terraform plans changes before applying
# 3. Tracks state to detect drift
# 4. Can destroy resources when no longer needed
IaC Benefits
- Reproducibility โ Spin up identical environments in minutes
- Version control โ Track infrastructure changes in Git
- Speed โ Automate provisioning that took days manually
- Reliability โ Eliminate human error from manual configuration
- Documentation โ Code IS the documentation