Memahami cara membaca dan mengambil data dari provider tanpa membuat atau mengelola resource. Datasource adalah jembatan antara konfigurasi Terraform dan data existing di cloud.

Apa yang Akan Dipelajari? #

Datasource memungkinkan Anda query informasi dari provider — seperti mencari AMI ID terbaru, mengambil data VPC yang sudah ada, atau mendapatkan informasi zone availability. Berbeda dengan resource yang mengelola lifecycle, datasource hanya membaca data.

Artikel dalam Section Ini #

ArtikelTopik Utama
Apa itu Datasource?Konsep datasource dan perbedaannya dengan resource
ReferenceCara menggunakan datasource untuk referensi resource existing
Anti-PatternKesalahan umum penggunaan datasource yang harus dihindari

Datasource vs Resource #

flowchart LR
    subgraph Resource["Resource (Manage)"]
        R_Create["terraform apply<br/>Creates/Updates"]
        R_State["Tracks in<br/>State File"]
        R_Life["Full Lifecycle<br/>CRUD"]
    end

    subgraph Datasource["Datasource (Read)"]
        D_Read["terraform plan<br/>Reads Only"]
        D_NoState["No State<br/>Changes"]
        D_Query["Query/API<br/>Call"]
    end

    R_Create --> R_State --> R_Life
    D_Read --> D_NoState --> D_Query

    style Resource fill:#ffebee
    style Datasource fill:#e8f5e9

Common Datasource Patterns #

flowchart TD
    subgraph Lookup["Data Lookup"]
        AMI["data.aws_ami<br/>Find latest AMI"]
        VPC["data.aws_vpc<br/>Get existing VPC"]
        AZ["data.aws_availability_zones<br/>List zones"]
    end

    subgraph Use["Used In Resources"]
        EC2["aws_instance<br/>ami = data.aws_ami.id"]
        SUBNET["aws_subnet<br/>vpc_id = data.aws_vpc.id"]
        RDS["aws_db_instance<br/>availability_zone"]
    end

    AMI --> EC2
    VPC --> SUBNET
    AZ --> RDS

    style Lookup fill:#e3f2fd
    style Use fill:#e8f5e9

Datasource Anti-Pattern #

# ❌ Anti-Pattern: Hardcode AMI ID
ami = "ami-0abcdef1234567890"

# ✅ Best Practice: Use datasource
data "aws_ami" "latest" {
  most_recent = true
  owners      = ["amazon"]
  filter {
    name   = "name"
    values = ["amzn2-ami-hvm-*-x86_64-gp2"]
  }
}
ami = data.aws_ami.latest.id

Setelah memahami datasource, lanjutkan ke Module & Reusability untuk mempelajari cara membuat kode yang reusable.

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