Praktik terbaik untuk pengujian

Dokumen ini berisi panduan dan rekomendasi pengujian Terraform untuk modul dan konfigurasi Google Cloud.

Pengujian modul dan konfigurasi Terraform terkadang mengikuti pola dan konvensi yang berbeda dari pengujian kode aplikasi. Meskipun menguji kode aplikasi paling banyak melibatkan pengujian logika bisnis aplikasi itu sendiri, pengujian kode infrastruktur secara menyeluruh memerlukan deployment resource cloud nyata untuk meminimalkan risiko kegagalan produksi. Ada beberapa pertimbangan saat menjalankan pengujian Terraform:

  • Menjalankan pengujian Terraform akan menciptakan, mengubah, dan menghancurkan infrastruktur nyata, sehingga pengujian Anda berpotensi memerlukan waktu yang lama dan biaya yang mahal.
  • Anda tidak bisa hanya menguji unit arsitektur menyeluruh. Pendekatan terbaik adalah dengan membagi arsitektur Anda menjadi beberapa modul dan mengujinya satu per satu. Manfaat pendekatan ini mencakup pengembangan iteratif yang lebih cepat karena runtime pengujian yang lebih cepat, pengurangan biaya untuk setiap pengujian, dan penurunan peluang kegagalan uji dari faktor-faktor di luar kendali Anda.
  • Hindari menggunakan kembali status jika memungkinkan. Mungkin ada situasi saat Anda melakukan pengujian dengan konfigurasi yang memiliki data yang sama seperti konfigurasi lain, tetapi idealnya setiap pengujian harus dilakukan terpisah dan tidak boleh menggunakan kembali status di seluruh pengujian.

Menggunakan metode pengujian yang lebih murah terlebih dahulu

Ada beberapa metode yang dapat Anda gunakan untuk menguji Terraform. Dalam urutan biaya, waktu proses, dan kedalaman dari atas ke bawah, metrik tersebut meliputi:

  • Analisis statis: Menguji sintaksis dan struktur konfigurasi tanpa men-deploy resource apa pun menggunakan alat seperti compiler, linter, dan uji coba. Untuk melakukannya, gunakan terraform validate.
  • Pengujian integrasi modul: Untuk memastikan bahwa modul berfungsi dengan benar, uji setiap modul secara terpisah. Pengujian integrasi untuk modul melibatkan deployment modul ke dalam lingkungan pengujian dan memverifikasi bahwa resource yang diharapkan telah dibuat. Ada beberapa framework pengujian yang memudahkan penulisan pengujian sebagai berikut:
  • Pengujian menyeluruh: Dengan memperluas pendekatan pengujian integrasi ke seluruh lingkungan, Anda dapat mengonfirmasi bahwa beberapa modul dapat berfungsi bersama. Dalam pendekatan ini, deploy semua modul yang membentuk arsitektur di lingkungan pengujian baru. Idealnya, lingkungan pengujian harus semirip mungkin dengan lingkungan produksi Anda. Meskipun biayanya mahal, tetapi memberikan keyakinan besar bahwa perubahan tidak merusak lingkungan produksi Anda.

Memulai dari yang kecil

Pastikan pengujian Anda saling melengkapi satu sama lain secara iteratif. Sebaiknya jalankan pengujian yang lebih kecil terlebih dahulu, lalu lanjutkan ke pengujian yang lebih kompleks, menggunakan pendekatan fail fast.

Mengacak project ID dan nama resource

Untuk menghindari konflik penamaan, pastikan konfigurasi Anda memiliki project ID yang unik secara global dan nama resource yang tidak tumpang-tindih dalam setiap project. Untuk melakukannya, gunakan namespace untuk resource Anda. Terraform memiliki penyedia acak bawaan untuk hal ini.

Menggunakan lingkungan terpisah untuk pengujian

Selama pengujian, banyak resource yang dibuat dan dihapus. Pastikan lingkungan diisolasi dari project pengembangan atau produksi untuk menghindari penghapusan yang tidak disengaja selama pembersihan resource. Pendekatan terbaik adalah meminta setiap pengujian membuat project atau folder baru. Untuk menghindari kesalahan konfigurasi, pertimbangkan untuk membuat akun layanan khusus untuk setiap eksekusi uji.

Membersihkan semua resource

Menguji kode infrastruktur berarti Anda men-deploy resource yang sebenarnya. Agar tidak dikenai biaya, pertimbangkan untuk menerapkan langkah pembersihan.

Untuk menghancurkan semua objek jarak jauh yang dikelola oleh konfigurasi tertentu, gunakan perintah terraform destroy. Beberapa framework pengujian memiliki langkah pembersihan bawaan untuk Anda. Misalnya, jika Anda menggunakan Terratest, tambahkan defer terraform.Destroy(t, terraformOptions) ke pengujian. Jika menggunakan Kitchen-Terraform, hapus ruang kerja Anda menggunakan terraform kitchen delete WORKSPACE_NAME.

Setelah menjalankan perintah terraform destroy, jalankan juga prosedur pembersihan tambahan untuk menghapus resource yang gagal dihancurkan Terraform. Lakukan hal ini dengan menghapus project yang digunakan untuk eksekusi uji atau menggunakan alat seperti modul project_cleanup.

Mengoptimalkan waktu proses pengujian

Untuk mengoptimalkan waktu eksekusi uji, gunakan pendekatan berikut:

  • Jalankan pengujian secara paralel. Beberapa framework pengujian mendukung pengoperasian beberapa pengujian Terraform secara bersamaan.
    • Misalnya, dengan Terratest, Anda dapat melakukannya dengan menambahkan t.Parallel() setelah definisi fungsi pengujian.
  • Uji secara bertahap. Pisahkan pengujian Anda ke dalam konfigurasi independen yang dapat diuji secara terpisah. Dengan pendekatan ini, Anda tidak perlu melalui semua tahap saat menjalankan pengujian dan siklus pengembangan iteratif juga menjadi lebih cepat.
    • Misalnya, di Kitchen-Terraform, bagi pengujian dalam suite terpisah. Saat melakukan iterasi, jalankan setiap suite secara terpisah.
    • Demikian pula, dengan menggunakan Terratest, gabungkan setiap tahap pengujian Anda dengan stage(t, STAGE_NAME, CORRESPONDING_TESTFUNCTION). Menetapkan variabel lingkungan yang menunjukkan pengujian yang akan dijalankan. Misalnya, SKIPSTAGE_NAME="true".
    • Framework pengujian blueprint mendukung eksekusi yang dirilis bertahap untuk pengujian.

Langkah selanjutnya