Mempelajari cara membuat, mengorganisasi, dan menggunakan module untuk membangun konfigurasi Terraform yang reusable dan maintainable.
Apa yang Akan Dipelajari? #
Module adalah cara utama untuk mengorganisasi dan reuse konfigurasi Terraform. Module yang baik mengurangi duplikasi, meningkatkan konsistensi, dan mempercepat development. Section ini membahas semua aspek module dari basic hingga advanced.
Artikel dalam Section Ini #
| Artikel | Topik Utama |
|---|---|
| Apa itu Module? | Konsep module, mengapa dibutuhkan, dan kapan harus membuatnya |
| Root vs Child Module | Perbedaan module utama (root) dan module yang dipanggil (child) |
| Structure | Struktur file dan folder module yang terorganisir |
| Interface Design | Merancang input/output module yang clean dan intuitif |
| Registry | Menggunakan dan mempublish module ke Terraform Registry |
| Versioning | Strategi versioning untuk module yang stabil dan backward-compatible |
Module Architecture #
flowchart TD
subgraph Root["Root Module (Main)"]
MAIN["main.tf<br/>Memanggil child modules"]
VARS["variables.tf<br/>Input parameters"]
OUT["outputs.tf<br/>Return values"]
end
subgraph Child["Child Modules"]
VPC_MOD["modules/vpc/<br/>VPC + Subnets"]
EC2_MOD["modules/ec2/<br/>Instances"]
RDS_MOD["modules/rds/<br/>Database"]
end
subgraph Registry["Terraform Registry"]
PUB["Public Modules<br/>terraform-aws-modules/*"]
PRIV["Private Modules<br/>Company Registry"]
end
MAIN --> VPC_MOD
MAIN --> EC2_MOD
MAIN --> RDS_MOD
VPC_MOD -.-> PUB
EC2_MOD -.-> PRIV
style Root fill:#e3f2fd
style Child fill:#e8f5e9
style Registry fill:#fff3e0Module Reusability #
flowchart LR
subgraph Shared["Shared Module: vpc/"]
VPC["VPC Module<br/>Reusable"]
end
subgraph Envs["Environments"]
DEV["Dev<br/>CIDR: 10.0.1.0/24"]
STG["Staging<br/>CIDR: 10.0.2.0/24"]
PROD["Production<br/>CIDR: 10.0.3.0/24"]
end
VPC --> DEV
VPC --> STG
VPC --> PROD
style Shared fill:#e3f2fd
style Envs fill:#e8f5e9Interface Design Best Practice #
# ✅ Clean interface: minimal required, sensible defaults
variable "vpc_cidr" {
type = string
description = "CIDR block for VPC"
# No default = required
}
variable "enable_nat_gateway" {
type = bool
description = "Create NAT Gateway"
default = true # Sensible default
}
output "vpc_id" {
value = aws_vpc.main.id
description = "ID of the created VPC"
}
Module yang baik adalah investasi jangka panjang. Lanjutkan ke Environment untuk mempelajari cara menggunakan module di berbagai environment.