Mengapa Manajemen State dan Environment Penting Sebelum Infrastruktur Anda Bermasalah
Bayangkan Anda dan rekan satu tim sama-sama mengelola server yang sama. Anda memperbarui konfigurasi firewall untuk membuka port 443. Rekan Anda, tanpa sepengetahuan Anda, mengubah konfigurasi yang sama untuk membuka port 80. Anda berdua menjalankan perubahan dalam hitungan menit satu sama lain. Sekarang server memiliki aturan yang saling bertentangan. Perubahan siapa yang berlaku? Tidak ada yang tahu.
Ini adalah masalah nyata pertama yang muncul saat Anda mengelola infrastruktur dengan kode: siapa yang terakhir menerapkan, dialah pemenangnya. Tapi menang bukan berarti perubahan yang tepat telah diterapkan. Mungkin perubahan rekan Anda adalah yang benar, tetapi selesai beberapa detik kemudian. Atau mungkin perubahan Anda yang benar, tetapi tertimpa. Bagaimanapun, kondisi akhir server bukanlah yang diinginkan siapa pun.
Masalah ini memiliki nama: state conflict. State adalah catatan tentang seperti apa infrastruktur Anda saat ini. Saat Anda menulis kode untuk membuat server, file state mencatat bahwa server itu ada, ukurannya, jaringan yang terhubung, dan seterusnya. Tanpa state, perangkat Anda tidak tahu apakah server sudah ada atau perlu dibuat. Tanpa state, perangkat juga tidak dapat mengetahui apa yang berubah sejak terakhir kali Anda menjalankan kode.
Masalah Lingkungan yang Kabur (Environment Blur)
Sekarang pertimbangkan skenario berbeda. Anda sedang mengembangkan fitur baru di laptop. Anda membutuhkan server untuk mengujinya. Anda membuat server di akun cloud Anda, mencoba fitur tersebut, dan lupa menghapusnya. Server itu terus berjalan, terus menimbulkan biaya, dan tidak ada yang tahu keberadaannya. Beberapa minggu kemudian, tim produksi melihat server asing di akun cloud yang sama. Apakah server itu dibuat dengan sengaja? Untuk apa? Apakah aman? Tidak ada yang bisa menjawab.
Kedua masalah — state conflict dan environment mixing — lebih mudah dipahami jika dilihat berdampingan.
Inilah masalah environment mixing. Environment adalah tempat di mana aplikasi atau infrastruktur Anda berjalan. Idealnya, environment development, staging, dan production terpisah dengan jelas. Tetapi ketika semua orang dapat membuat resource di akun cloud yang sama tanpa aturan, environment menjadi kabur. Server development bisa tidak sengaja terhubung ke jaringan production. Database production bisa terhapus karena seseorang menjalankan skrip development di konteks yang salah.
Mengapa Manajemen Manual Menyembunyikan Masalah Ini
Masalah state dan environment tidak muncul saat Anda mengelola infrastruktur secara manual. Saat Anda masuk ke server dan mengubah konfigurasi satu per satu, Anda melihat persis apa yang terjadi. Anda tahu server mana yang Anda masuki. Anda tahu apa yang Anda ubah. Tidak ada file state tersembunyi yang bisa rusak.
Tetapi saat Anda mengelola infrastruktur dengan kode, Anda berhenti bekerja langsung di server. Anda bekerja pada file state. Anda mengubah kode, alat membaca state, membandingkannya dengan kenyataan, lalu membuat perubahan. Proses ini membuat semuanya dapat diulang dan diaudit. Namun, ini juga memperkenalkan mode kegagalan baru.
File state bisa rusak. Dua orang bisa memodifikasi file state yang sama pada waktu bersamaan. State bisa melenceng dari kenyataan ketika seseorang melakukan perubahan manual di luar alat. Environment bisa tercampur karena kode yang sama diterapkan di mana-mana tanpa batasan yang jelas.
Konsep Inti yang Perlu Anda Pahami
State adalah sumber kebenaran untuk infrastruktur Anda. State memberi tahu alat provisioning Anda apa yang sudah ada dan apa yang perlu diubah. Alat populer seperti Terraform, Pulumi, dan AWS CDK semuanya bergantung pada file state. Tanpa state yang akurat, alat-alat ini tidak dapat menentukan apa yang harus dibuat, diperbarui, atau dihapus.
Environment adalah konteks di mana aplikasi Anda berjalan. Setidaknya, sebagian besar tim membutuhkan tiga environment:
- Development: Tempat Anda bereksperimen dan merusak sesuatu. Environment ini harus murah, cepat dibuat ulang, dan terisolasi dari yang lain.
- Staging: Tempat Anda memvalidasi perubahan sebelum production. Environment ini harus mencerminkan production sedekat mungkin tanpa risiko yang sama.
- Production: Tempat pengguna nyata berinteraksi dengan aplikasi Anda. Environment ini memiliki persyaratan stabilitas tertinggi.
Apa yang Terjadi Jika Anda Mengabaikan Manajemen State dan Environment
Tim yang melewatkan fondasi ini akan mengalami pola masalah yang dapat diprediksi:
- Server misterius muncul di akun production. Tidak ada yang tahu siapa yang membuatnya atau mengapa. Tim keamanan panik.
- Deployment rusak karena file state terkunci. Pipeline satu developer memegang kunci state, menghalangi semua orang.
- Staging dan production melenceng. Perubahan yang diuji di staging berfungsi dengan baik, tetapi production berperilaku berbeda karena environment tidak lagi identik.
- Perubahan production yang tidak disengaja. Seorang developer menjalankan skrip yang dimaksudkan untuk development, tetapi sesi terminal mereka mengarah ke environment production. Perubahan konfigurasi sederhana bisa merusak situs.
- Rollback menjadi tidak mungkin. File state tidak lagi cocok dengan kenyataan, sehingga alat tidak dapat kembali ke kondisi baik yang diketahui.
Pendekatan Praktis untuk Memulai
Anda tidak perlu tim platform yang kompleks untuk menyelesaikan masalah ini. Mulailah dengan dasar-dasar:
Pisahkan akun cloud atau proyek per environment. Jika Anda menggunakan AWS, buat akun terpisah untuk dev, staging, dan prod. Jika Anda menggunakan GCP, gunakan proyek terpisah. Ini adalah isolasi terkuat yang bisa Anda dapatkan.
Gunakan penyimpanan state jarak jauh dengan penguncian. Simpan file state Anda di lokasi bersama seperti S3, GCS, atau Azure Blob Storage. Aktifkan penguncian state sehingga dua pipeline tidak dapat memodifikasi state yang sama secara bersamaan.
Beri nama resource secara konsisten. Sertakan nama environment di setiap nama atau tag resource. Ini mencegah kebingungan saat melihat daftar server.
Otomatiskan pembuatan environment. Tulis skrip atau pipeline yang membuat dan menghancurkan environment sesuai permintaan. Jika Anda dapat membuat ulang environment dari awal dalam hitungan menit, Anda mengurangi risiko state drift.
Batasi siapa yang dapat menerapkan perubahan ke production. Gunakan gerbang persetujuan atau akun layanan terpisah untuk deployment production. Tidak semua orang membutuhkan akses production.
Daftar Periksa Cepat untuk Menilai Pengaturan Anda Saat Ini
- Dapatkah Anda mendaftar setiap server atau resource di environment production Anda saat ini?
- Apakah Anda tahu siapa yang membuat setiap resource dan mengapa?
- Dapatkah Anda membuat ulang environment staging dari awal dalam waktu kurang dari satu jam?
- Apakah file state Anda disimpan jarak jauh dengan penguncian yang diaktifkan?
- Apakah environment development, staging, dan production Anda berada di akun atau proyek cloud terpisah?
- Dapatkah seorang developer secara tidak sengaja menerapkan perubahan ke production dari laptop mereka?
Jika Anda menjawab "tidak" untuk salah satu dari ini, Anda memiliki pekerjaan yang harus dilakukan.
Kesimpulan
Manajemen state dan environment bukanlah topik lanjutan yang Anda tangani setelah infrastruktur Anda sudah berjalan. Ini adalah fondasi yang memungkinkan segalanya. Tanpa state yang jelas, alat Anda tidak dapat bekerja dengan benar. Tanpa environment yang jelas, perubahan Anda akan bocor melintasi batas dan menyebabkan kegagalan yang tidak terduga.
Mulailah dengan pemisahan paling sederhana yang dapat Anda kelola: akun atau proyek cloud terpisah untuk setiap environment, state jarak jauh dengan penguncian, dan penamaan yang konsisten. Ini saja akan mencegah sebagian besar masalah umum yang mengganggu tim yang mengelola infrastruktur dengan kode. Lakukan sebelum server misterius muncul, bukan setelahnya.