Traffine I/O

Bahasa Indonesia

2023-03-16

Menggunakan Output dari Direktori Terraform yang Berbeda

Menggunakan Output dari Direktori Terraform yang Berbeda

Untuk menggunakan output dari direktori Terraform yang berbeda, Anda memiliki dua metode utama yang dapat digunakan:

  • Hardcoding Hasil Apply Direktori Lain
    Metode yang paling sederhana adalah dengan melakukan hardcode hasil output dari satu direktori ke dalam variabel (var) direktori lain. Hal ini melibatkan menyalin hasil output dan menempelkannya langsung ke dalam file konfigurasi Terraform Anda.

  • Menggunakan Remote State
    Metode kedua melibatkan penggunaan sumber data terraform_remote_state untuk mengakses data state yang disimpan di direktori lain. Hal ini dapat sangat berguna jika file state Anda disimpan di backend yang terhubung jarak jauh, seperti dalam bucket S3.

Hardcoding

Hardcoding adalah praktik menyisipkan hasil output dari satu direktori secara langsung ke dalam variabel direktori lain. Dengan kata lain, ini adalah menyalin dan menempelkan data yang Anda butuhkan secara langsung ke dalam file konfigurasi Terraform Anda. Pendekatan ini tidak memerlukan setup atau konfigurasi tambahan selain mendapatkan data yang diperlukan.

Perhatikan contoh berikut:

dir_a/main.tf
resource "aws_vpc" "main" {
  cidr_block       = "10.0.0.0/16"
  instance_tenancy = "default"

  tags = {
    "Name" = "my-vpc-dir1"
  }
}

output "vpc_id" {
  value = aws_vpc.main.id
}

Pada contoh ini, file main.tf di dir_a membuat sebuah VPC dan mengeluarkan ID-nya. Kemudian kita dapat melakukan hardcode output ini ke dalam dir_b/main.tf seperti berikut:

dir_b/main.tf
variable "vpc_id" {
  default = "vpc-abcdefgh"  # Hardcoded VPC ID from Directory A
}

resource "aws_subnet" "main" {
  vpc_id     = var.vpc_id  # Using the hardcoded VPC ID
  cidr_block = "10.0.1.0/24"

  tags = {
    "Name" = "my-subnet-dir2"
  }
}

Keuntungan dari hardcoding adalah kesederhanaannya. Pendekatan ini langsung, tidak memerlukan konfigurasi tambahan, dan umumnya efisien untuk proyek-proyek kecil hingga menengah.

Namun, hardcoding mungkin tidak cocok untuk pengembangan dalam skala yang lebih besar karena kurangnya skalabilitas.

Remote State

Dalam Terraform, "state" adalah catatan tentang resource infrastruktur Anda. Secara default, Terraform menyimpan state secara lokal dalam file bernama terraform.tfstate. Namun, ketika bekerja dengan proyek-proyek yang lebih besar atau tim, disarankan untuk menyimpan informasi state di backend terhubung jarak jauh. Backend terhubung jarak jauh memungkinkan tim untuk menyimpan file state di lokasi bersama yang terpusat, seringkali dengan fitur-fitur seperti versioning, locking, dan fitur penting lainnya.

State yang terhubung jarak jauh adalah file tfstate yang disimpan di dalam penyimpanan data terhubung jarak jauh, seperti bucket S3. Terraform menyediakan sumber data terraform_remote_state yang memungkinkan Anda mengakses data state yang disimpan di direktori lain, yang dapat sangat berguna dalam proyek-proyek yang lebih besar atau saat mencoba mengatur konfigurasi Terraform Anda.

Untuk menggunakan sumber data terraform_remote_state, Anda perlu mendefinisikan blok data di file konfigurasi Terraform Anda dan menentukan tipe backend dan konfigurasinya.

Perhatikan contoh berikut:

data "terraform_remote_state" "vpc" {
  backend = "s3"

  config = {
    bucket = "my-terraform-state"
    key    = "vpc/terraform.tfstate"
    region = "us-west-2"
  }
}

output "vpc_id" {
  value = data.terraform_remote_state.vpc.outputs.vpc_id
}

Pada contoh ini, kita mengakses file state yang terhubung jarak jauh yang disimpan di dalam bucket S3. Nama bucket-nya adalah my-terraform-state, dan file state disimpan dengan kunci vpc/terraform.tfstate. Blok output kemudian merujuk pada vpc_id yang disimpan dalam state terhubung jarak jauh tersebut.

Mari kita pertimbangkan contoh di mana dua direktori, dir_a dan dir_b, masing-masing memiliki konfigurasi Terraformnya sendiri.

dir_a/main.tf
resource "aws_vpc" "main" {
  cidr_block       = "10.0.0.0/16"
  instance_tenancy = "default"

  tags = {
    "Name" = "my-vpc-dir1"
  }
}

output "vpc_cidr" {
  value = aws_vpc.main.cidr_block
}

Di dir_a, sebuah VPC dibuat dan blok CIDR-nya dikeluarkan. Sekarang, kita ingin membuat sebuah subnet dalam VPC ini di dir_b:

dir_b/main.tf
data "terraform_remote_state" "vpc" {
  backend = "s3"

  config = {
    bucket = "my-app-terraform-state"
    key    = "dir_a/terraform.tfstate"
    region = "ap-northeast-1"
  }
}

resource "aws_subnet" "main" {
  vpc_id     = data.terraform_remote_state.vpc.outputs.vpc_id
  cidr_block = "10.0.1.0/24"

  tags = {
    "Name" = "my-subnet-dir2"
  }
}

Di dir_b, kita menggunakan sumber data terraform_remote_state untuk mengakses file state dari dir_a yang ada di dalam bucket S3. ID VPC kemudian digunakan untuk membuat subnet.

Meskipun fungsi remote state dapat sangat berguna, penting untuk memahami bahwa penggunaan berlebih atau penggunaan yang salah dapat menyebabkan kompleksitas. Selain itu, setiap perubahan pada sumber data remote state akan memerlukan menjalankan kembali terraform init untuk memperbarui konfigurasi.

Referensi

https://developer.hashicorp.com/terraform/language/state/remote-state-data

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!