Mengapa Modules?
Bayangkan mendefinisikan infrastruktur VPC yang sama untuk setiap proyek dari nol. Module mengenkapsulasi pola infrastruktur yang berulang menjadi blok yang reusable dengan interface yang bersih.
Struktur Module
Setiap module minimal memiliki: main.tf (resources), variables.tf (input), outputs.tf (output), dan README.md (dokumentasi). Tambahkan versions.tf untuk pin provider versions.
Membuat VPC Module
Module menerima variables: vpc_cidr, environment, availability_zones. Module menciptakan VPC, public/private subnets, Internet Gateway, NAT Gateway, dan route tables. Output: vpc_id, public_subnet_ids, private_subnet_ids.
Menggunakan Module
Panggil module dengan module "vpc" { source = "./modules/vpc" environment = "production" vpc_cidr = "10.0.0.0/16" }. Referensi output: module.vpc.vpc_id.
Versioning dengan Git Tags
Tag module releases di Git: git tag v1.0.0. Konsumen module bisa pin version: source = "git::https://github.com/org/modules.git//vpc?ref=v1.0.0".
Testing Module dengan Terratest
Terratest adalah Go library untuk testing Terraform. Test mendeploy module ke real environment, verifikasi resource terbuat, lalu destroy. Mahal tapi memberikan confidence tertinggi.