Mengapa Menggunakan Terraform Module?
Mendefinisikan infrastruktur yang sama berulang kali dapat membuat konfigurasi semakin sulit dikelola. Terraform module membantu mengemas resource dan konfigurasi yang sering digunakan menjadi komponen reusable dengan interface yang lebih sederhana.
Dengan module, tim dapat menggunakan pola infrastruktur yang konsisten di berbagai project dan environment.
Struktur Terraform Module
Module umumnya memiliki struktur seperti:
-
main.tf— mendefinisikan resource -
variables.tf— mendefinisikan input -
outputs.tf— mendefinisikan output -
versions.tf— menentukan versi Terraform dan provider -
README.md— dokumentasi penggunaan module
Struktur yang konsisten membuat module lebih mudah dipahami dan digunakan oleh developer lain.
Membuat VPC Module
Contohnya, module VPC dapat menerima beberapa variable seperti:
-
vpc_cidr -
environment -
availability_zones
Module kemudian dapat membuat VPC beserta public subnet, private subnet, Internet Gateway, NAT Gateway, dan route table.
Output seperti vpc_id, public_subnet_ids, dan private_subnet_ids dapat digunakan oleh infrastructure lain yang membutuhkan informasi tersebut.
Menggunakan Module
Module dapat dipanggil dari konfigurasi utama Terraform:
module "vpc" {
source = "./modules/vpc"
environment = "production"
vpc_cidr = "10.0.0.0/16"
}
Output module dapat digunakan kembali dengan referensi seperti:
module.vpc.vpc_id
Pendekatan ini membuat konfigurasi utama lebih sederhana karena detail implementasi VPC berada di dalam module.
Versioning dengan Git
Untuk module yang digunakan oleh banyak project, gunakan versioning agar perubahan tidak langsung memengaruhi seluruh environment.
Misalnya:
git tag v1.0.0
Project lain kemudian dapat menggunakan versi tertentu sehingga perubahan module dapat dikontrol dan diuji sebelum diadopsi.
Testing dengan Terratest
Terratest dapat digunakan untuk menguji Terraform module secara otomatis. Test dapat menjalankan Terraform, memverifikasi resource yang dibuat, kemudian melakukan cleanup setelah pengujian selesai.
Walaupun membutuhkan environment dan biaya cloud, integration testing seperti ini memberikan tingkat confidence yang lebih tinggi dibandingkan hanya melakukan validasi konfigurasi.
Best Practices
Beberapa praktik yang sebaiknya diterapkan:
-
Gunakan nama variable yang jelas
-
Hindari hardcoded value
-
Dokumentasikan input dan output
-
Pin versi provider dan module
-
Buat module cukup fleksibel tetapi tidak terlalu kompleks
-
Uji perubahan sebelum digunakan di production
Kesimpulan
Terraform module membantu software house membangun infrastructure AWS yang reusable, konsisten, dan lebih mudah dipelihara. Dengan struktur yang jelas, versioning, dokumentasi, dan testing, module dapat menjadi fondasi penting untuk mengelola infrastructure sebagai code.