Pola Struktur Direktori dalam Terraform
Struktur direktori proyek Terraform dapat sangat memengaruhi kemudahan pengelolaan dan skalabilitas infrastruktur Anda. Struktur yang terorganisir dengan baik memastikan bahwa kode mudah dipahami dan diperbaiki.
Sifat fleksibel Terraform memungkinkan Anda mengatur file dan direktori Anda dalam berbagai cara tergantung pada kompleksitas infrastruktur dan preferensi tim Anda. Artikel ini akan berfokus pada tiga pola umum untuk mengatur direktori Terraform Anda:
-
Workspace
Metode ini melibatkan penggunaan fitur workspace Terraform untuk beralih antara lingkungan dalam resource Terraform yang sama. -
Isolasi Direktori Lingkungan
Dalam pola ini, direktori dipisahkan untuk setiap lingkungan, mengelola resource Terraform secara terpisah. -
Modul
Pendekatan ini memanfaatkan Modul untuk menciptakan templat pembuatan resource, di mana perbedaan lingkungan diwujudkan melalui variabel yang dilewatkan saat memanggil Modul.
Workspace
Workspace Terraform menyediakan cara untuk mengelola beberapa status lingkungan dalam satu konfigurasi Terraform. Alih-alih membuat direktori terpisah untuk setiap lingkungan, fitur workspace memungkinkan Anda beralih antara lingkungan dalam resource Terraform yang sama.
Mari kita lihat potongan kode Terraform sederhana untuk memahaminya dengan lebih baik:
# Define constants per environment
variable "env_vars" {
type = map(object({
region = string
cidr = string
}))
default = {
development = {
region = "us-west-2"
cidr = "10.0.0.0/16"
}
production = {
region = "us-east-1"
cidr = "10.1.0.0/16"
}
}
}
resource "aws_vpc" "main" {
cidr_block = var.env_vars[terraform.workspace].cidr
region = var.env_vars[terraform.workspace].region
tags = {
Name = "${terraform.workspace}-vpc"
}
}
Dalam contoh ini, kita menentukan variabel region
dan cidr
untuk setiap lingkungan dalam konfigurasi Terraform kita, dan kemudian menggunakan nama workspace untuk memilih set variabel yang benar saat membuat AWS VPC.
Manfaat Penggunaan Workspace
Menggunakan Workspace dalam Terraform memiliki beberapa keuntungan:
- Prinsip DRY (Don't Repeat Yourself)
Fitur workspace memungkinkan Anda mengelola lingkungan yang berbeda tanpa menduplikasi konfigurasi Terraform, mempromosikan penggunaan ulang kode. - Kemudahan pemahaman
Semua variabel lingkungan didefinisikan di awal file, sehingga lebih mudah memahami perbedaan antara lingkungan.
Kekurangan Penggunaan Workspace
Penggunaan Workspace mungkin tidak cocok dalam beberapa skenario:
-
Kurangnya kontrol untuk infrastruktur yang beragam
Jika struktur infrastruktur berbeda secara signifikan antara lingkungan, dapat menjadi tantangan untuk mengelola variasi ini dalam satu konfigurasi menggunakan Workspace. -
Tidak memadai untuk otentikasi dan kontrol akses yang bervariasi
Workspace mungkin tidak ideal ketika lingkungan yang berbeda memerlukan kredensial otentikasi dan kontrol akses yang unik.
Harap dicatat juga bahwa dokumentasi resmi Terraform tidak merekomendasikan penggunaan workspace untuk dekomposisi sistem atau implementasi yang memerlukan kredensial dan kontrol akses terpisah.
Workspaces are not appropriate for system decomposition or deployments requiring separate credentials and access controls.
Isolasi Direktori Lingkungan
Pola umum lain dalam mengelola konfigurasi Terraform adalah Isolasi Direktori Lingkungan. Dalam pola ini, Anda mengelola resource Terraform secara individual dengan membagi direktori untuk setiap lingkungan.
Berikut ini contoh struktur direktori yang mungkin terlihat:
.
├── development
│ ├── vpc.tf
│ └── instances.tf
├── staging
│ ├── vpc.tf
│ └── instances.tf
└── production
├── vpc.tf
└── instances.tf
Di setiap folder lingkungan (development
, staging
, production
), kita memiliki file Terraform terpisah untuk mengelola resource yang berbeda (VPC, instance). Dengan cara ini, setiap lingkungan dapat memiliki konfigurasi dan alokasi resource yang unik sesuai kebutuhan.
Manfaat Penggunaan Isolasi Direktori Lingkungan
Ada beberapa keuntungan dalam mengatur direktori Anda dengan cara ini:
-
Perbedaan Lingkungan
Struktur ini ideal jika lingkungan Anda berbeda secara signifikan, karena Anda dapat menyesuaikan konfigurasi untuk setiap lingkungan sesuai kebutuhan. -
Sederhana dalam Implementasi
Karena tidak ada dependensi antara lingkungan, implementasi dan pengelolaannya dapat menjadi lebih sederhana.
Kekurangan Penggunaan Isolasi Direktori Lingkungan
Namun, pendekatan ini juga memiliki tantangan tersendiri:
- Duplikasi Kode
Kelemahan terbesar dari pendekatan ini adalah dapat menyebabkan duplikasi kode, karena konfigurasi yang sama mungkin perlu ditulis di setiap direktori lingkungan, melanggar prinsip DRY.
Modul
Modul dalam Terraform digunakan untuk membuat komponen yang dapat digunakan ulang dalam infrastruktur Anda. Modul dapat didefinisikan sekali dan dipanggil dengan variabel masukan yang berbeda di lingkungan yang berbeda, menjadikannya cara yang sangat efisien untuk mengelola resource Anda.
Berikut ini contoh struktur direktori menggunakan Modul:
.
├── modules
| ├── ec2_instance
| | ├── main.tf
| | ├── variables.tf
| | └── output.tf
| └── vpc
| ├── main.tf
| ├── variables.tf
| └── output.tf
├── development
│ └── main.tf
├── staging
│ └── main.tf
└── production
└── main.tf
Dalam struktur ini, resource yang dapat digunakan ulang seperti instance EC2 atau VPC diabstraksi ke dalam modul. Setiap lingkungan kemudian memanggil modul-modul ini dengan set variabel masukan sendiri. Misalnya, file development/main.tf
Anda mungkin terlihat seperti ini:
module "vpc" {
source = "../modules/vpc"
cidr = "10.0.0.0/16"
region = "us-west-2"
}
module "ec2_instance" {
source = "../modules/ec2_instance"
ami = "ami-0c94855ba95c574c8"
instance_type = "t2.micro"
subnet_id = module.vpc.subnet_id
}
Manfaat Penggunaan Modul
Penggunaan Modul memiliki beberapa manfaat:
- Prinsip DRY
Dengan modul, Anda dapat mengabstraksi komponen yang dapat digunakan ulang dalam infrastruktur Anda, mempromosikan penggunaan ulang kode.
Kekurangan Penggunaan Modul
Ada beberapa tantangan dalam menggunakan Modul:
- Kesulitan Menulis Modul yang Generik
Menulis modul yang cukup generik untuk digunakan ulang dalam berbagai skenario bisa menjadi tantangan. - Memerlukan Pemahaman Lanjutan tentang Terraform
Mendesain dan menggunakan modul secara efektif memerlukan pemahaman yang kuat tentang Terraform, yang mungkin menjadi hambatan bagi pemula.