Mengapa Anda Harus Selalu Melihat Rencana Sebelum Menjalankan Terraform
Anda baru saja selesai menulis konfigurasi Terraform untuk server dan database baru. File-nya terlihat benar. Anda jalankan terraform apply dan menunggu. Beberapa detik kemudian, Anda sadar bahwa server yang dibuat dua kali lebih besar dari yang dibutuhkan, dan database berada di region yang salah. Sekarang Anda harus membongkar semuanya dan memulai dari awal.
Skenario ini terus terjadi di tim-tim yang baru mengenal Infrastructure as Code. Godaan untuk melompat langsung dan menerapkan perubahan memang kuat. Tapi ada satu langkah yang menghemat waktu, uang, dan frustrasi: melihat rencana sebelum mengeksekusinya.
Apa yang Terjadi Jika Anda Melewatkan Rencana
Saat Anda menjalankan terraform apply secara langsung, Terraform segera mulai membuat, memodifikasi, atau menghapus resource berdasarkan konfigurasi Anda. Jika ada yang salah, Anda baru mengetahuinya setelah perubahan terjadi. Rollback mungkin mudah untuk beberapa resource, tetapi untuk yang lain bisa melibatkan pembersihan manual, tiket dukungan ke penyedia cloud, atau downtime bagi pengguna.
Masalahnya bukan hanya tentang kesalahan konfigurasi. Bahkan ketika konfigurasi Anda benar secara teknis, perubahan tersebut mungkin memiliki efek samping yang tidak Anda antisipasi. Perubahan konfigurasi jaringan bisa memutus konektivitas antar layanan. Pengurangan ukuran penyimpanan bisa menyebabkan kehilangan data. Pembaruan security group bisa secara tidak sengaja mengekspos resource internal ke internet.
Anda membutuhkan cara untuk melihat pratinjau apa yang akan dilakukan Terraform sebelum benar-benar melakukannya.
Bagaimana Terraform Plan Bekerja
Perintah terraform plan menghasilkan apa yang disebut execution plan. Perintah ini membaca file konfigurasi Anda dan membandingkannya dengan status infrastruktur saat ini, yang disimpan dalam file state Terraform. Outputnya menunjukkan secara persis resource apa yang akan dibuat, dimodifikasi, atau dihapus, beserta detail setiap perubahan.
Perbedaan kritisnya adalah terraform plan tidak benar-benar membuat perubahan apa pun. Ia hanya membaca dan membandingkan. Tidak ada resource yang dibuat, diperbarui, atau dihancurkan. Anda bisa menjalankannya berkali-kali tanpa memengaruhi infrastruktur Anda.
Berikut yang terjadi saat Anda menjalankannya:
terraform plan
Terraform terhubung ke provider Anda, membaca konfigurasi, memeriksa status saat ini, dan mencetak ringkasan tindakan yang direncanakan. Untuk konfigurasi server dan database dari contoh sebelumnya, outputnya mungkin terlihat seperti ini:
- Satu server virtual akan dibuat dengan 2 CPU core dan 8 GB RAM
- Satu database akan dibuat dengan penyimpanan 100 GB
- Kedua resource akan terhubung melalui jaringan internal
Jika Anda sudah memiliki server yang berjalan dan Anda mengubah konfigurasinya, plan akan menunjukkan bahwa server yang ada akan diperbarui di tempat (in-place update), bukan dihancurkan dan dibuat ulang. Perbedaan ini penting karena pembaruan di tempat biasanya lebih aman dan lebih cepat daripada penggantian.
Mengapa Rencana Penting untuk Workflow Anda
Execution plan memberi Anda tiga hal yang sulit didapatkan sebaliknya.
Pertama, Anda dapat memverifikasi bahwa perubahan Anda sesuai dengan yang Anda maksudkan. Sebelum Anda berkomitmen untuk menerapkan perubahan, Anda memiliki kesempatan untuk meninjau detailnya. Apakah Anda tidak sengaja mengatur tipe instance yang salah? Apakah versi engine database sudah benar? Plan menunjukkan detail ini dengan jelas.
Kedua, Anda dapat menangkap efek samping yang tidak Anda pikirkan. Mungkin Anda mengubah variabel yang memengaruhi beberapa resource. Mungkin perubahan kecil pada konfigurasi memicu penggantian resource alih-alih pembaruan. Plan memunculkan dependensi tersembunyi ini.
Ketiga, Anda dapat membagikan plan dengan orang lain. Dalam pengaturan tim, tidak semua orang perlu memahami sintaks Terraform. Tapi sebagian besar engineer dapat membaca output plan dan menemukan potensi masalah. Seorang administrator database dapat memverifikasi bahwa konfigurasi penyimpanan sudah sesuai. Seorang security engineer dapat memeriksa bahwa aturan jaringan tidak terlalu permisif.
Menggunakan Plan di Pipeline CI/CD
Di lingkungan tim, terraform plan biasanya diotomatisasi dalam pipeline CI/CD. Ketika seseorang membuka pull request yang mengubah konfigurasi infrastruktur, pipeline menjalankan terraform plan secara otomatis dan memposting hasilnya sebagai komentar pada pull request tersebut.
Workflow ini berarti seluruh tim dapat meninjau apa yang akan berubah sebelum kode digabungkan. Diskusi terjadi di sekitar output plan, bukan di sekitar deskripsi abstrak tentang apa yang mungkin dilakukan kode. Pertanyaan seperti "Mengapa resource ini diganti?" atau "Haruskah security group ini terbuka ke internet?" terjawab sebelum perubahan apa pun diterapkan.
Diagram alur berikut mengilustrasikan siklus plan-review-apply yang umum digunakan dalam pipeline CI/CD:
Beberapa tim melangkah lebih jauh dengan mewajibkan persetujuan pada output plan sebelum langkah apply dapat dilanjutkan. Plan menjadi checkpoint yang mengawal perubahan ke infrastruktur produksi.
Kesalahan Umum: Rencana yang Kedaluwarsa
Ada satu keterbatasan penting yang perlu dipahami. Execution plan adalah snapshot dari apa yang akan dilakukan Terraform pada saat Anda menjalankan perintah. Jika orang lain mengubah infrastruktur di antara waktu Anda menjalankan terraform plan dan terraform apply, plan tersebut mungkin tidak lagi akurat.
Misalnya, Anda menjalankan terraform plan dan melihat bahwa satu server akan dibuat. Sebelum Anda menjalankan terraform apply, rekan setim membuat server yang sama secara manual melalui konsol cloud. Saat Anda menjalankan terraform apply, Terraform akan mendeteksi konflik dan gagal, atau lebih buruk lagi, mungkin membuat resource duplikat tergantung pada bagaimana konfigurasi Anda ditulis.
Inilah mengapa workflow yang baik menjaga langkah plan dan apply tetap berdekatan. Di pipeline CI/CD, pipeline yang sama biasanya menjalankan kedua langkah secara berurutan. Untuk pengembangan lokal, Anda harus menjalankan plan segera sebelum apply, bukan berjam-jam atau berhari-hari sebelumnya.
Beberapa tim juga menggunakan state locking untuk mencegah modifikasi bersamaan. Ketika satu orang atau pipeline sedang menjalankan plan atau apply, yang lain diblokir untuk membuat perubahan hingga operasi selesai.
Daftar Periksa Praktis untuk Menggunakan Terraform Plan
- Jalankan
terraform plansebelum setiapterraform apply, bahkan untuk perubahan kecil - Tinjau output plan untuk penggantian atau penghapusan resource yang tidak terduga
- Periksa bahwa jumlah resource yang dibuat sesuai dengan ekspektasi Anda
- Cari perubahan pada security group, aturan jaringan, dan kebijakan IAM
- Bagikan output plan dengan anggota tim yang relevan untuk ditinjau
- Di CI/CD, posting plan sebagai komentar pada pull request
- Jaga langkah plan dan apply tetap berdekatan dalam waktu
- Gunakan state locking untuk mencegah konflik di lingkungan tim
Apa yang Anda Dapatkan dari Kebiasaan Ini
Kebiasaan menjalankan terraform plan sebelum setiap perubahan menggeser workflow Anda dari reaktif menjadi disengaja. Alih-alih menemukan masalah setelah resource dibuat, Anda menangkapnya saat masih berupa teks di layar. Biaya memperbaiki kesalahan dalam plan adalah nol. Biaya memperbaikinya setelah apply bisa berupa jam-jam debugging, pembersihan manual, dan koordinasi dengan tim Anda.
Lain kali Anda menulis konfigurasi Terraform, jalankan plan terlebih dahulu. Baca outputnya dengan saksama. Lalu putuskan apakah akan apply. Satu langkah ekstra itu yang membedakan tim yang mengelola infrastruktur dengan percaya diri dari tim yang terus-menerus membersihkan kekacauan mereka sendiri.