Langsung ke konten utama

Day 106 : Pembelajaran resource dalam konfigurasi Terraform

Halo semuanya!

Hari ini, saya akan melanjutkan perjalanan belajar Terraform sekaligus membuat catatan penting yang mungkin suatu saat akan sangat berguna buat saya sendiri (dan siapa tahu, bermanfaat juga untuk kalian yang membaca!). Kalau nanti saya lupa, setidaknya tulisan ini bisa jadi pengingat tentang apa yang sudah saya pelajari.

Pembelajaran yang akan saya tulis kali ini adalah resource dalam konfigurasi Terraform.



Apa Itu Resource?

Kalau dianalogikan, resource dalam Terraform itu seperti “bahan bangunan” untuk infrastruktur kita. Setiap resource merepresentasikan satu bagian dari infrastruktur yang ingin kita buat atau kelola. Misalnya, kalau kita sedang membangun server, storage, atau jaringan di cloud, resource ini adalah elemen-elemen dasarnya.

Dalam Terraform, resource adalah blok yang menjelaskan apa yang ingin kita buat, di mana, dan bagaimana caranya.

Contohnya, misalnya kita ingin membuat sebuah server virtual di AWS. Kita bisa mendefinisikan resource untuk server tersebut seperti ini:

resource "aws_instance" "example" {
  ami           = "ami-12345678"
  instance_type = "t2.micro"
  tags = {
    Name = "MyExampleInstance"
  }
}

Gampang kan? Cukup tulis jenis resource (dalam hal ini aws_instance), tambahkan nama unik untuk resource tersebut (misalnya example), dan isikan properti-properti pendukung seperti ami (image ID) dan instance_type (jenis server).

Fungsi Resource

Kenapa kita harus mendefinisikan resource? Sederhananya, resource ini adalah alat komunikasi antara kita sebagai pengguna Terraform dan infrastruktur yang ingin kita buat.

Fungsinya adalah:

  1. Mendeskripsikan Infrastruktur
    Kita menggunakan resource untuk menjelaskan detail infrastruktur yang kita butuhkan. Misalnya:

    • Server seperti apa?
    • Lokasinya di mana?
    • Apakah perlu konfigurasi tambahan seperti firewall atau storage?
  2. Mengelola Infrastruktur
    Dengan resource, Terraform tahu apa yang harus dibuat, diubah, atau dihancurkan. Jadi, semua perubahan infrastruktur bisa dilakukan secara otomatis tanpa kita perlu repot mengatur manual.

  3. Mencatat Dokumentasi
    Konfigurasi Terraform ini juga berfungsi sebagai dokumentasi hidup. Ketika kita mendefinisikan resource, semua detail infrastruktur kita sudah tersimpan rapi.

Komponen Resource

Sebuah resource memiliki beberapa bagian utama:

  1. Tipe Resource: Ini adalah jenis infrastruktur yang ingin kita buat. Misalnya, aws_instance untuk server di AWS atau google_storage_bucket untuk bucket di Google Cloud.
  2. Nama Resource: Identifier unik yang memudahkan kita mengacu pada resource tersebut di tempat lain.
  3. Arguments (Properti): Ini adalah pengaturan spesifik untuk resource, seperti ukuran server, lokasi, atau nama.

Contoh Implementasi

Bayangkan kita sedang membangun sebuah aplikasi sederhana. Untuk aplikasinya, kita butuh:

  1. Server untuk menjalankan aplikasi.
  2. Bucket untuk menyimpan data.

Kita bisa mendefinisikan kedua resource ini di Terraform seperti ini:

resource "aws_instance" "app_server" {
  ami           = "ami-12345678"
  instance_type = "t2.micro"
  tags = {
    Name = "ApplicationServer"
  }
}

resource "aws_s3_bucket" "app_data" {
  bucket = "my-app-data-bucket"
  acl    = "private"
}

Dengan definisi ini, Terraform tahu bahwa kita ingin membuat satu server dan satu bucket. Keren kan?

Contoh Konfigurasi VirtualBox

Nah, selain untuk cloud, Terraform juga bisa digunakan untuk membuat infrastruktur lokal seperti virtual machine (VM) menggunakan provider VirtualBox. Berikut adalah contohnya:

resource "virtualbox_vm" "vm" {
  name   = "my_vm"
  image  = var.ubuntu_iso_path
  cpus   = 2
  memory = 2096

  network_adapter {
    type = "hostonly"
  }

  provisioner "remote-exec" {
    inline = [
      "sudo apt-get update",
      "sudo apt-get install -y docker.io",
      "sudo systemctl start docker",
      "sudo systemctl enable docker",
      "sudo docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress -d mysql:5.7",
      "sudo docker run --name wordpress --link mysql:mysql -p 80:80 -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=root -d wordpress"
    ]

    connection {
      type     = "ssh"
      user     = "ubuntu"
      password = var.vm_password
      host     = "127.0.0.1"
    }
  }
}

Konfigurasi ini mendefinisikan:

  1. Sebuah VM di VirtualBox dengan nama my_vm.
  2. Alokasi 2 CPU dan 2 GB memori untuk VM.
  3. Jaringan menggunakan adaptor Host-Only.
  4. Provisioning otomatis untuk:
    • Instalasi Docker.
    • Menjalankan container MySQL dan WordPress di VM.

Setelah konfigurasi dijalankan, kita akan mendapatkan VM dengan Docker yang sudah dikonfigurasi untuk menjalankan aplikasi WordPress menggunakan MySQL sebagai databasenya. VM ini dapat diakses melalui SSH dengan user ubuntu dan password yang didefinisikan dalam variabel var.vm_password.

Kesimpulan

Resource adalah bagian paling penting dalam konfigurasi Terraform. Dengan resource, kita bisa mendeskripsikan, mengelola, dan mendokumentasikan infrastruktur kita secara otomatis. Selain mempermudah hidup kita, resource juga membantu menjaga semuanya tetap rapi dan konsisten.

Komentar

Postingan populer dari blog ini

Day 109 : Akhir dari Perjalanan PKL: Terima Kasih untuk PT Excellent

Hari ini adalah hari terakhir saya menjalani PKL di PT Excellent. Momen ini menjadi penutup dari perjalanan yang luar biasa penuh pembelajaran, pengalaman, dan kenangan yang tak terlupakan. Saya ingin menyampaikan rasa terima kasih yang sebesar-besarnya kepada keluarga besar PT Excellent atas kesempatan, bimbingan, dan kepercayaan yang telah diberikan kepada saya selama saya melaksanakan PKL di sini. Selama PKL, saya mendapatkan banyak pengetahuan baru yang sebelumnya belum pernah saya pelajari. Dari segi teknis, saya belajar banyak tentang teknologi seperti Zimbra, bahasa pemrograman Golang, hingga DevOps hal-hal yang awalnya terasa asing, kini menjadi ilmu yang berharga dan menjadi ilmu baru bagi saya. Namun, pembelajaran saya di PT Excellent tidak hanya terbatas pada aspek teknis. Saya juga belajar tentang kedisiplinan, tanggung jawab, profesionalisme, serta bagaimana pentingnya kolaborasi dalam lingkungan kerja. Terima kasih kepada Mas Ridwan, yang selalu membimbing saya dengan sab...

Day 108 : H-2 menuju akhir PKL

Waktu rasanya berjalan begitu cepat. Hari ini sudah masuk H-2 menuju akhir masa PKL saya di PT Excellent. Ada perasaan campur aduk antara lega karena akhirnya berhasil menyelesaikan semuanya, senang karena banyak pengalaman baru yang saya dapatkan, tapi juga sedikit. PKL di PT Excellent bukan cuma soal kerjaan atau belajar teknis, tapi juga perjalanan penuh cerita dan pelajaran. Setiap hari yang saya jalani di sini selalu memberi pengalaman baru, baik dari tugas yang menantang, bimbingan dari mentor, maupun suasana kerja yang hangat. Salah satu hal yang paling membekas adalah semangat belajar dari Pak Bos. Beliau pernah bercerita tentang bagaimana sibuknya beliau tapi tetap bisa belajar bahasa baru bahkan lebih dari satu bahasa. Itu benar-benar membuka mata saya, bahwa waktu senggang yang sering terbuang sebenarnya bisa dimanfaatkan untuk hal-hal yang lebih produktif. Mas Ridwan, yang selalu menemani kami saat briefing pagi, juga memberikan banyak pelajaran berharga. Setiap pagi kami b...

Day 82 : Membuat image dengan bahasa pemrograman golang

Hari ini, saya melanjutkan perjalanan belajar Docker dengan memanfaatkan Visual Studio Code (VSCode), editor favorit saya. Fokus utama saya adalah memahami cara membuat Docker image menggunakan alur kerja yang terintegrasi dengan VSCode. Proses ini tidak hanya efisien tetapi juga menyenangkan karena VSCode memiliki ekosistem yang kaya, termasuk berbagai ekstensi pendukung yang mempermudah pekerjaan. Mengapa Menggunakan VSCode untuk Docker? VSCode menyediakan lingkungan pengembangan yang lengkap dengan berbagai fitur, seperti: Docker Extension : Mempermudah pengelolaan image, container, dan jaringan Docker langsung dari editor. Terminal Terintegrasi : Menjalankan perintah Docker langsung dari VSCode tanpa perlu beralih aplikasi. Debugging Tools : Membantu melacak masalah aplikasi yang berjalan di dalam container, terutama bagi pengembang Golang. Dengan semua keunggulan ini, VSCode menjadi alat yang sangat mendukung dalam pengembangan berbasis Docker. Langkah-langkah Membuat Docker Image...