Traffine I/O

Bahasa Indonesia

2023-03-13

Pola Struktur Direktori dalam Terraform

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.

https://developer.hashicorp.com/terraform/language/state/workspaces

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:

development/main.tf
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.

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!