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 #

ArtikelTopik Utama
Apa itu Module?Konsep module, mengapa dibutuhkan, dan kapan harus membuatnya
Root vs Child ModulePerbedaan module utama (root) dan module yang dipanggil (child)
StructureStruktur file dan folder module yang terorganisir
Interface DesignMerancang input/output module yang clean dan intuitif
RegistryMenggunakan dan mempublish module ke Terraform Registry
VersioningStrategi 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:#fff3e0

Module 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:#e8f5e9

Interface 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.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact