Traffine I/O

Bahasa Indonesia

2023-03-10

Modul Terraform

Apa itu Modul Terraform

Modul Terraform adalah kumpulan resource Terraform, variabel, dan output yang diorganisir dalam satu direktori. Setiap modul dapat digunakan untuk mengelompokkan fungsi tertentu, seperti menyediakan mesin virtual, membuat database, atau mengkonfigurasi load balancer. Dengan membuat modul, Anda dapat mendefinisikan blok bangunan yang dapat digunakan ulang untuk infrastruktur Anda dan membaginya di berbagai proyek, tim, atau bahkan komunitas Terraform yang lebih luas.

Keuntungan dan Kerugian Modul Terraform

Di bab ini, saya akan membahas keuntungan dan kerugian menggunakan modul Terraform, yang akan membantu Anda membuat keputusan yang tepat saat memutuskan apakah akan menggunakannya atau tidak dalam proyek infrastruktur Anda.

Keuntungan Modul Terraform

  • Modularitas
    Modul mempromosikan modularitas dalam kode infrastruktur Anda, membuatnya lebih mudah dipahami, dipelihara, dan diperluas.

  • Dapat Digunakan Ulang
    Modul dapat digunakan ulang di beberapa proyek, mengurangi duplikasi kode dan mempromosikan konsistensi.

  • Kolaborasi
    Modul memfasilitasi kolaborasi dengan memungkinkan tim untuk berbagi dan berkontribusi pada komponen infrastruktur yang sudah tersedia.

  • Abstraksi
    Modul mengemas pola infrastruktur yang kompleks, menyederhanakan interaksi pengguna dengan resource.

  • Komunitas
    Komunitas Terraform menyediakan banyak modul open-source, memungkinkan Anda untuk memanfaatkan solusi yang sudah ada dan mengurangi waktu pengembangan.

Kerugian Modul Terraform

  • Kompleksitas
    Menggunakan modul dapat meningkatkan kompleksitas kode infrastruktur Anda, terutama saat berurusan dengan modul bersarang atau dependensi yang rumit.

  • Pengelolaan Versi
    Mengelola versi modul bisa menantang, terutama saat berurusan dengan perubahan yang mematahkan atau komponen infrastruktur yang cepat berubah.

  • Debugging
    Debugging masalah dalam modul bisa lebih sulit karena ada lapisan abstraksi tambahan.

  • Kustomisasi
    Modul dapat membatasi opsi kustomisasi, terutama jika mereka dirancang untuk menegakkan pola atau praktik tertentu.

  • Belajar
    Menggunakan teknik modul yang canggih mungkin memerlukan pengetahuan dan pengalaman tambahan dengan Terraform.

Membuat dan Menggunakan Modul Terraform

Di bab ini, saya akan menjelajahi proses membuat dan menggunakan modul Terraform dalam proyek infrastruktur Anda. Kita akan membahas struktur dan konvensi modul, mendefinisikan variabel input dan output, dan bekerja dengan versi dan konsumsi modul.

Struktur dan Konvensi Modul

Modul Terraform dikelompokkan dalam satu direktori yang berisi sekumpulan file konfigurasi Terraform (.tf). File ini mendefinisikan resource, variabel, output, dan elemen lain yang diperlukan untuk menjelaskan fungsionalitas modul. Struktur direktori modul yang biasa mungkin terlihat seperti berikut:

my_module/
  ├── main.tf
  ├── variables.tf
  ├── outputs.tf
  ├── README.md
  └── LICENSE
  • main.tf: Berisi resource utama modul dan sering menjadi titik masuk untuk konsumen modul.
  • variables.tf: Mendefinisikan variabel input yang dapat diatur oleh pengguna saat menggunakan modul.
  • outputs.tf: Menentukan variabel output yang diperlihatkan oleh modul, memungkinkan pengguna untuk mengakses informasi tentang resource yang dibuat dalam modul.
  • README.md: Menyediakan dokumentasi tentang tujuan, penggunaan, dan opsi konfigurasi modul.
  • LICENSE: Menentukan lisensi untuk kode modul, yang penting jika Anda berencana membagikannya dengan orang lain.

Mendefinisikan Variabel Input dan Output

Variabel input memungkinkan pengguna modul untuk menyesuaikan perilaku modul sesuai dengan kebutuhan mereka. Untuk mendefinisikan variabel input, gunakan blok variable di file variables.tf Anda:

tf
variable "instance_type" {
  description = "The instance type for the virtual machine"
  type        = string
  default     = "t2.micro"
}

Variabel output memungkinkan pengguna untuk mengakses informasi tentang resource yang dibuat dalam modul. Untuk mendefinisikan variabel output, gunakan blok output di file outputs.tf Anda:

tf
output "instance_public_ip" {
  description = "The public IP address of the virtual machine"
  value       = aws_instance.example.public_ip
}

Versi dan Publikasi Modul

Menggunakan versi dengan modul Terraform membantu memastikan bahwa pengguna dapat mengandalkan versi modul yang stabil dan telah diuji. Versi semantik (mis. "1.2.3") adalah pendekatan umum untuk mengelola versi modul. Saat mempublikasikan modul, Anda dapat menggunakan repositori Git atau Terraform Registry sebagai mekanisme distribusi.

Impor dan Konsumsi Modul

Untuk menggunakan modul dalam konfigurasi Terraform Anda, deklarasikan blok module dan tentukan sumber modul. Atribut source dapat berupa jalur lokal, repositori Git, atau URL Terraform Registry:

tf
module "virtual_machine" {
  source       = "git::https://example.com/my_module.git?ref=v1.2.3"
  instance_type = "t2.small"
}

Setelah modul diimpor, Anda dapat mengakses variabel output-nya menggunakan sintaks module.<NAMA_MODUL>.<NAMA_OUTPUT>:

tf
output "vm_public_ip" {
  value = module.virtual_machine.instance_public_ip
}

Dengan membuat dan menggunakan modul Terraform, Anda dapat meningkatkan organisasi, dapat digunakan ulang, dan mudah dipelihara pada kode infrastruktur Anda.

Modul Terraform AWS VPC

Di bab ini, saya akan menjelajahi contoh dunia nyata menggunakan modul Terraform untuk membuat Virtual Private Cloud (VPC) Amazon Web Services (AWS).

Modul AWS VPC adalah modul yang banyak digunakan oleh komunitas untuk menyederhanakan pembuatan VPC dengan subnet publik dan privat. Modul ini menciptakan berbagai resource, termasuk VPC, subnet, tabel rute, dan daftar kontrol akses jaringan (ACL).

Anda dapat menemukan modul AWS VPC di Terraform Registry:

https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/latest

Untuk menggunakan modul AWS VPC dalam konfigurasi Terraform Anda, deklarasikan blok modul dan tentukan sumber modul dari Terraform Registry:

tf
module "vpc" {
  source = "terraform-aws-modules/vpc/aws"

  name                 = "my-vpc"
  cidr                 = "10.0.0.0/16"
  azs                  = ["us-west-2a", "us-west-2b", "us-west-2c"]
  private_subnets      = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  public_subnets       = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
  enable_nat_gateway   = true
  single_nat_gateway   = false
  enable_dns_hostnames = true

  tags = {
    Terraform   = "true"
    Environment = "dev"
  }
}

Pada contoh ini, modul AWS VPC digunakan untuk membuat VPC dengan tiga subnet publik dan tiga subnet privat yang didistribusikan di tiga zona ketersediaan. VPC dikonfigurasi dengan gateway NAT dan hostnames DNS diaktifkan. Selain itu, tag kustom diterapkan pada resource yang dibuat oleh modul.

Modul AWS VPC menyediakan berbagai variabel output yang memungkinkan Anda mengakses informasi tentang resource yang dibuat. Dalam contoh ini, kita mengakses ID VPC dan ID subnet privat:

tf
output "vpc_id" {
  description = "The ID of the created VPC"
  value       = module.vpc.vpc_id
}

output "private_subnet_ids" {
  description = "The IDs of the created private subnets"
  value       = module.vpc.private_subnets
}

Output ini dapat digunakan pada bagian lain dari konfigurasi Terraform Anda atau diteruskan ke modul lain sebagai input.

Referensi

https://developer.hashicorp.com/terraform/language/modules
https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/latest

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!