Pendahuluan
Terraform adalah sebuah alat populer infrastructure-as-code yang memungkinkan Anda untuk mendefinisikan, memberikan, dan mengelola resource infrastruktur Anda pada berbagai platform. Komponen inti dari Terraform adalah blok resource (resource block), yang digunakan untuk mendefinisikan keadaan yang diinginkan dari suatu resource tertentu pada suatu penyedia (provider).
Selain itu, Terraform Data digunakan untuk mengambil informasi dari resource infrastruktur yang sudah ada.
Artikel ini menjelaskan tentang Terraform Resource dan Data secara detail.
Terraform Resources
Komponen inti dari Terraform adalah blok resource (resource block), yang digunakan untuk mendefinisikan keadaan yang diinginkan dari suatu resource tertentu pada suatu penyedia (provider).
Memahami Blok Resource
Blok resource dalam Terraform adalah blok konfigurasi yang mendefinisikan suatu objek infrastruktur tertentu, seperti mesin virtual, database, atau load balancer. Blok resource tersebut menentukan keadaan yang diinginkan dari objek tersebut dan detail yang spesifik untuk penyedia yang diperlukan untuk membuat dan mengelolanya. Blok resource didefinisikan menggunakan sintaks berikut:
resource "provider_type" "resource_name" {
argument1 = value1
argument2 = value2
...
}
Parameter provider_type
menentukan nama penyedia, seperti AWS atau Google, sedangkan parameter resource_name
menentukan nama resource. Parameter argument digunakan untuk mendefinisikan keadaan yang diinginkan dari resource.
Sintaks Konfigurasi Resource
Sintaks konfigurasi untuk blok resource bersifat spesifik untuk penyedia dan tergantung pada jenis resource yang dibuat. Sebagai contoh, mari kita pertimbangkan blok resource sederhana untuk membuat sebuah instance EC2 di AWS:
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "example-instance"
}
}
Dalam contoh ini, aws_instance
adalah jenis penyedia, sedangkan example
adalah nama resource. Parameter ami
dan instance_type
digunakan untuk menentukan keadaan yang diinginkan dari instance EC2. Parameter tags
digunakan untuk menambahkan metadata pada instance tersebut.
Ketergantungan Resource dan Urutan Eksekusi
Resource dalam Terraform dapat saling bergantung, artinya pembuatan satu resource dapat membutuhkan keberadaan resource lainnya. Terraform secara otomatis menentukan urutan pembuatan resource berdasarkan ketergantungan mereka. Jika suatu resource bergantung pada resource lain yang belum dibuat, Terraform akan menunggu sampai ketergantungan itu dibuat sebelum membuat resource yang bergantung.
Sebagai contoh, pertimbangkan blok resource untuk membuat grup keamanan di AWS:
resource "aws_security_group" "example" {
name_prefix = "example-"
description = "Example security group"
vpc_id = aws_vpc.example.id
ingress {
from_port = 0
to_port = 65535
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
Pada contoh di atas, aws_vpc.example.id
digunakan untuk mendefinisikan ketergantungan pada resource VPC yang sebelumnya dibuat. Terraform memastikan bahwa resource VPC dibuat sebelum grup keamanan dibuat.
Resource Data Terraform
Terraform Data digunakan untuk mengambil informasi dari resource infrastruktur yang sudah ada.
Memahami Resource Data
Resource data di Terraform adalah blok konfigurasi yang memungkinkan Anda untuk mengambil informasi dari resource infrastruktur yang sudah ada, seperti instance EC2 atau grup keamanan. Resource data didefinisikan menggunakan sintaks berikut:
data "provider_type_resource_type" "data_source_name" {
argument1 = value1
argument2 = value2
...
}
Parameter provider_type
menentukan nama penyedia layanan, seperti AWS atau Google, sedangkan parameter resource_type
menentukan jenis resource untuk mengambil data. Parameter data_source_name
menentukan nama resource data. Parameter argumen digunakan untuk menentukan data yang akan diambil.
Konfigurasi Data
Sintaks konfigurasi untuk resource data berbeda-beda tergantung pada penyedia layanan dan jenis resource yang diambil. Sebagai contoh, pertimbangkan resource data sederhana untuk mengambil informasi tentang instance EC2 di AWS:
data "aws_instance" "example" {
instance_id = "i-0123456789abcdef0"
}
Pada contoh di atas, aws_instance
adalah jenis penyedia layanan, sementara example
adalah nama resource data. Parameter instance_id
digunakan untuk menentukan ID instance EC2 yang akan diambil informasinya.
Ketergantungan Data dan Urutan Eksekusi
Data source dalam Terraform dapat bergantung pada resource lainnya, yang berarti penciptaan sumber data dapat memerlukan keberadaan resource lainnya. Terraform secara otomatis menentukan urutan penciptaan sumber data berdasarkan ketergantungan mereka. Jika sumber data tergantung pada resource lain yang belum dibuat, Terraform akan menunggu hingga ketergantungan dibuat sebelum membuat sumber data.
Sebagai contoh, pertimbangkanlah sebuah sumber data yang mengambil informasi tentang VPC di AWS:
data "aws_vpc" "example" {
id = aws_subnet.example.vpc_id
}
Dalam contoh ini, aws_subnet.example.vpc_id
digunakan untuk mendefinisikan ketergantungan pada resource subnet yang telah dibuat sebelumnya. Terraform memastikan bahwa resource subnet dibuat sebelum sumber data dibuat.
Menggunakan Data Output dalam Resource Blocks
Terraform memungkinkan Anda menggunakan output data dalam blok resource untuk merujuk pada data yang diambil oleh sumber data. Sebagai contoh, pertimbangkanlah blok resource yang membuat sebuah instans EC2 di AWS dan merujuk pada ID VPC yang diambil oleh sumber data:
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
subnet_id = aws_subnet.example.id
tags = {
Name = "example-instance"
}
}
data "aws_vpc" "example" {
id = aws_subnet.example.vpc_id
}
output "vpc_id" {
value = data.aws_vpc.example.id
}
Dalam contoh ini, aws_subnet.example.id
digunakan untuk menentukan ID subnet untuk instans EC2. data.aws_vpc.example.id
digunakan untuk merujuk pada ID VPC yang diambil oleh sumber data. Blok output digunakan untuk mendefinisikan output
bernama untuk ID VPC.
Ringkasan
Terraform adalah alat infrastruktur sebagai kode yang populer yang memungkinkan pengembang untuk mendefinisikan dan mengelola resource infrastruktur cloud menggunakan pendekatan deklaratif. Alat ini dibangun dengan dua komponen kunci: resource dan sumber data.
Resource digunakan untuk mendefinisikan keadaan yang diinginkan dari resource tertentu di penyedia tertentu, seperti mesin virtual atau pengimbang beban. Blok resource didefinisikan menggunakan sintaks yang spesifik untuk penyedia dan dapat saling tergantung. Terraform secara otomatis menentukan urutan pembuatan resource berdasarkan dependensi mereka, memastikan bahwa pembuatan satu resource tidak memerlukan keberadaan resource lain.
Sumber data, di sisi lain, digunakan untuk mengambil informasi dari resource infrastruktur yang ada, seperti instance EC2 atau grup keamanan. Sumber data didefinisikan menggunakan sintaks yang spesifik untuk penyedia dan dapat saling tergantung. Terraform menentukan urutan pembuatan sumber data berdasarkan dependensi mereka, memastikan bahwa pembuatan sumber data tidak memerlukan keberadaan resource lain.
Data output dapat digunakan dalam blok resource untuk merujuk pada data yang diambil oleh sumber data, memungkinkan pengembang untuk mengambil dan menggunakan informasi dari resource infrastruktur yang ada dalam pembuatan resource.
Dengan memahami resource dan sumber data Terraform, pengembang dapat mendefinisikan dan mengelola resource infrastruktur dengan efisien dan dapat diandalkan, mengotomatisasi penyediaan, konfigurasi, dan manajemen resource infrastruktur cloud.
Referensi