Terraform adalah tool yang digunakan untuk mengelola Infrastructure-as-a-Service (IaaS). Terraform sangat powerfull sehingga bisa menghancurkan segalanya bila salah menjalankannya, contoh anda menjalankan terraform destroy pada server production kantor ;). Dengan adanya terraform untuk provisioning banyak dan satu server code yang kita buat sama banyaknya, jadi sangat efisien waktu dan tenaga.

Ada baiknya bila ini pertama kali anda menggunakan terraform untuk berhati-hati.

Buat akun API Upcloud

Buat sub-account untuk provisioning server di terraform di upcloud dari menu people
simpan sebagai variable di ~/.bashrc

echo 'export UPCLOUD_USERNAME=username' | tee -a ~/.bashrc
echo 'export UPCLOUD_PASSWORD=password' | tee -a ~/.bashrc

hal ini penting agar credential tidak ikut tersimpan di git, atau version control yang digunakan.

buat variable.tf

terraform {
  required_providers {
    upcloud = {
      source  = "UpCloudLtd/upcloud"
      version = ">= 2.1.1"
    }
  }
}
 
provider "upcloud" {
}
 
variable "server_count" {
  default = "2"
}
 
variable "default_user" {
  default = "jaranguda"
}
 
variable "ssh_public_key" {
  default = "ssh-rsa AAAAB3NzaC1ycxxxxxxx"
}

pada variable.tf tersebut kita buat default_user, server_count dan provider agar tidak perlu berulang dan code lebih rapi dan terstruktur. Isikan SSH Public key anda, bila belum ada bisa dibuat dengan

ssh-keygen

Untuk servernya buat file nginx.tf

resource "upcloud_server" "nginx" {
 
  count    = var.server_count
  hostname = "nginx-${count.index + 1}"
  zone     = "sg-sin1"
  plan     = "1xCPU-1GB"
 
  template {
    size    = 25
    storage = "01000000-0000-4000-8000-000030200200"
  }
 
  # Network interfaces
  network_interface {
    type = "public"
  }
 
  network_interface {
    type = "utility"
  }
 
  # SSH Public key
  login {
    user = var.default_user
    keys = [var.ssh_public_key]
  }
 
  # konek ke server
  connection {
    host        = self.network_interface[0].ip_address
    type        = "ssh"
    user        = var.default_user
    private_key = file("/home/jaranguda/.ssh/id_rsa")
    agent       = true
  }
 
  # Setelah selesai install jalankan command
  provisioner "remote-exec" {
    inline = [
      "sudo apt update && sudo apt install nginx -yq"
    ]
  }
 
  # simpan public IP di file ips.txt
  provisioner "local-exec" {
    command = "echo ${self.network_interface[0].ip_address} >> ~/ips.txt"
  }
 
}

pada proses pembuatan server nginx diatas, kita akan membuat 2 buat web server nginx dan dibuat user jaranguda dan diberikan akses sudo. Contoh

uid=1000(jaranguda) gid=1000(jaranguda) groups=1000(jaranguda),27(sudo)

Setelah server selesai dibuat, akan di update dan install dengan apt, bisa dilihat di remote-exec

Private key sesuaikan dengan letak private key anda, default ada di /home/USERNAME/.ssh/id_rsa

Jalankan Terraform

Sebelum terraform dijalankan, download terlebih dahulu modul Upcloud dengan menjalankan

terraform init

Setelah selesai jalankan proses pembuatan server

terraform apply

tunggu beberapa saat anda akan diminta untuk mengetik yes

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.
 
  Enter a value: yes

lalu tekan enter agar proses provisioning dimulai.
proses terraform install berhasil

Tampilan di dashboard upcloud
terraform dashboard di upcloud

Karena server yang kita buat menggunakan IP Public, jadi bisa langsung di cek dengan mengakses IPv4
tampilan nginx di server terraform

Setelah testing selesai dengan mudah server-server yang tadi dibuat dihapus

terraform destroy

Leave a comment

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