Menerapkan Terraform State di AWS Tanpa Drama DynamoDB


Kalau pernah ngerasain terraform apply rame-rame bareng 2-3 orang sekaligus, tapi gak ada remote state… selamat! Kamu udah unlock salah satu mode hardcore di dunia DevOps πŸ˜‚

🎯 Latar Belakang

Di kantor lama, gua nemuin kasus yang (kayaknya) umum banget di banyak tim kecil: semua orang pegang Terraform, semua pake state lokal, dan yang paling krusial: gak ada yang apply bareng… kecuali apply tanpa ngomong-ngomong.

Jadi, gua putusin buat ngerapiin sedikit. Target:

  • Pisahin state masing-masing project ke satu backend rapi
  • Simpen state di S3
  • Tanpa pake DynamoDB (karena mager setupnya, dan ternyata udah gak perlu lagi)

🧱 Struktur Proyek

  • terraform-aws-project/
  • providers.tf
  • main.ts
  • variables.ts
  • backend-config.hcl
  • README.md
  • modules/
    • network/
      • main.tf
      • variables.tf
    • compute/
      • main.tf
      • outputs.tf

βš™οΈ Konfigurasi Backend S3 dengan use_lockfile

Pastiin bucket fadharpra-terraform-state-bucket (atau bucket kalian sendiri) udah dibuat terlebih dulu, karena file key seperti lockfile-test/terraform.tfstate akan disimpan di dalam bucket tersebut dan dibaca saat Terraform apply. Di setiap project (biasanya di providers.tf), tambahin:

terraform {
  backend "s3" {
    bucket = "fadharpra-terraform-state-bucket"
    region = "ap-southeast-1"
    key = "lockfile-test/terraform.tfstate"
    use_lockfile = true
 }
}

Atau bisa dipisah filenya, tinggal buat file baru namanya backend-config.hcl:

bucket         = "fadharpra-terraform-state-bucket"
key            = "production/website.tfstate"
region         = "ap-southeast-1"
use_lockfile   = true
encrypt        = true

Yup, sejak Terraform 1.7+, kita bisa locking langsung di S3 β€” tanpa DynamoDB. Terraform otomatis bikin file .lock di bucket selama apply berlangsung.

πŸš€ Langkah Setup

terraform init -backend-config=../backend-config.hcl
terraform plan
terraform apply

Kalau ada orang lain yang apply barengan:

β”‚ Error: Error acquiring the state lock
β”‚ 
β”‚ Error message: resource temporarily unavailable
β”‚ Lock Info:
β”‚   ID:        6c4d7907-ccb1-15c3-2e68-80cc0459f2f4
β”‚   Path:      terraform.tfstate
β”‚   Operation: OperationTypeApply
β”‚   Who:       fadhliari@MacBook-Air-Fadhli.local
β”‚   Version:   1.11.4
β”‚   Created:   2025-05-19 06:36:42.430544 +0000 UTC
β”‚   Info:
β”‚ 
β”‚ ...

πŸŽ‰ Artinya locking jalan.

🧠 Kenapa Ini Penting?

Karena terraform.tfstate itu bukan file biasa. Dia nyimpen semua β€œrealita” dari resource yang pernah dibuat. Kalau dua orang apply bareng, walaupun resource-nya beda, bisa kacau karena:

  • State gak tau resource baru dari orang lain
  • Bisa kehapus, diubah, atau duplicate

Biar gak ada alasan β€œeh kok VM-nya ilang ya?”

πŸ’¬ Penutup

Beresin struktur Terraform itu bukan kerja sekali. Tapi dengan langkah kecil kayak ini β€” pake S3, aktifin use_lockfile, dan pisahin per project β€” udah cukup buat ngehindarin 90% drama yang biasanya terjadi di tim kecil.

Kalau kalian punya cerita chaos pas terraform apply, drop di komentar atau connect bareng aja. Selalu seru ngobrolin kasus DevOps gini πŸ˜„