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 #
| Artikel | Topik Utama |
|---|---|
| Apa itu Datasource? | Konsep datasource dan perbedaannya dengan resource |
| Reference | Cara menggunakan datasource untuk referensi resource existing |
| Anti-Pattern | Kesalahan 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:#e8f5e9Common 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:#e8f5e9Datasource 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.