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:
| Pendekatan | Anda menulis | Contoh tool |
|---|---|---|
| Deklaratif | Kondisi akhir yang diinginkan | Terraform, OpenTofu, CloudFormation, Pulumi |
| Imperatif / prosedural | Langkah-langkah untuk mencapai kondisi | Skrip 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.
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:
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 ditinjauLangkah 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.
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 planterjadwal 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.