Terraform Lab: Using `locals` (Real Project Style)

# aws# devops# terraform# tutorial
Terraform Lab: Using `locals` (Real Project Style)Aisalkyn Aidarova

📁 Project Structure terraform-locals-lab/ ├── main.tf ├── variables.tf ├──...

📁 Project Structure

terraform-locals-lab/
├── main.tf
├── variables.tf
├── outputs.tf
├── providers.tf
├── terraform.tfvars
Enter fullscreen mode Exit fullscreen mode

1️⃣ providers.tf

provider "aws" {
  region = var.aws_region
}
Enter fullscreen mode Exit fullscreen mode

2️⃣ variables.tf

👉 Only inputs (NO hardcoding)

variable "aws_region" {
  type = string
}

variable "project_name" {
  type = string
}

variable "environment" {
  type = string
}

variable "bucket_suffix" {
  type = string
}
Enter fullscreen mode Exit fullscreen mode

3️⃣ locals (MAIN PART)

👉 This is where magic happens

locals {
  name_prefix = "${var.project_name}-${var.environment}"

  common_tags = {
    Project     = var.project_name
    Environment = var.environment
    ManagedBy   = "Terraform"
  }

  bucket_name = "${local.name_prefix}-${var.bucket_suffix}"
}
Enter fullscreen mode Exit fullscreen mode

4️⃣ main.tf

resource "aws_s3_bucket" "this" {
  bucket = local.bucket_name

  tags = local.common_tags
}
Enter fullscreen mode Exit fullscreen mode

5️⃣ terraform.tfvars

aws_region    = "us-east-2"
project_name  = "jumptotech"
environment   = "dev"
bucket_suffix = "lab"
Enter fullscreen mode Exit fullscreen mode

6️⃣ outputs.tf

output "bucket_name" {
  value = local.bucket_name
}
Enter fullscreen mode Exit fullscreen mode

🚀 How to Run

terraform init
terraform plan
terraform apply
Enter fullscreen mode Exit fullscreen mode

🔍 What You Will See

Bucket created like:

jumptotech-dev-lab
Enter fullscreen mode Exit fullscreen mode

👉 That name came from:

  • variable + locals (NOT hardcoded)

🔁 Test Real DevOps Behavior

Change environment:

environment = "prod"
Enter fullscreen mode Exit fullscreen mode

👉 Run again:

terraform apply
Enter fullscreen mode Exit fullscreen mode

Now bucket becomes:

jumptotech-prod-lab
Enter fullscreen mode Exit fullscreen mode

🧠 What You Learned

✔ No hardcoding
✔ Reusable naming
✔ Centralized logic
✔ Clean production code


🔥 Bonus (VERY IMPORTANT)

Add logic (real interview level):

locals {
  is_prod = var.environment == "prod"
}
Enter fullscreen mode Exit fullscreen mode

Use it:

resource "aws_s3_bucket_versioning" "this" {
  bucket = aws_s3_bucket.this.id

  versioning_configuration {
    status = local.is_prod ? "Enabled" : "Suspended"
  }
}
Enter fullscreen mode Exit fullscreen mode

👉 In prod → versioning ON
👉 In dev → OFF


🎯 Interview Ready Answer

👉 "In this lab, locals are used to dynamically generate resource names, centralize tagging strategy, and control behavior like enabling versioning based on environment."