Terraform adalah tools yang berguna untuk mengelola infrastuktur anda dengan code. Dengan terraform sangat memudahkan untuk mendeploy aplikasi high-availability. Ada banyak provider yang terdaftar di Terraform Registry. Infrastructure as code mulai naik daun karena kemudahan dan bisa diprediksi.

Dengan IaC cloning server dengan berbagai konfigurasi yang rumit bisa dilakukan berulang kali dan masih mendapatkan hasil yang sama. Satu hal yang perlu di ingat walaupun anda menggunakan Terraform, anda harus tetap membaca dokumentasi dari masing-masing provider, karena tidak semua kompatibel dengan provider cloud.

Untuk menginstall Terraform sangat mudah, karena hanya butuh satu file untuk dijalankan. Cara ini bisa digunakan untuk menginstall Terraform di semua jenis Linux.

1. Download Terraform

wget https://releases.hashicorp.com/terraform/1.0.1/terraform_1.0.1_linux_amd64.zip

2. Ekstrak file zip

unzip terraform_1.0.1_linux_amd64.zip

hasil ekstrak ini akan menghasilkan satu file terraform
3. Beri akses executable

chmod +x terraform

4. Copy ke PATH /usr/bin/local agar bisa dijalankan darimana saja
proses ini membutuhkan akses sudo/root

sudo cp terraform /usr/bin/local/terraform

langkah ke-4 ini tidak terlalu perlu, karena bisa saja langung menjalankan filenya contoh /home/jaranguda/Download/terraform version

Perintah Dasar Terraform

Sebagai contoh kita akan menggunakan docker sebagai providernya. Sebelum bisa menggunakan untuk docker, terlebih dahulu install dockernya. Untuk menyimpan project terraform kita akan membuat folder baru dengan nama tutorial

mkdir tutorial

di dalam folder tutorial tersebut buat file main.tf yang berisi

terraform {
  required_providers {
    docker = {
      source = "kreuzwerker/docker"
    }
  }
}
 
provider "docker" {}
 
data "docker_registry_image" "httpd" {
  name = "httpd"
}
 
resource "docker_container" "httpd" {
  name  = "tutorial-terraform-docker"
  image = data.docker_registry_image.httpd.name
}

lalu jalankan inisialisasi

terraform init
# output
Initializing the backend...
 
Initializing provider plugins...
- Finding latest version of upcloudltd/upcloud...
- Installing upcloudltd/upcloud v2.1.1...
- Installed upcloudltd/upcloud v2.1.1 (self-signed, key ID 60B4E1988F222907)
...
...

Lakukan provision dengan menjalankan

terraform apply

Saat ditanya “Do you want to perform these actions?” ketik yes lalu tekan enter. Setelah selesai muncul informasi kurang lebih
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Verifikasi apakah pembuatan containter docker berhasil dengan perintah docker ps

> docker ps 
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS      NAMES
d2e24ffceab4   httpd           "httpd-foreground"       2 minutes ago    Up 2 minutes    80/tcp     tutorial-terraform-docker

contoh sederhana, kita ingin meng-ekspose port dari container httpd tersebut agar bisa diakses di browser (dari node). Disini kita akan mapping port 80 di container ke port 8000 di node, lakukan perubahan di file main.tf sehingga menjadi

terraform {
  required_providers {
    docker = {
      source = "kreuzwerker/docker"
    }
  }
}
 
provider "docker" {}
 
data "docker_registry_image" "httpd" {
  name = "httpd"
}
 
resource "docker_container" "httpd" {
  name  = "tutorial-terraform-docker"
  image = data.docker_registry_image.httpd.name
  ports {
    internal = 80
    external = 8000
  }
}

aplikasikan perubahan tersebut dengan menjalankan terraform apply sekali lagi. Cek kembali dengan docker ps

CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                  NAMES
2e6b048aeeaf   httpd           "httpd-foreground"       5 seconds ago    Up 5 seconds    0.0.0.0:8000->80/tcp   tutorial-terraform-docker

lalu buka di browser http://localhost:8000
access container from node

Bila sudah selesai melakukan testing, kita langsung bisa menghapus semuanya dengan terraform destroy
terraform destroy everything

Leave a comment

Your email address will not be published. Required fields are marked *