βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β TERRAFORM WORKFLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Developer Terraform Core Cloud Provider
β β β
β 1. Write .tf files β β
ββββββββββββββββββββββββββ>β β
β β β
β 2. terraform init β β
ββββββββββββββββββββββββββ>β β
β β Download Providers β
β β<βββββββββββββββββββββββββ
β β β
β 3. terraform plan β β
ββββββββββββββββββββββββββ>β β
β β Read Current State β
β β<βββββββββββββββββββββββ>β
β <ββ Show Changes β β
β<ββββββββββββββββββββββββββ β
β β β
β 4. terraform apply β β
ββββββββββββββββββββββββββ>β β
β β Create/Update Resourcesβ
β βββββββββββββββββββββββββ>β
β β <ββ Resource Created β
β β<βββββββββββββββββββββββββ
β β Update State File β
β <ββ Apply Complete β β
β<ββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STATE MANAGEMENT β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Configuration Files State File Real Resources
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β main.tf β β terraform. β β AWS EC2 β
β β β tfstate β β Instance β
β resource β ββββββ>β β<ββββ>β β
β "aws_ β β β { β β Running β
β instance" β β β "id": β β β
β "web" { β β β "i-123" β β ID: i-123 β
β ami = ... β β β ... β β β
β } β β β } β β β
ββββββββββββββββ β ββββββββββββββββ ββββββββββββββββ
β
β Terraform reconciles:
β 1. What you want (config)
β 2. What Terraform knows (state)
ββββββ>3. What actually exists (cloud)
Remote State with Locking
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β REMOTE STATE WITH LOCKING β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Developer A S3 Bucket DynamoDB Table
β β β
β terraform apply β β
ββββββββββββββββββββ>β β
β β Acquire Lock β
β ββββββββββββββββββββββ>β
β β <ββ Lock Granted β
β β<ββββββββββββββββββββββ
β β β
β Read State β β
β<ββββββββββββββββββββ β
β β β
β Update State β β
ββββββββββββββββββββ>β β
β β Release Lock β
β ββββββββββββββββββββββ>β
β β β
Developer B β β
β β β
β terraform apply β β
ββββββββββββββββββββ>β β
β β Try Acquire Lock β
β ββββββββββββββββββββββ>β
β β <ββ Lock Denied β
β <ββ Error: Locked β<ββββββββββββββββββββββ
β<ββββββββββββββββββββ β
β (waits...) β β
Module Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MODULE ARCHITECTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Root Module
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β main.tf β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β module "vpc" { β β
β β source = "./modules/vpc" β β
β β cidr = "10.0.0.0/16" βββ β β
β β } β β β
β β β Input Variables β β
β β module "ec2" { β β β
β β source = "./modules/ec2"β β β
β β vpc_id = module.vpc.id ββΌββ β β
β β subnet_id = module.vpc... ββΌββΌββ β β
β β } β β β Module Outputs β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββββββββββ ββββββββββββββββββββββββ
β modules/vpc/ β β modules/ec2/ β
β ββββββββββββββββββ β β ββββββββββββββββββ β
β β variables.tf β β β β variables.tf β β
β β main.tf β β β β main.tf β β
β β outputs.tf β β β β outputs.tf β β
β ββββββββββββββββββ β β ββββββββββββββββββ β
ββββββββββββββββββββββββ ββββββββββββββββββββββββ
Provider Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PROVIDER ARCHITECTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Terraform Configuration
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β terraform { β
β required_providers { β
β aws = { source = "hashicorp/aws", version = "~> 5.0" } β
β } β
β } β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Terraform Core β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β’ Parse Configuration β β
β β β’ Build Dependency Graph β β
β β β’ Plan Execution β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Provider Plugins β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
β β AWS β β Azure β β GCP β β Other β β
β β Provider β β Provider β β Provider β β Providersβ β
β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β β
βΌ βΌ βΌ βΌ
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ
β AWS β β Azure β β GCP β β Other β
β API β β API β β API β β APIs β
ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ