Infrastructure as Code

Infrastructure as Code #

Infrastructure as Code (IaC) adalah pendekatan untuk mendefinisikan, menyediakan, dan mengelola infrastruktur menggunakan kode alih-alih konfigurasi manual melalui UI cloud atau perintah ad-hoc.

Dengan IaC, resource seperti server, network, load balancer, database, firewall, IAM, hingga monitoring didefinisikan dalam file deklaratif atau imperatif yang dapat:

  • Disimpan di version control (Git)
  • Direview seperti code biasa
  • Di-deploy secara otomatis
  • Direproduksi secara konsisten

Prinsip utamanya: Infrastructure should be reproducible, predictable, and auditable.

Masalah Infrastruktur Tradisional (Tanpa IaC) #

Tanpa IaC, tim biasanya menghadapi:

🔴 Configuration Drift #

  • Server A dan B “harusnya sama” tapi kenyataannya beda
  • Hotfix manual lupa dicatat

🔴 Tidak Reproducible #

  • Tidak bisa dengan mudah membuat environment yang identik (dev, staging, prod)

🔴 Human Error Tinggi #

  • Salah klik security group
  • Salah subnet
  • Salah region

🔴 Scaling Lambat #

  • Provisioning manual butuh waktu lama

🔴 Tidak Ada Audit Trail #

  • Sulit menjawab: “siapa mengubah apa, kapan, dan kenapa”

IaC hadir untuk menyelesaikan semua problem ini.


Konsep Dasar Infrastructure as Code #

Infrastructure = Code #

  • Infrastruktur ditulis dalam file (HCL, YAML, JSON, DSL)
  • Bisa di-review, di-test, dan di-rollback

Declarative vs Imperative #

Declarative (Disarankan) #

“Saya mau hasil akhirnya seperti ini”

Contoh:

  • Terraform
  • CloudFormation
  • ARM Template

Kelebihan:

  • Lebih idempotent
  • Lebih aman
  • Mudah di-maintain

Imperative #

“Lakukan langkah A, lalu B, lalu C”

Contoh:

  • Script Bash
  • CLI provisioning manual

Kekurangan:

  • Error-prone
  • Sulit diulang dengan konsisten

Tool Infrastructure as Code Populer #

Terraform #

  • Multi-cloud (AWS, GCP, Azure, dll)
  • Declarative
  • State-based
  • Sangat populer

CloudFormation (AWS) #

  • Native AWS
  • Tight integration
  • YAML / JSON

ARM / Bicep (Azure) #

  • Native Azure
  • Declarative

Pulumi #

  • Menggunakan bahasa pemrograman (Go, TS, Python)
  • Lebih fleksibel, tapi kompleks

Lifecycle Infrastructure dengan IaC #

Code (Git)
  ↓
Plan (Preview perubahan)
  ↓
Review (PR)
  ↓
Apply (Provisioning)
  ↓
State Update

Best practice: tidak ada perubahan infra langsung di production tanpa melalui pipeline ini.


Manfaat Utama Infrastructure as Code #

✅ Konsistensi Environment #

Dev = Staging = Prod (secara struktur)

✅ Scalability #

Provision ratusan resource dalam hitungan menit

✅ Audit & Compliance #

  • Semua perubahan tercatat
  • Mudah memenuhi standar compliance

✅ Disaster Recovery #

  • Infra bisa di-recreate dari nol

✅ Collaboration #

  • Infra bisa di-PR dan di-review

Best Practices Infrastructure as Code #

Simpan IaC di Version Control #

  • Gunakan Git
  • Satu repo atau mono-repo sesuai skala

Gunakan Remote State #

Contoh:

  • S3 + DynamoDB (Terraform)
  • GCS Backend

Tujuan:

  • Hindari state corruption
  • Locking saat apply

Pisahkan Environment #

❌ Jangan:

main.tf (dev + prod)

✅ Lakukan:

/envs
  /dev
  /staging
  /prod

Atau gunakan:

  • Workspace
  • Variable environment

Modularisasi Infrastructure #

Gunakan module:

  • network
  • compute
  • database
  • iam

Manfaat:

  • Reusable
  • Lebih rapi
  • Mudah di-maintain

Jangan Hardcode Secret #

❌ Salah:

password = "admin123"

✅ Benar:

  • Secret Manager
  • Vault
  • Environment variable

Selalu Gunakan Plan sebelum Apply #

terraform plan

Tujuan:

  • Melihat impact
  • Mencegah destructive change

Best practice:

  • Apply hanya dari hasil plan yang di-review

Batasi Akses Apply #

  • Tidak semua orang boleh apply
  • Gunakan IAM Role
  • Production lebih ketat

Gunakan CI/CD untuk IaC #

Pipeline contoh:

PR → validate → plan → review → apply

Manfaat:

  • Konsisten
  • Minim human error

Lakukan Validation & Linting #

Contoh:

  • terraform validate
  • tflint
  • checkov (security)

Hindari Manual Change (No ClickOps) #

Jika terpaksa:

  • Catat
  • Reconcile kembali ke IaC

Rule emas:

“Jika tidak ada di repo, berarti tidak ada”


Kesalahan Umum dalam IaC #

  • ❌ State tidak di-backup
  • ❌ Resource terlalu besar dalam satu stack
  • ❌ Tidak ada tagging
  • ❌ Apply langsung ke production
  • ❌ Tidak ada dokumentasi module

IaC dan Security #

IaC mendukung:

  • Security by design
  • Policy as Code
  • Least privilege

Contoh:

  • Open Policy Agent (OPA)
  • Sentinel (Terraform Enterprise)

Ringkasan #

Infrastructure as Code bukan sekadar tool, tapi mindset.

Dengan IaC:

  • Infrastruktur = software
  • Perubahan terkontrol
  • Sistem lebih stabil
  • Scaling lebih cepat

Best infrastructure is boring infrastructure — predictable, repeatable, and automated.


Checklist Cepat IaC #

  • Infra di Git
  • Remote state
  • Modular
  • Secret aman
  • CI/CD
  • Plan sebelum apply
  • Tidak ClickOps

Penutup #

Infrastructure as Code bukan sekadar tren DevOps, melainkan fondasi penting untuk membangun sistem yang scalable, aman, dan berkelanjutan.

Di skala kecil, IaC membantu menghindari kesalahan manual dan inkonsistensi environment. Di skala besar, IaC menjadi enabler utama untuk:

  • Scaling cepat
  • High availability
  • Disaster recovery
  • Compliance dan audit

Tanpa IaC, infrastruktur akan cepat berubah menjadi fragile system yang sulit dipahami bahkan oleh timnya sendiri.

Sebaliknya, dengan menerapkan IaC secara disiplin dan mengikuti best practice:

  • Infrastruktur menjadi predictable
  • Perubahan menjadi terkontrol
  • Tim dapat fokus ke value bisnis, bukan firefighting

Treat your infrastructure like software — versioned, reviewed, tested, and automated.

Jika infrastrukturmu masih bergantung pada klik manual dan konfigurasi tak terdokumentasi, itu bukan soal jika akan bermasalah — tapi kapan.

Mulailah kecil, konsisten, dan otomatis. IaC adalah investasi jangka panjang yang hampir selalu terbayar.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact