Saat Terraform Apply Benar-Benar Berjalan: Apa yang Terjadi Setelah Anda Menyetujui Rencana
Anda sudah meninjau keluaran rencana. Anda sudah memastikan bahwa Terraform akan membuat dua instance EC2, tidak menghapus basis data yang sudah ada, dan memasang security group yang benar. Sekarang Anda mengetik terraform apply dan menekan Enter. Terminal bergulir dengan pesan seperti aws_instance.app_server: Creating... dan Anda menunggu.
Momen inilah saat infrastructure-as-code berhenti menjadi file konfigurasi dan menjadi infrastruktur nyata. Server menyala. Jaringan dikonfigurasi. Catatan DNS dibuat. Tapi apa sebenarnya yang terjadi selama terraform apply, dan bagaimana Anda memastikan langkah ini tidak menimbulkan masalah?
Mengapa Anda Harus Menggunakan File Rencana yang Disimpan
Cara teraman untuk menjalankan terraform apply adalah dengan memberinya file rencana yang telah Anda buat sebelumnya. Setelah menjalankan terraform plan -out=plan.tfplan, Anda dapat mengeksekusi terraform apply plan.tfplan. Ini menjamin bahwa Terraform menerapkan persis apa yang Anda tinjau, tidak lebih, tidak kurang.
Berikut adalah urutan perintah yang tepat untuk menghasilkan dan menerapkan file rencana yang disimpan:
terraform plan -out=plan.tfplan
terraform apply plan.tfplan
Risiko menjalankan terraform apply tanpa file rencana memang halus tapi nyata. Di antara waktu Anda menjalankan terraform plan dan terraform apply, anggota tim lain mungkin menggabungkan perubahan ke konfigurasi yang sama. Atau Anda mungkin mengubah file variabel tanpa menyadarinya. Saat Anda menjalankan terraform apply tanpa rencana yang disimpan, Terraform menjalankan ulang rencana menggunakan konfigurasi apa pun yang ada saat itu. Keluarannya mungkin berbeda dari yang Anda tinjau sepuluh menit lalu.
Untuk lingkungan produksi, selalu gunakan file rencana yang disimpan. Ini menciptakan jejak audit: Anda dapat menunjuk ke plan.tfplan dan berkata "ini persis yang telah disetujui." Untuk lingkungan staging atau pengembangan di mana perubahannya kecil dan sering, kemudahan menjalankan terraform apply tanpa file rencana mungkin bisa diterima. Pahami saja konsekuensinya.
Apa yang Terjadi Selama Proses Apply
Ketika terraform apply dijalankan, ia tidak sekadar "menerapkan konfigurasi." Ia berkomunikasi dengan API penyedia untuk setiap sumber daya yang perlu diubah. Jika Anda membuat aws_instance, Terraform memanggil API AWS EC2 untuk meluncurkan sebuah instance. Jika Anda memperbarui google_storage_bucket, ia memanggil API Google Cloud Storage.
Setiap panggilan API bisa memakan waktu dari milidetik hingga beberapa menit. Membuat mesin virtual biasanya memakan waktu 30 detik hingga beberapa menit. Menyediakan klaster Kubernetes terkelola bisa memakan waktu 10-15 menit. Terraform menampilkan progres di terminal, tetapi tidak memberikan bilah progres untuk setiap sumber daya. Anda akan melihat pesan seperti:
Diagram alir berikut merangkum alur apply dan hasil percabangan saat sukses atau gagal:
aws_instance.app_server: Still creating... [10s elapsed]
aws_instance.app_server: Still creating... [20s elapsed]
Selama waktu ini, Terraform memegang kunci status. Tidak ada orang lain di tim Anda yang dapat menjalankan terraform apply atau terraform plan sampai operasi saat ini selesai atau waktu habis. Ini disengaja: untuk mencegah dua orang memodifikasi infrastruktur yang sama secara bersamaan.
Apa yang Terjadi Saat Apply Berhasil
Setelah semua sumber daya berhasil dibuat atau diperbarui, Terraform menulis status saat ini ke file status. File status ini mencatat setiap sumber daya dengan ID uniknya, semua atribut, dan hubungan antar sumber daya. Misalnya, jika Anda membuat instance EC2 dan memasang security group, file status tahu bahwa aws_instance.app_server terkait dengan aws_security_group.web_sg.
File status ini menjadi sumber kebenaran tunggal untuk infrastruktur Anda. Saat berikutnya Anda menjalankan terraform plan, Terraform membandingkan konfigurasi Anda dengan file status, bukan dengan sumber daya cloud langsung. Inilah sebabnya file status yang rusak atau hilang menyebabkan begitu banyak masalah: Terraform kehilangan titik acuannya.
Apa yang Terjadi Saat Apply Gagal
Kegagalan apply cukup umum sehingga Anda harus tahu cara menanganinya. Pembuatan sumber daya mungkin gagal karena:
- Anda mencapai batas kuota (misalnya, terlalu banyak instance EC2 di suatu region)
- Kredensial penyedia kedaluwarsa atau tidak valid
- Ada konflik dengan sumber daya yang sudah ada (misalnya, mencoba membuat catatan DNS yang sudah ada)
- Penyedia cloud mengalami pemadaman atau pembatasan
Ketika kegagalan terjadi, Terraform tidak memutar balik semuanya. Ia menandai sumber daya yang gagal dan menyimpan status untuk apa pun yang berhasil dibuat. Ini berarti Anda berakhir dengan status parsial: beberapa sumber daya ada, beberapa tidak. Terraform tidak secara otomatis membersihkan sumber daya yang dibuat sebelum kegagalan.
Misalnya, jika Anda membuat lima sumber daya dan yang keempat gagal, tiga sumber daya pertama masih ada di akun cloud Anda. File status mencatat ketiganya sebagai telah dibuat. Anda perlu memutuskan apa yang harus dilakukan selanjutnya:
- Perbaiki masalah (misalnya, minta peningkatan kuota) dan jalankan
terraform applylagi. Terraform akan mencoba membuat sumber daya yang tersisa. - Hancurkan secara manual sumber daya yang telah dibuat dan mulai dari awal.
- Gunakan
terraform destroyuntuk membersihkan semuanya, tetapi hanya jika Anda yakin ingin menghapus semua sumber daya.
Perilaku status parsial ini adalah salah satu alasan mengapa Anda harus menguji perubahan infrastruktur di lingkungan non-produksi terlebih dahulu. Apply yang gagal di produksi dapat meninggalkan infrastruktur Anda dalam keadaan tidak konsisten yang memerlukan intervensi manual.
Daftar Periksa Praktis Sebelum Menjalankan Apply
Sebelum Anda mengetik terraform apply di lingkungan mana pun yang penting, lakukan pemeriksaan berikut:
- Sudahkah Anda meninjau keluaran rencana untuk perubahan yang tidak terduga, terutama penghapusan?
- Apakah file status dicadangkan atau disimpan di backend jarak jauh dengan versioning?
- Apakah Anda memiliki kredensial untuk memutar balik jika terjadi kesalahan?
- Apakah ada jendela pemeliharaan atau pemberitahuan untuk tim?
- Untuk produksi: apakah Anda menggunakan file rencana yang disimpan (
terraform apply plan.tfplan)? - Untuk perubahan basis data: apakah Anda memiliki rencana rollback migrasi yang terpisah dari Terraform?
Kesimpulan Konkret
Menjalankan terraform apply adalah momen ketika konfigurasi Anda menjadi infrastruktur nyata. Gunakan file rencana yang disimpan untuk produksi guna memastikan Anda menerapkan persis apa yang telah ditinjau. Pahami bahwa kegagalan meninggalkan status parsial, bukan rollback otomatis. Dan selalu tahu di mana file status Anda berada dan cara memulihkannya, karena tanpanya, Terraform tidak dapat mengelola infrastruktur Anda sama sekali.