āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ Terraform: āļ„āļđāđˆāļĄāļ·āļ­āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒāļŠāļģāļŦāļĢāļąāļš Infrastructure as Code

āđ€āļ•āļĢāļĩāļĒāļĄāļ„āļ§āļēāļĄāļžāļĢāđ‰āļ­āļĄāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ Terraform āļ”āđ‰āļ§āļĒāļ„āļģāļ–āļēāļĄāđāļĨāļ°āļ„āļģāļ•āļ­āļšāļ—āļĩāđˆāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļ—āļļāļāļŦāļąāļ§āļ‚āđ‰āļ­āļŠāļģāļ„āļąāļ āļ•āļąāđ‰āļ‡āđāļ•āđˆāļžāļ·āđ‰āļ™āļāļēāļ™ State Management āđ„āļ›āļˆāļ™āļ–āļķāļ‡ Modules āđāļĨāļ° CI/CD

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ Terraform āđāļĨāļ° Infrastructure as Code

āļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™āđƒāļ™āļ•āļģāđāļŦāļ™āđˆāļ‡ DevOps āļŦāļĢāļ·āļ­ Cloud Engineer āļĄāļąāļāļˆāļ°āļĄāļĩāļ„āļģāļ–āļēāļĄāđ€āļāļĩāđˆāļĒāļ§āļāļąāļš Terraform āļ­āļĒāļđāđˆāđ€āļŠāļĄāļ­ āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļ Terraform āđ€āļ›āđ‡āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­ Infrastructure as Code (IaC) āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļ„āļ§āļēāļĄāļ™āļīāļĒāļĄāļĄāļēāļāļ—āļĩāđˆāļŠāļļāļ”āđƒāļ™āļ›āļąāļˆāļˆāļļāļšāļąāļ™ āļšāļ—āļ„āļ§āļēāļĄāļ™āļĩāđ‰āļĢāļ§āļšāļĢāļ§āļĄāļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ Terraform āļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒāļ—āļĩāđˆāļŠāļļāļ” āļžāļĢāđ‰āļ­āļĄāļ„āļģāļ•āļ­āļšāđāļĨāļ°āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ”āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āļ™āļģāđ„āļ›āđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰āļˆāļĢāļīāļ‡ āđ„āļĄāđˆāļ§āđˆāļēāļˆāļ°āđ€āļ›āđ‡āļ™āļœāļđāđ‰āļ—āļĩāđˆāđ€āļžāļīāđˆāļ‡āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļĻāļķāļāļĐāļē Terraform āļŦāļĢāļ·āļ­āļœāļđāđ‰āļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āļŠāļšāļāļēāļĢāļ“āđŒāđāļĨāđ‰āļ§ āļšāļ—āļ„āļ§āļēāļĄāļ™āļĩāđ‰āļˆāļ°āļŠāđˆāļ§āļĒāđ€āļ•āļĢāļĩāļĒāļĄāļ„āļ§āļēāļĄāļžāļĢāđ‰āļ­āļĄāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļąāđˆāļ™āđƒāļˆ

āļœāļđāđ‰āļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļĄāļąāļāļ›āļĢāļ°āđ€āļĄāļīāļ™āļ—āļąāđ‰āļ‡āļ„āļ§āļēāļĄāđ€āļ‚āđ‰āļēāđƒāļˆāđƒāļ™āđāļ™āļ§āļ„āļīāļ”āļžāļ·āđ‰āļ™āļāļēāļ™āđāļĨāļ°āļ›āļĢāļ°āļŠāļšāļāļēāļĢāļ“āđŒāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡ āļāļēāļĢāļ•āļ­āļšāļ„āļģāļ–āļēāļĄāļ„āļ§āļĢāđāļŠāļ”āļ‡āđƒāļŦāđ‰āđ€āļŦāđ‡āļ™āļ–āļķāļ‡āļ„āļ§āļēāļĄāđ€āļ‚āđ‰āļēāđƒāļˆāđƒāļ™āļŦāļĨāļąāļāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡ Terraform āļĢāļ§āļĄāļ–āļķāļ‡āļ›āļĢāļ°āļŠāļšāļāļēāļĢāļ“āđŒāđƒāļ™āļāļēāļĢāđāļāđ‰āđ„āļ‚āļ›āļąāļāļŦāļēāļ—āļĩāđˆāđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āļˆāļĢāļīāļ‡āđƒāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™

āđāļ™āļ§āļ„āļīāļ”āļžāļ·āđ‰āļ™āļāļēāļ™āļ‚āļ­āļ‡ Terraform

Terraform āļ„āļ·āļ­āļ­āļ°āđ„āļĢ

Terraform āđ€āļ›āđ‡āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­ Infrastructure as Code (IaC) āđāļšāļš Open Source āļ—āļĩāđˆāļžāļąāļ’āļ™āļēāđ‚āļ”āļĒ HashiCorp āđƒāļŠāđ‰āļ āļēāļĐāļē HCL (HashiCorp Configuration Language) āđƒāļ™āļāļēāļĢāļ›āļĢāļ°āļāļēāļĻ Infrastructure āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢ Terraform āļ—āļģāļ‡āļēāļ™āļ•āļēāļĄāļŦāļĨāļąāļāļāļēāļĢ Declarative āļ‹āļķāđˆāļ‡āļŦāļĄāļēāļĒāļ„āļ§āļēāļĄāļ§āđˆāļēāļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļ°āļ›āļĢāļ°āļāļēāļĻāļŠāļ–āļēāļ™āļ°āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāđƒāļŦāđ‰ Infrastructure āđ€āļ›āđ‡āļ™ āđāļĨāļ° Terraform āļˆāļ°āļ„āļģāļ™āļ§āļ“āļ§āđˆāļēāļ•āđ‰āļ­āļ‡āļ—āļģāļ­āļ°āđ„āļĢāļšāđ‰āļēāļ‡āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļ–āļķāļ‡āļŠāļ–āļēāļ™āļ°āļ™āļąāđ‰āļ™

āļˆāļļāļ”āđ€āļ”āđˆāļ™āļ‚āļ­āļ‡ Terraform āļ„āļ·āļ­āļ„āļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļ–āđƒāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Infrastructure āļ‚āđ‰āļēāļĄ Cloud Provider āļŦāļĨāļēāļĒāļĢāļēāļĒāđ„āļ”āđ‰āļžāļĢāđ‰āļ­āļĄāļāļąāļ™ āđ„āļĄāđˆāļ§āđˆāļēāļˆāļ°āđ€āļ›āđ‡āļ™ AWS, Azure, Google Cloud āļŦāļĢāļ·āļ­āđāļĄāđ‰āđāļ•āđˆ On-Premise Infrastructure āđ‚āļ”āļĒāđƒāļŠāđ‰āđ„āļ§āļĒāļēāļāļĢāļ“āđŒāđ€āļ”āļĩāļĒāļ§āļāļąāļ™

āļ„āļģāļŠāļąāđˆāļ‡ Workflow āļŦāļĨāļąāļāļ‚āļ­āļ‡ Terraform

Terraform āļĄāļĩāļ„āļģāļŠāļąāđˆāļ‡āļŦāļĨāļąāļ 4 āļ„āļģāļŠāļąāđˆāļ‡āļ—āļĩāđˆāđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ›āļĢāļ°āļˆāļģāļ§āļąāļ™ āđ„āļ”āđ‰āđāļāđˆ init, plan, apply āđāļĨāļ° destroy

bash
# 1. Initialize - downloads providers and modules
terraform init

# 2. Plan - shows what will change without modifying anything
terraform plan -out=tfplan

# 3. Apply - executes the planned changes
terraform apply tfplan

# 4. Destroy - tears down all managed resources
terraform destroy

āļ„āļģāļŠāļąāđˆāļ‡ terraform init āļˆāļ°āļ”āļēāļ§āļ™āđŒāđ‚āļŦāļĨāļ” Provider āđāļĨāļ° Module āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™ āļĢāļ§āļĄāļ–āļķāļ‡āļ•āļąāđ‰āļ‡āļ„āđˆāļē Backend āļŠāļģāļŦāļĢāļąāļšāđ€āļāđ‡āļš State āļ„āļģāļŠāļąāđˆāļ‡ terraform plan āļˆāļ°āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļ—āļĩāđˆāļˆāļ°āđ€āļāļīāļ”āļ‚āļķāđ‰āļ™āđ‚āļ”āļĒāđ„āļĄāđˆāļ—āļģāļāļēāļĢāđāļāđ‰āđ„āļ‚āļˆāļĢāļīāļ‡ āļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļŠāļģāļ„āļąāļāđƒāļ™āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļāđˆāļ­āļ™āļāļēāļĢ Deploy āļ„āļģāļŠāļąāđˆāļ‡ terraform apply āļˆāļ°āļ—āļģāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļˆāļĢāļīāļ‡āļ•āļēāļĄ Plan āļ—āļĩāđˆāļāļģāļŦāļ™āļ” āđāļĨāļ°āļ„āļģāļŠāļąāđˆāļ‡ terraform destroy āļˆāļ°āļĨāļšāļ—āļĢāļąāļžāļĒāļēāļāļĢāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ—āļĩāđˆ Terraform āļˆāļąāļ”āļāļēāļĢāļ­āļĒāļđāđˆ

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ State

State āļ„āļ·āļ­āļ­āļ°āđ„āļĢāđāļĨāļ°āļ—āļģāđ„āļĄāļ–āļķāļ‡āļŠāļģāļ„āļąāļ

Terraform State āđ€āļ›āđ‡āļ™āđ„āļŸāļĨāđŒāļ—āļĩāđˆāđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāļ„āļ§āļēāļĄāļŠāļąāļĄāļžāļąāļ™āļ˜āđŒāļĢāļ°āļŦāļ§āđˆāļēāļ‡ Configuration āļ—āļĩāđˆāđ€āļ‚āļĩāļĒāļ™āđ„āļ§āđ‰āļāļąāļšāļ—āļĢāļąāļžāļĒāļēāļāļĢāļˆāļĢāļīāļ‡āļšāļ™ Cloud Provider State āļ—āļģāļŦāļ™āđ‰āļēāļ—āļĩāđˆāđ€āļ›āđ‡āļ™āđāļŦāļĨāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ„āļ§āļēāļĄāļˆāļĢāļīāļ‡ (Source of Truth) āļ—āļĩāđˆ Terraform āđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļšāļ§āđˆāļēāļŠāļ–āļēāļ™āļ°āļ›āļąāļˆāļˆāļļāļšāļąāļ™āļ‚āļ­āļ‡ Infrastructure āđāļ•āļāļ•āđˆāļēāļ‡āļˆāļēāļāļŠāļ–āļēāļ™āļ°āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ­āļĒāđˆāļēāļ‡āđ„āļĢ

State āļĄāļĩāļ„āļ§āļēāļĄāļŠāļģāļ„āļąāļāļ­āļĒāđˆāļēāļ‡āļĒāļīāđˆāļ‡āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨ Metadata āļ‚āļ­āļ‡āļ—āļĢāļąāļžāļĒāļēāļāļĢ āđ€āļŠāđˆāļ™ ID āļ‚āļ­āļ‡āļ—āļĢāļąāļžāļĒāļēāļāļĢāļšāļ™ Cloud, āļ„āļ§āļēāļĄāļŠāļąāļĄāļžāļąāļ™āļ˜āđŒāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļ—āļĢāļąāļžāļĒāļēāļāļĢ āđāļĨāļ°āļ„āđˆāļēāļ—āļĩāđˆ Terraform āļ„āļģāļ™āļ§āļ“āđ„āļ”āđ‰ āļŦāļēāļāđ„āļĄāđˆāļĄāļĩ State Terraform āļˆāļ°āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļ—āļĢāļēāļšāļ§āđˆāļēāļ—āļĢāļąāļžāļĒāļēāļāļĢāđƒāļ”āļ—āļĩāđˆāļˆāļąāļ”āļāļēāļĢāļ­āļĒāļđāđˆāđāļĨāļ°āļ•āđ‰āļ­āļ‡āđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļ­āļ°āđ„āļĢāļšāđ‰āļēāļ‡

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ State āđƒāļ™ Production

āđƒāļ™āļŠāļ āļēāļžāđāļ§āļ”āļĨāđ‰āļ­āļĄ Production āļāļēāļĢāđ€āļāđ‡āļš State āđ„āļ§āđ‰āđƒāļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļ—āđ‰āļ­āļ‡āļ–āļīāđˆāļ™āđ„āļĄāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄ āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāļŦāļĨāļēāļĒāļ„āļ™āđƒāļ™āļ—āļĩāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡ State āđ€āļ”āļĩāļĒāļ§āļāļąāļ™ āđāļĨāļ°āļ•āđ‰āļ­āļ‡āļĄāļĩāļāļĨāđ„āļāļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāđāļāđ‰āđ„āļ‚āļžāļĢāđ‰āļ­āļĄāļāļąāļ™ (Locking) āļāļēāļĢāđƒāļŠāđ‰ Remote Backend āđ€āļŠāđˆāļ™ S3 āļžāļĢāđ‰āļ­āļĄ DynamoDB āļŠāļģāļŦāļĢāļąāļš Locking āđ€āļ›āđ‡āļ™āđāļ™āļ§āļ›āļāļīāļšāļąāļ•āļīāļ—āļĩāđˆāđāļ™āļ°āļ™āļģ

hcl
# backend.tf
terraform {
  backend "s3" {
    bucket         = "company-terraform-state"
    key            = "prod/networking/terraform.tfstate"
    region         = "eu-west-1"
    dynamodb_table = "terraform-locks"
    encrypt        = true
  }
}

āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļēāļ™āļĩāđ‰āļĄāļĩāļ­āļ‡āļ„āđŒāļ›āļĢāļ°āļāļ­āļšāļŠāļģāļ„āļąāļāļŦāļĨāļēāļĒāļ­āļĒāđˆāļēāļ‡ āđ„āļ”āđ‰āđāļāđˆ bucket āļŠāļģāļŦāļĢāļąāļšāđ€āļāđ‡āļšāđ„āļŸāļĨāđŒ State, key āļŠāļģāļŦāļĢāļąāļšāļāļģāļŦāļ™āļ”āļ•āļģāđāļŦāļ™āđˆāļ‡āđ„āļŸāļĨāđŒāļ āļēāļĒāđƒāļ™ Bucket, dynamodb_table āļŠāļģāļŦāļĢāļąāļšāļ—āļģ Locking āļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāđāļāđ‰āđ„āļ‚āļžāļĢāđ‰āļ­āļĄāļāļąāļ™ āđāļĨāļ° encrypt āļŠāļģāļŦāļĢāļąāļšāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđ„āļŸāļĨāđŒ State āđ€āļ™āļ·āđˆāļ­āļ‡āļˆāļēāļāļ­āļēāļˆāļĄāļĩāļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļģāļ„āļąāļāļ­āļĒāļđāđˆ

āđ„āļŸāļĨāđŒ State āļ­āļēāļˆāļĄāļĩāļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļģāļ„āļąāļāđ€āļŠāđˆāļ™ Password āļŦāļĢāļ·āļ­ Secret āļ„āļ§āļĢāđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™āļāļēāļĢāđ€āļ‚āđ‰āļēāļĢāļŦāļąāļŠāđ€āļŠāļĄāļ­ āđāļĨāļ°āļˆāļģāļāļąāļ”āļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡ Bucket āđ€āļ‰āļžāļēāļ°āļœāļđāđ‰āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™āļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰āļ‡āļēāļ™āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ āļ™āļ­āļāļˆāļēāļāļ™āļĩāđ‰āļ„āļ§āļĢāđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™ Versioning āļšāļ™ S3 Bucket āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļāļđāđ‰āļ„āļ·āļ™ State āđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļāđˆāļ­āļ™āļŦāļ™āđ‰āļēāđ„āļ”āđ‰āļŦāļēāļāđ€āļāļīāļ”āļ›āļąāļāļŦāļē

Modules

Module āļ—āļģāļ‡āļēāļ™āļ­āļĒāđˆāļēāļ‡āđ„āļĢ

Module āđƒāļ™ Terraform āļ„āļ·āļ­āļāļĨāļļāđˆāļĄāļ‚āļ­āļ‡āļ—āļĢāļąāļžāļĒāļēāļāļĢāļ—āļĩāđˆāļˆāļąāļ”āđ€āļ›āđ‡āļ™āļŦāļ™āđˆāļ§āļĒāđ€āļ”āļĩāļĒāļ§āļāļąāļ™ āļŠāļēāļĄāļēāļĢāļ–āļ™āļģāļāļĨāļąāļšāļĄāļēāđƒāļŠāđ‰āļ‹āđ‰āļģāđ„āļ”āđ‰ Module āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āđāļšāđˆāļ‡āļ›āļąāļ™ Infrastructure Pattern āļĢāļ°āļŦāļ§āđˆāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļāļ•āđŒāļŦāļĢāļ·āļ­āļ—āļĩāļĄāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž āļĨāļ”āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ‚āļ„āđ‰āļ”āļ‹āđ‰āļģāļ‹āđ‰āļ­āļ™ āđāļĨāļ°āļ—āļģāđƒāļŦāđ‰āļāļēāļĢāļšāļģāļĢāļļāļ‡āļĢāļąāļāļĐāļēāļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™

hcl
# main.tf - calling a module
module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "5.16.0"

  name = "production-vpc"
  cidr = "10.0.0.0/16"

  azs             = ["eu-west-1a", "eu-west-1b", "eu-west-1c"]
  private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  public_subnets  = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]

  enable_nat_gateway = true
  single_nat_gateway = true
}

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ™āļĩāđ‰āđāļŠāļ”āļ‡āļāļēāļĢāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰ Module āļˆāļēāļ Terraform Registry āļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™ Module āļŠāļģāđ€āļĢāđ‡āļˆāļĢāļđāļ›āļ—āļĩāđˆāļœāđˆāļēāļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđāļĨāđ‰āļ§ āļāļēāļĢāļĢāļ°āļšāļļ version āđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļŠāļģāļ„āļąāļāđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āđāļ™āđˆāđƒāļˆāļ§āđˆāļē Infrastructure āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āļ‹āđ‰āļģāđ„āļ”āđ‰āđ€āļŦāļĄāļ·āļ­āļ™āđ€āļ”āļīāļĄāļ—āļļāļāļ„āļĢāļąāđ‰āļ‡

āļŦāļĨāļąāļāļāļēāļĢāļ­āļ­āļāđāļšāļš Module āļ—āļĩāđˆāļ”āļĩ

Module āļ—āļĩāđˆāļ­āļ­āļāđāļšāļšāļĄāļēāļ­āļĒāđˆāļēāļ‡āļ”āļĩāļ„āļ§āļĢāļĄāļĩāļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļīāļ”āļąāļ‡āļ™āļĩāđ‰:

  • āļĄāļĩāļˆāļļāļ”āļ›āļĢāļ°āļŠāļ‡āļ„āđŒāđ€āļ”āļĩāļĒāļ§: Module āļ„āļ§āļĢāļ—āļģāļŦāļ™āđ‰āļēāļ—āļĩāđˆāđ€āļ”āļĩāļĒāļ§āļ­āļĒāđˆāļēāļ‡āļŠāļąāļ”āđ€āļˆāļ™ āđ€āļŠāđˆāļ™ āļŠāļĢāđ‰āļēāļ‡ VPC āļŦāļĢāļ·āļ­āļŠāļĢāđ‰āļēāļ‡ EKS Cluster
  • āļĄāļĩ Input Variables āļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄ: āļ„āļ§āļĢāļĄāļĩāļ„āđˆāļē Default āļ—āļĩāđˆāļŠāļĄāđ€āļŦāļ•āļļāļŠāļĄāļœāļĨ āđāļĨāļ°āļ­āļ™āļļāļāļēāļ•āđƒāļŦāđ‰āļ›āļĢāļąāļšāđāļ•āđˆāļ‡āđ„āļ”āđ‰āļ•āļēāļĄāļ„āļ§āļēāļĄāļˆāļģāđ€āļ›āđ‡āļ™
  • āļĄāļĩ Output āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™: āļ„āļ§āļĢāļŠāđˆāļ‡āļ­āļ­āļāļ„āđˆāļēāļ—āļĩāđˆ Module āļ­āļ·āđˆāļ™āļŦāļĢāļ·āļ­ Root Module āļ•āđ‰āļ­āļ‡āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™
  • āļĄāļĩ Documentation āļ„āļĢāļšāļ–āđ‰āļ§āļ™: āļ„āļ§āļĢāļĄāļĩāļ„āļģāļ­āļ˜āļīāļšāļēāļĒāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™ āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡ āđāļĨāļ° README āļ—āļĩāđˆāļŠāļąāļ”āđ€āļˆāļ™

āļžāļĢāđ‰āļ­āļĄāļ—āļĩāđˆāļˆāļ°āļžāļīāļŠāļīāļ•āļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ DevOps āđāļĨāđ‰āļ§āļŦāļĢāļ·āļ­āļĒāļąāļ‡āļ„āļĢāļąāļš?

āļāļķāļāļāļ™āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āđāļšāļšāđ‚āļ•āđ‰āļ•āļ­āļš, flashcards āđāļĨāļ°āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„āļ„āļĢāļąāļš

Workspaces, Environments āđāļĨāļ°āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļāļ•āđŒ

āļĢāļđāļ›āđāļšāļšāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļŦāļĨāļēāļĒ Environment

āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Infrastructure āļŦāļĨāļēāļĒ Environment āđ€āļŠāđˆāļ™ Development, Staging āđāļĨāļ° Production āđ€āļ›āđ‡āļ™āļ„āļ§āļēāļĄāļ—āđ‰āļēāļ—āļēāļĒāļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒ āļĄāļĩāļŦāļĨāļēāļĒāļ§āļīāļ˜āļĩāđƒāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ āđāļ•āđˆāļĨāļ°āļ§āļīāļ˜āļĩāļĄāļĩāļ‚āđ‰āļ­āļ”āļĩāļ‚āđ‰āļ­āđ€āļŠāļĩāļĒāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™

| āļĢāļđāļ›āđāļšāļš | āļ‚āđ‰āļ­āļ”āļĩ | āļ‚āđ‰āļ­āđ€āļŠāļĩāļĒ | āđ€āļŦāļĄāļēāļ°āļāļąāļš | |--------|-------|---------|----------| | Workspaces | āļ‡āđˆāļēāļĒ āđƒāļŠāđ‰ Code āļŠāļļāļ”āđ€āļ”āļĩāļĒāļ§ | State āļ­āļĒāļđāđˆāđƒāļ™ Backend āđ€āļ”āļĩāļĒāļ§ | āļ—āļĩāļĄāđ€āļĨāđ‡āļ Environment āļ„āļĨāđ‰āļēāļĒāļāļąāļ™ | | Directory āļ•āđˆāļēāļ‡ āđ† | āđāļĒāļ State āļŠāļąāļ”āđ€āļˆāļ™ āļ›āļĨāļ­āļ”āļ āļąāļĒ | āđ‚āļ„āđ‰āļ”āļ‹āđ‰āļģāļ‹āđ‰āļ­āļ™ | Environment āđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļ™āļĄāļēāļ | | Terragrunt | DRY āļĒāļ·āļ”āļŦāļĒāļļāđˆāļ™ | āļ•āđ‰āļ­āļ‡āđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āđ€āļžāļīāđˆāļĄ | āđ‚āļ›āļĢāđ€āļˆāļāļ•āđŒāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆ |

Workspace vs Directory Isolation

Terraform Workspaces āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ Configuration āļŠāļļāļ”āđ€āļ”āļĩāļĒāļ§āļāļąāļšāļŦāļĨāļēāļĒ Environment āđ„āļ”āđ‰ āđ‚āļ”āļĒāđāļ•āđˆāļĨāļ° Workspace āļˆāļ°āļĄāļĩ State āđāļĒāļāļāļąāļ™ āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄ Workspaces āđ„āļĄāđˆāđ„āļ”āđ‰āđāļĒāļ Backend āļ”āļąāļ‡āļ™āļąāđ‰āļ™āļŦāļēāļāļĄāļĩāļ›āļąāļāļŦāļēāļāļąāļš Backend āļˆāļ°āļāļĢāļ°āļ—āļšāļ—āļļāļ Environment

āļāļēāļĢāđƒāļŠāđ‰ Directory āđāļĒāļāļŠāļģāļŦāļĢāļąāļšāđāļ•āđˆāļĨāļ° Environment āđƒāļŦāđ‰āļāļēāļĢāđāļĒāļāļ—āļĩāđˆāļŠāļąāļ”āđ€āļˆāļ™āļāļ§āđˆāļē āđāļ•āđˆāļ•āđ‰āļ­āļ‡āļˆāļąāļ”āļāļēāļĢāļāļąāļšāļāļēāļĢāļ‹āđ‰āļģāļ‹āđ‰āļ­āļ™āļ‚āļ­āļ‡āđ‚āļ„āđ‰āļ” āļ§āļīāļ˜āļĩāļ—āļĩāđˆāļ™āļīāļĒāļĄāļ„āļ·āļ­āļāļēāļĢāđƒāļŠāđ‰ Module āļĢāđˆāļ§āļĄāļāļąāļ™ āđāļĨāļ°āļĄāļĩ Configuration āđ€āļ‰āļžāļēāļ°āļŠāļģāļŦāļĢāļąāļšāđāļ•āđˆāļĨāļ° Environment

Providers, Data Sources āđāļĨāļ° Resource Lifecycle

āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē Provider

Provider āđ€āļ›āđ‡āļ™āļ•āļąāļ§āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļĢāļ°āļŦāļ§āđˆāļēāļ‡ Terraform āļāļąāļš API āļ‚āļ­āļ‡ Cloud Provider āļŦāļĢāļ·āļ­āļšāļĢāļīāļāļēāļĢāļ•āđˆāļēāļ‡ āđ† āļāļēāļĢāļ•āļąāđ‰āļ‡āļ„āđˆāļē Provider āļ­āļĒāđˆāļēāļ‡āđ€āļŦāļĄāļēāļ°āļŠāļĄāđ€āļ›āđ‡āļ™āļžāļ·āđ‰āļ™āļāļēāļ™āļ—āļĩāđˆāļŠāļģāļ„āļąāļ

hcl
# providers.tf
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.80"
    }
  }
}

provider "aws" {
  region = var.aws_region

  default_tags {
    tags = {
      Environment = var.environment
      ManagedBy   = "terraform"
      Team        = var.team_name
    }
  }
}

āļāļēāļĢāļĢāļ°āļšāļļ Version Constraint āđ€āļŠāđˆāļ™ ~> 5.80 āļŦāļĄāļēāļĒāļ„āļ§āļēāļĄāļ§āđˆāļēāļˆāļ°āđƒāļŠāđ‰ Version 5.80 āļŦāļĢāļ·āļ­āļŠāļđāļ‡āļāļ§āđˆāļē āđāļ•āđˆāļ•āđˆāļģāļāļ§āđˆāļē 6.0 āļ‹āļķāđˆāļ‡āļŠāđˆāļ§āļĒāļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāļ­āļąāļžāđ€āļāļĢāļ”āļ—āļĩāđˆāļ­āļēāļˆāļ—āļģāđƒāļŦāđ‰āđ€āļāļīāļ”āļ›āļąāļāļŦāļē āļāļēāļĢāđƒāļŠāđ‰ default_tags āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ—āļļāļāļ—āļĢāļąāļžāļĒāļēāļāļĢāļ—āļĩāđˆāļŠāļĢāđ‰āļēāļ‡āļĄāļĩ Tag āļĄāļēāļ•āļĢāļāļēāļ™āđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī

Data Sources vs Resources

Data Sources āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļ­āđˆāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļēāļāļ—āļĢāļąāļžāļĒāļēāļāļĢāļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđāđˆāđāļĨāđ‰āļ§ āđ‚āļ”āļĒāđ„āļĄāđˆāļŠāļĢāđ‰āļēāļ‡āļŦāļĢāļ·āļ­āđāļāđ‰āđ„āļ‚āļ­āļ°āđ„āļĢ āđƒāļ™āļ‚āļ“āļ°āļ—āļĩāđˆ Resources āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļŠāļĢāđ‰āļēāļ‡āđāļĨāļ°āļˆāļąāļ”āļāļēāļĢāļ—āļĢāļąāļžāļĒāļēāļāļĢāđƒāļŦāļĄāđˆ

hcl
# Data source - reads an existing AMI, does not create anything
data "aws_ami" "ubuntu" {
  most_recent = true
  owners      = ["099720109477"] # Canonical

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-*"]
  }
}

# Resource - creates an EC2 instance using the data source
resource "aws_instance" "web" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t3.micro"
}

āđƒāļ™āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ™āļĩāđ‰ Data Source aws_ami āļ„āđ‰āļ™āļŦāļē AMI āļ‚āļ­āļ‡ Ubuntu āļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđāđˆāđāļĨāđ‰āļ§ āđāļĨāļ° Resource aws_instance āđƒāļŠāđ‰ ID āļ‚āļ­āļ‡ AMI āļ™āļąāđ‰āļ™āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡ EC2 Instance āđƒāļŦāļĄāđˆ

Lifecycle Meta-Arguments āđ€āļŠāđˆāļ™ create_before_destroy, prevent_destroy āđāļĨāļ° ignore_changes āļŠāđˆāļ§āļĒāļ„āļ§āļšāļ„āļļāļĄāļžāļĪāļ•āļīāļāļĢāļĢāļĄāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđāļĨāļ°āļĨāļšāļ—āļĢāļąāļžāļĒāļēāļāļĢ āļāļēāļĢāđƒāļŠāđ‰ prevent_destroy = true āļāļąāļšāļ—āļĢāļąāļžāļĒāļēāļāļĢāļŠāļģāļ„āļąāļāđ€āļŠāđˆāļ™ Database āļˆāļ°āļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāļĨāļšāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āļąāđ‰āļ‡āđƒāļˆ

āļŦāļąāļ§āļ‚āđ‰āļ­āļ‚āļąāđ‰āļ™āļŠāļđāļ‡

āļāļēāļĢ Import āļ—āļĢāļąāļžāļĒāļēāļāļĢāļ—āļĩāđˆāļĄāļĩāļ­āļĒāļđāđˆ

āļšāļēāļ‡āļ„āļĢāļąāđ‰āļ‡āļ•āđ‰āļ­āļ‡āļāļēāļĢāļ™āļģāļ—āļĢāļąāļžāļĒāļēāļāļĢāļ—āļĩāđˆāļŠāļĢāđ‰āļēāļ‡āđ„āļ§āđ‰āđāļĨāđ‰āļ§āļ”āđ‰āļ§āļĒāļĄāļ·āļ­āļĄāļēāļ­āļĒāļđāđˆāļ āļēāļĒāđƒāļ•āđ‰āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āļ­āļ‡ Terraform Terraform 1.5 āļ‚āļķāđ‰āļ™āđ„āļ›āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢ Import āđāļšāļš Declarative āļ”āđ‰āļ§āļĒ import Block

hcl
# import.tf
import {
  to = aws_s3_bucket.legacy_data
  id = "my-legacy-bucket-name"
}

resource "aws_s3_bucket" "legacy_data" {
  bucket = "my-legacy-bucket-name"
}

āļ§āļīāļ˜āļĩāļ™āļĩāđ‰āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļāļēāļĢ Import āđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļŦāļ™āļķāđˆāļ‡āļ‚āļ­āļ‡ Configuration āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ– Review āđƒāļ™ Pull Request āđ„āļ”āđ‰āļāđˆāļ­āļ™āļāļēāļĢ Apply

Moved Blocks āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢ Refactor

āđ€āļĄāļ·āđˆāļ­āļ•āđ‰āļ­āļ‡āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ·āđˆāļ­ Resource āļŦāļĢāļ·āļ­āļĒāđ‰āļēāļĒ Resource āđ€āļ‚āđ‰āļē Module āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ moved Block āđ€āļžāļ·āđˆāļ­āļšāļ­āļ Terraform āļ§āđˆāļēāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļĨāļšāđāļĨāļ°āļŠāļĢāđ‰āļēāļ‡āđƒāļŦāļĄāđˆ āđāļ•āđˆāđƒāļŦāđ‰ Update State āđāļ—āļ™

hcl
# Renamed a resource from "web" to "app"
moved {
  from = aws_instance.web
  to   = aws_instance.app
}

āļāļēāļĢāļ—āļ”āļŠāļ­āļš Terraform

Terraform 1.6 āļ‚āļķāđ‰āļ™āđ„āļ›āļĄāļĩ Native Testing Framework āļ—āļĩāđˆāļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļ‚āļĩāļĒāļ™ Test āļŠāļģāļŦāļĢāļąāļš Configuration āđ„āļ”āđ‰

hcl
# tests/vpc.tftest.hcl
run "creates_vpc_with_correct_cidr" {
  command = plan

  assert {
    condition     = aws_vpc.main.cidr_block == "10.0.0.0/16"
    error_message = "VPC CIDR block does not match expected value"
  }
}

run "creates_three_private_subnets" {
  command = plan

  assert {
    condition     = length(aws_subnet.private) == 3
    error_message = "Expected 3 private subnets"
  }
}

āļāļēāļĢāļ—āļ”āļŠāļ­āļšāļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļĄāļąāđˆāļ™āđƒāļˆāļ§āđˆāļē Configuration āļ—āļģāļ‡āļēāļ™āļ–āļđāļāļ•āđ‰āļ­āļ‡āļāđˆāļ­āļ™āļāļēāļĢ Deploy āđāļĨāļ°āļŠāđˆāļ§āļĒāļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļ—āļĩāđˆāļ­āļēāļˆāļ—āļģāđƒāļŦāđ‰āđ€āļāļīāļ”āļ›āļąāļāļŦāļē

Terraform āđƒāļ™ CI/CD Pipeline

āļāļēāļĢāļĢāļ§āļĄ Terraform āđ€āļ‚āđ‰āļēāļāļąāļš CI/CD Pipeline āđ€āļ›āđ‡āļ™āđāļ™āļ§āļ›āļāļīāļšāļąāļ•āļīāļ—āļĩāđˆāļŠāļģāļ„āļąāļāļŠāļģāļŦāļĢāļąāļšāļ—āļĩāļĄāļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Infrastructure āļ­āļĒāđˆāļēāļ‡āđ€āļ›āđ‡āļ™āļĢāļ°āļšāļš āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆāđāļ™āļ°āļ™āļģāļĄāļĩāļ”āļąāļ‡āļ™āļĩāđ‰:

  1. Validate āđāļĨāļ° Format: āļĢāļąāļ™ terraform validate āđāļĨāļ° terraform fmt -check āđ€āļžāļ·āđˆāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš Syntax āđāļĨāļ° Formatting
  2. Security Scan: āđƒāļŠāđ‰āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļ­āļĒāđˆāļēāļ‡ tfsec āļŦāļĢāļ·āļ­ Checkov āđ€āļžāļ·āđˆāļ­āļ•āļĢāļ§āļˆāļŦāļēāļ›āļąāļāļŦāļēāļ”āđ‰āļēāļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ
  3. Plan: āļĢāļąāļ™ terraform plan āđāļĨāļ°āļšāļąāļ™āļ—āļķāļ Plan File āļŠāļģāļŦāļĢāļąāļš Review
  4. Review: āđƒāļŦāđ‰āļ—āļĩāļĄāļ•āļĢāļ§āļˆāļŠāļ­āļš Plan āļāđˆāļ­āļ™ Apply āđ‚āļ”āļĒāđ€āļ‰āļžāļēāļ°āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āđƒāļ™ Production
  5. Apply: āļĢāļąāļ™ terraform apply āļŦāļĨāļąāļ‡āļˆāļēāļāđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ­āļ™āļļāļĄāļąāļ•āļīāđāļĨāđ‰āļ§āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™

āļāļēāļĢāđāļĒāļ Plan āđāļĨāļ° Apply āļ­āļ­āļāļˆāļēāļāļāļąāļ™āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļĄāļĩāļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļāđˆāļ­āļ™āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļˆāļĢāļīāļ‡ āļĨāļ”āļ„āļ§āļēāļĄāđ€āļŠāļĩāđˆāļĒāļ‡āđƒāļ™āļāļēāļĢāđ€āļāļīāļ”āļ›āļąāļāļŦāļē

āļŠāļĢāļļāļ›

āļāļēāļĢāđ€āļ•āļĢāļĩāļĒāļĄāļ•āļąāļ§āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ Terraform āļ•āđ‰āļ­āļ‡āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļŦāļĨāļēāļĒāļŦāļąāļ§āļ‚āđ‰āļ­āļŠāļģāļ„āļąāļ āļ•āļąāđ‰āļ‡āđāļ•āđˆāđāļ™āļ§āļ„āļīāļ”āļžāļ·āđ‰āļ™āļāļēāļ™āļ­āļĒāđˆāļēāļ‡āļ„āļģāļŠāļąāđˆāļ‡ Workflow āđāļĨāļ° State Management āđ„āļ›āļˆāļ™āļ–āļķāļ‡āļŦāļąāļ§āļ‚āđ‰āļ­āļ‚āļąāđ‰āļ™āļŠāļđāļ‡āļ­āļĒāđˆāļēāļ‡ Modules āđāļĨāļ°āļāļēāļĢ Testing āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļŠāļģāļ„āļąāļāļ—āļĩāđˆāļ„āļ§āļĢāļˆāļ”āļˆāļģāļĄāļĩāļ”āļąāļ‡āļ™āļĩāđ‰:

  • State āđ€āļ›āđ‡āļ™āļŦāļąāļ§āđƒāļˆāļ‚āļ­āļ‡ Terraform: āđ€āļ‚āđ‰āļēāđƒāļˆāļ§āļīāļ˜āļĩāļāļēāļĢāļˆāļąāļ”āļāļēāļĢ State āđƒāļ™ Production āļ”āđ‰āļ§āļĒ Remote Backend āđāļĨāļ° Locking
  • Module āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ‚āļ„āđ‰āļ”āļŠāļēāļĄāļēāļĢāļ–āļ™āļģāļāļĨāļąāļšāļĄāļēāđƒāļŠāđ‰āļ‹āđ‰āļģāđ„āļ”āđ‰: āļ­āļ­āļāđāļšāļš Module āđƒāļŦāđ‰āļĄāļĩāļˆāļļāļ”āļ›āļĢāļ°āļŠāļ‡āļ„āđŒāđ€āļ”āļĩāļĒāļ§āđāļĨāļ°āļĄāļĩ Interface āļ—āļĩāđˆāļŠāļąāļ”āđ€āļˆāļ™
  • Provider āđāļĨāļ° Version Constraint: āļĢāļ°āļšāļļ Version āđ€āļŠāļĄāļ­āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰ Infrastructure āļŠāļĢāđ‰āļēāļ‡āļ‹āđ‰āļģāđ„āļ”āđ‰
  • CI/CD Integration: āļāļēāļĢāļĢāļ§āļĄ Terraform āđ€āļ‚āđ‰āļēāļāļąāļš Pipeline āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļĄāļĩāļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄāđāļĨāļ°āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ—āļĩāđˆāļ”āļĩ

āļŠāļģāļŦāļĢāļąāļšāļœāļđāđ‰āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļĻāļķāļāļĐāļēāđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄāđ€āļāļĩāđˆāļĒāļ§āļāļąāļš DevOps āļŠāļēāļĄāļēāļĢāļ–āļ­āđˆāļēāļ™āļšāļ—āļ„āļ§āļēāļĄ āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒāļ‡āļēāļ™ DevOps āļ—āļĩāđˆāļ„āļ§āļĢāļĢāļđāđ‰ āđāļĨāļ° āļāļēāļĢ Deploy āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļšāļ™ Kubernetes āđ€āļžāļ·āđˆāļ­āđ€āļ•āļĢāļĩāļĒāļĄāļ„āļ§āļēāļĄāļžāļĢāđ‰āļ­āļĄāđƒāļŦāđ‰āļ„āļĢāļšāļ–āđ‰āļ§āļ™āļĒāļīāđˆāļ‡āļ‚āļķāđ‰āļ™

āđ€āļĢāļīāđˆāļĄāļāļķāļāļ‹āđ‰āļ­āļĄāđ€āļĨāļĒ!

āļ—āļ”āļŠāļ­āļšāļ„āļ§āļēāļĄāļĢāļđāđ‰āļ‚āļ­āļ‡āļ„āļļāļ“āļ”āđ‰āļ§āļĒāļ•āļąāļ§āļˆāļģāļĨāļ­āļ‡āļŠāļąāļĄāļ āļēāļĐāļ“āđŒāđāļĨāļ°āđāļšāļšāļ—āļ”āļŠāļ­āļšāđ€āļ—āļ„āļ™āļīāļ„āļ„āļĢāļąāļš

āđāļ—āđ‡āļ

#terraform
#infrastructure-as-code
#devops
#interview
#iac
#hcl

āđāļŠāļĢāđŒ

āļšāļ—āļ„āļ§āļēāļĄāļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ DevOps āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ DevOps āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™: āļ„āļđāđˆāļĄāļ·āļ­āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒ 2026

āđ€āļ•āļĢāļĩāļĒāļĄāļ•āļąāļ§āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ DevOps āļ”āđ‰āļ§āļĒāļ„āļģāļ–āļēāļĄāļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļĢāļđāđ‰āđ€āļāļĩāđˆāļĒāļ§āļāļąāļš CI/CD, Kubernetes, Docker, Terraform āđāļĨāļ°āđāļ™āļ§āļ›āļāļīāļšāļąāļ•āļī SRE āļžāļĢāđ‰āļ­āļĄāļ„āļģāļ•āļ­āļšāļĨāļ°āđ€āļ­āļĩāļĒāļ”

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Kubernetes āđ€āļāļĩāđˆāļĒāļ§āļāļąāļš Pods, Services āđāļĨāļ° Deployments

āļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Kubernetes: āļ­āļ˜āļīāļšāļēāļĒ Pods, Services āđāļĨāļ° Deployments āļ­āļĒāđˆāļēāļ‡āļĨāļ°āđ€āļ­āļĩāļĒāļ”

āļ„āļģāļ–āļēāļĄāļŠāļąāļĄāļ āļēāļĐāļ“āđŒ Kubernetes āđ€āļāļĩāđˆāļĒāļ§āļāļąāļš Pods, Services āđāļĨāļ° Deployments āļžāļĢāđ‰āļ­āļĄāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡ YAML āļāļĨāđ„āļ networking āļ āļēāļĒāđƒāļ™ āđāļĨāļ°āļāļĨāļĒāļļāļ—āļ˜āđŒ scaling āļŠāļģāļŦāļĢāļąāļšāļ›āļĩ 2026

āļ„āļđāđˆāļĄāļ·āļ­ Docker āļˆāļēāļāļāļēāļĢāļžāļąāļ’āļ™āļēāļŠāļđāđˆāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡

Docker: āļˆāļēāļāļāļēāļĢāļžāļąāļ’āļ™āļēāļŠāļđāđˆāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡

āļ„āļđāđˆāļĄāļ·āļ­ Docker āļ‰āļšāļąāļšāļŠāļĄāļšāļđāļĢāļ“āđŒāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢ containerize āđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™ Dockerfile, Docker Compose, multi-stage build āđāļĨāļ°āļāļēāļĢ deploy āļŠāļđāđˆ production āļžāļĢāđ‰āļ­āļĄāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļˆāļĢāļīāļ‡