Tulis Infrastruktur sebagai Kode Sebelum Kamu Mengklik Tombol Lain

Kamu punya aplikasi yang membutuhkan server dan database. Pendekatan biasanya adalah login ke dashboard penyedia cloud, klik beberapa halaman, pilih tipe instance, konfigurasi penyimpanan, atur jaringan, dan berharap tidak ada langkah yang terlewat. Saat kamu perlu melakukannya lagi untuk staging, kamu ulangi seluruh proses. Ketika anggota tim bertanya infrastruktur apa yang berjalan di produksi, kamu kirimkan mereka tangkapan layar.

Alur kerja ini berfungsi sampai suatu saat tidak berfungsi. Satu checkbox terlewat, satu pemilihan region yang salah, satu aturan security group yang terlupakan, dan aplikasi kamu gagal berjalan atau berjalan dengan kerentanan yang tidak kamu inginkan.

Ada cara yang lebih baik: tulis infrastruktur kamu sebagai kode.

Apa Arti Sebenarnya Infrastruktur sebagai Kode

Infrastruktur sebagai Kode (IaC) adalah praktik mendefinisikan server, database, jaringan, dan sumber daya cloud lainnya dalam file teks, bukan dengan mengklik UI. File-file ini menggambarkan keadaan yang diinginkan dari infrastruktur kamu. Kamu menyimpannya di version control, meninjaunya seperti kode aplikasi, dan menerapkannya secara konsisten di berbagai lingkungan.

Poin utamanya adalah kamu tidak menulis skrip yang mengatakan "langkah satu, buat server, langkah dua, tunggu, langkah tiga, buat database." Sebaliknya, kamu mendeklarasikan apa yang kamu inginkan sebagai keadaan akhir. Alat ini akan menentukan urutan operasi berdasarkan dependensi antar sumber daya.

Menulis Konfigurasi Pertama Kamu

Terraform adalah salah satu alat IaC yang paling banyak digunakan. Kamu menulis file konfigurasi dengan ekstensi .tf. Setiap file mendeklarasikan sumber daya yang kamu butuhkan dan bagaimana mereka terhubung.

Mulailah dengan file bernama main.tf. Hal pertama yang perlu didefinisikan adalah provider. Provider adalah plugin yang memungkinkan Terraform berkomunikasi dengan platform tertentu seperti AWS, Google Cloud, atau Azure. Provider memberi tahu Terraform di mana membuat sumber daya dan kredensial apa yang digunakan.

provider "aws" {
  region = "ap-southeast-1"
}

Setelah provider diatur, kamu mendefinisikan sumber daya. Setiap sumber daya mengikuti pola ini: resource "type" "local_name". Nama lokal hanya digunakan di dalam konfigurasi kamu. Itu bukan nama yang muncul di konsol penyedia cloud kamu.

Berikut cara membuat server virtual, yang oleh AWS disebut instance EC2:

resource "aws_instance" "app_server" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t3.micro"

  tags = {
    Name = "app-server"
  }
}

Dan ini adalah database PostgreSQL menggunakan RDS:

resource "aws_db_instance" "app_database" {
  allocated_storage    = 20
  engine               = "postgres"
  engine_version       = "15"
  instance_class       = "db.t3.micro"
  db_name              = "myapp"
  username             = "admin"
  password             = var.db_password
  skip_final_snapshot  = true
}

Perhatikan sesuatu yang penting: kamu tidak menulis langkah-langkah. Kamu tidak mengatakan "buat server dulu, lalu tunggu sampai siap, lalu buat database." Kamu mendeklarasikan apa yang kamu inginkan. Terraform menganalisis konfigurasi, mengetahui bahwa database tidak bergantung pada server, dan membuatnya secara paralel. Jika satu sumber daya bergantung pada yang lain, Terraform menangani urutannya secara otomatis.

Mengapa Ini Terasa Lebih Berat pada Awalnya

Menulis file konfigurasi membutuhkan lebih banyak waktu di awal daripada mengklik dashboard. Kamu perlu mengetahui tipe sumber daya yang tepat, argumen yang diperlukan, dan cara menyusun file. Dashboard menampilkan menu dropdown dan checkbox. File konfigurasi mengharapkan kamu tahu apa arti ami-0c55b159cbfafe1f0 atau apa yang dimaksud dengan db.t3.micro.

Tetapi biaya awal ini terbayar saat kamu perlu mereplikasi pengaturan. Ingin lingkungan staging yang mirip dengan produksi? Salin file, ubah beberapa nilai, dan jalankan konfigurasi yang sama. Ingin memahami infrastruktur apa yang berjalan? Baca file daripada mencari-cari di konsol. Ingin meninjau perubahan sebelum terjadi? Buka pull request dan biarkan tim kamu berkomentar pada diff.

Simpan Konfigurasi di Version Control

File .tf kamu harus berada di repositori Git. Ini bisa menjadi repositori yang sama dengan kode aplikasi kamu atau repositori infrastruktur terpisah. Either way, setiap perubahan pada infrastruktur melalui alur kerja yang sama seperti perubahan kode: tulis, commit, review, merge, apply.

Ini memberi kamu beberapa manfaat:

  • Setiap perubahan infrastruktur dicatat dengan siapa yang membuatnya dan mengapa.
  • Kamu dapat kembali ke keadaan sebelumnya jika terjadi kesalahan.
  • Anggota tim baru dapat melihat seluruh pengaturan infrastruktur dengan membaca repositori.
  • Pemeriksaan otomatis dapat memvalidasi konfigurasi sebelum mencapai produksi.

Apa yang Tidak Kamu Lakukan

Saat kamu menulis infrastruktur sebagai kode, kamu tidak menulis skrip deployment. Skrip menjalankan perintah secara berurutan. Jika langkah ketiga gagal, skrip berhenti, dan kamu memiliki infrastruktur yang terbuat sebagian. Alat IaC seperti Terraform bersifat deklaratif. Mereka membandingkan keadaan infrastruktur saat ini dengan keadaan yang diinginkan dalam konfigurasi kamu dan hanya membuat perubahan yang diperlukan untuk mencapai keadaan tersebut.

Perbedaan ini penting saat kamu perlu memperbarui infrastruktur. Alih-alih menulis skrip baru yang memperhitungkan keadaan saat ini, kamu memperbarui file konfigurasi. Terraform mencari tahu apa yang harus ditambahkan, diubah, atau dihapus.

Alur Kerja Praktis

Alur kerja khas untuk Terraform memiliki tiga fase: write, plan, apply.

Pertama, kamu menulis atau memodifikasi file .tf kamu. Di sinilah kamu mendefinisikan infrastruktur yang kamu inginkan.

Kedua, kamu menjalankan terraform plan. Perintah ini menunjukkan apa yang akan dilakukan Terraform tanpa benar-benar melakukannya. Ini mencetak diff yang detail: sumber daya mana yang akan dibuat, mana yang akan dimodifikasi, dan mana yang akan dihancurkan. Kamu meninjau rencana ini sebelum melanjutkan.

Ketiga, kamu menjalankan terraform apply untuk mengeksekusi rencana. Terraform melakukan panggilan API ke penyedia cloud kamu untuk membuat, memperbarui, atau menghapus sumber daya hingga keadaan aktual sesuai dengan konfigurasi kamu.

Daftar Periksa Cepat untuk Pengaturan IaC Pertama Kamu

  • Pilih penyedia cloud dan instal CLI Terraform.
  • Buat file main.tf dengan blok provider kamu.
  • Definisikan setidaknya satu sumber daya, seperti mesin virtual atau database.
  • Jalankan terraform init untuk mengunduh plugin provider.
  • Jalankan terraform plan untuk melihat apa yang akan dibuat.
  • Jalankan terraform apply untuk membuat sumber daya.
  • Simpan semua file .tf di repositori Git dan push.

Nilai Sebenarnya Muncul Kemudian

Menulis infrastruktur sebagai kode terasa seperti kerja ekstra pada hari pertama. Pada hari ketiga puluh, saat kamu perlu menambahkan lingkungan baru atau pulih dari kesalahan, ini terasa seperti satu-satunya cara yang masuk akal untuk bekerja. File konfigurasi menjadi sumber kebenaran tunggal untuk infrastruktur kamu. Tidak perlu lagi menebak-nebak apa yang berjalan di produksi. Tidak ada lagi langkah manual yang mungkin dilupakan seseorang. Tidak ada lagi infrastruktur yang hanya diketahui oleh satu orang cara membuatnya kembali.

Mulailah dengan satu sumber daya. Tulis dalam file. Masukkan ke Git. Lalu tambahkan sumber daya berikutnya. Kebiasaan ini terbentuk lebih cepat dari yang kamu kira, dan kepercayaan diri yang diberikannya sepadan dengan hambatan awal.