Lewati ke konten utama
nafies

Infrastructure as Code

Infrastructure as Code dan Manfaatnya

Mengapa infrastruktur sebaiknya ditulis sebagai kode, bagaimana alur kerja Terraform, dan hal yang perlu diwaspadai seperti state dan drift.

Penulis
Muhamad Nafis
Dipublikasikan
Waktu baca
3 menit

Konten contoh. Artikel ini disiapkan sebagai contoh dari template. Tinjau keakuratan dan sesuaikan isinya sebelum dipublikasikan.

Daftar isi

Bayangkan server produksi yang dikonfigurasi manual dua tahun lalu. Tidak ada yang ingat persis port mana yang dibuka, versi paket apa yang dipasang, atau mengapa ada aturan firewall tertentu. Infrastructure as Code (IaC) menjawab masalah ini dengan menjadikan definisi infrastruktur sebagai kode yang disimpan, ditinjau, dan dijalankan seperti kode aplikasi.

Apa itu Infrastructure as Code

IaC adalah praktik mendefinisikan resource infrastruktur, seperti jaringan, server, database, dan DNS, dalam file konfigurasi. Tool IaC membaca file tersebut lalu membuat atau mengubah resource agar sesuai dengan definisi.

Ada dua pendekatan utama:

PendekatanAnda menulisContoh tool
DeklaratifKondisi akhir yang diinginkanTerraform, OpenTofu, CloudFormation, Pulumi
Imperatif / proseduralLangkah-langkah untuk mencapai kondisiSkrip shell, sebagian penggunaan Ansible

Pendekatan deklaratif membuat tool bertanggung jawab menghitung perbedaan antara kondisi saat ini dan kondisi yang diinginkan. Anda cukup menjelaskan apa yang dibutuhkan, bukan bagaimana membuatnya langkah demi langkah.

Manfaat utama

Dapat dibuat ulang. Environment staging dan production dapat dibangun dari definisi yang sama, sehingga perbedaan di antara keduanya disengaja dan terlihat.

Dapat ditinjau. Perubahan infrastruktur melewati pull request. Reviewer dapat melihat rencana perubahan sebelum diterapkan.

Riwayat yang jelas. Git mencatat siapa mengubah apa dan kapan, lengkap dengan alasannya di pesan commit.

Dokumentasi yang selalu terbaru. Kode adalah sumber kebenaran tentang infrastruktur yang sedang berjalan, bukan dokumen yang terlupa diperbarui.

Pemulihan lebih cepat. Ketika resource rusak atau terhapus, definisi yang sama dapat dipakai untuk membangunnya kembali.

Contoh dengan Terraform

Contoh berikut mendefinisikan bucket penyimpanan untuk backup beserta versioning-nya.

main.tf
hcl
terraform {
  required_version = ">= 1.10"
 
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 6.0"
    }
  }
}
 
provider "aws" {
  region = var.region
}
 
resource "aws_s3_bucket" "backup" {
  bucket = "${var.project}-backup"
 
  tags = {
    Project   = var.project
    ManagedBy = "terraform"
  }
}
 
resource "aws_s3_bucket_versioning" "backup" {
  bucket = aws_s3_bucket.backup.id
 
  versioning_configuration {
    status = "Enabled"
  }
}

Alur kerjanya terdiri dari beberapa perintah:

bash
terraform init      # unduh provider dan siapkan backend state
terraform fmt       # rapikan format kode
terraform validate  # periksa sintaks dan referensi
terraform plan      # tampilkan perubahan yang akan dilakukan
terraform apply     # terapkan perubahan setelah ditinjau

Langkah plan adalah inti dari keamanan IaC. Biasakan membaca output-nya dengan teliti, terutama baris yang menandakan resource akan dihapus atau dibuat ulang.

State: catatan tentang dunia nyata

Terraform menyimpan pemetaan antara kode dan resource nyata di file state. Untuk kerja tim, state sebaiknya disimpan di remote backend dengan locking, agar dua orang tidak menerapkan perubahan secara bersamaan.

backend.tf
hcl
terraform {
  backend "s3" {
    bucket       = "contoh-terraform-state"
    key          = "production/terraform.tfstate"
    region       = "ap-southeast-1"
    encrypt      = true
    use_lockfile = true
  }
}

Drift dan cara menghadapinya

Drift terjadi ketika resource diubah di luar kode, misalnya melalui console cloud saat menangani insiden. Akibatnya, kode tidak lagi mencerminkan kondisi nyata dan plan berikutnya dapat menampilkan perubahan yang mengejutkan.

Cara mengurangi drift:

  • Jadikan perubahan melalui kode sebagai jalur standar, termasuk untuk perbaikan darurat yang dicatat ulang setelahnya.
  • Jalankan terraform plan terjadwal di CI untuk mendeteksi perbedaan.
  • Batasi hak akses tulis ke console production.

Tantangan yang perlu diperhitungkan

IaC membawa manfaat besar, tetapi tidak gratis. Ada kurva belajar untuk bahasa dan konsep tool, refaktor kode infrastruktur perlu kehati-hatian karena dapat memicu pembuatan ulang resource, dan pengelolaan secret harus dirancang sejak awal. Mulailah dari resource yang paling sering berubah atau paling berisiko, lalu perluas cakupannya secara bertahap.

Penutup

Infrastructure as Code mengubah infrastruktur dari sesuatu yang diingat menjadi sesuatu yang ditulis. Hasilnya adalah environment yang dapat dibuat ulang, perubahan yang dapat ditinjau, dan pemulihan yang tidak bergantung pada ingatan satu orang.

CI/CD

Memahami CI/CD dari Commit sampai Deployment

Apa yang sebenarnya terjadi setelah Anda menekan git push: dari continuous integration, artefak yang immutable, sampai strategi rilis dan rollback.

4 menit baca

Butuh bantuan menerapkannya?

Bila tim Anda ingin merapikan alur rilis, infrastruktur, atau monitoring, ceritakan kondisinya melalui form brief.