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.

Hetzner menggunakan token per-project, jadi kita bisa membuat project baru dan menggunakan token yang khusus untuk project tersebut, tanpa perlu khawatir akan tercampur dengan project yang lainnya. Token bisa dibuat dari Nama Project -> Security -> API Tokens.
generate api token hetzner
Biasanya saya menggunakan namaaplikasi+environment, contoh cmsabc-prod, cmsabc-dev, cmsabc-stg. Penamaan project ini bebas, sebisa mungkin diberi nama yang mudah dimengerti.

Contoh kasus install 3 server untuk aplikasi, IP server yang telah di install disimpan di file server-ips.txt. Mari kita mulai mengerjakan project ini dengan membuat folder app-project-hetzner

mkdir app-project-hetzner

difolder ini buat 4 file

Nama FileKeterangan
provider.tfkonfigurasi provider apa yang digunakan, disini kita menggunakan hetzner
server.tfkonfigurasi untuk server, seperti nama server, ukuran dan lain-lain
ssh.tfuntuk public SSH key yang akan ditambahkan di server yang baru dibuat
variable.tfkonfigurasi default, seperti sistem operasi, datacenter

Tiap-tiap provider bisa menggunakan format yang berbeda, untuk itu cek manual dari masing-masing provider
Mari kita buat satu persatu filenya

1. File provider.tf

Disini kita akan menambahkan provider yang digunakan dan versi dari config yang digunakan

terraform {
  required_providers {
    hcloud = {
      source  = "hetznercloud/hcloud"
      version = ">=1.32.0"
    }
  }
}
 
provider "hcloud" {
  token = var.hcloud_token
}

untuk hetzner, agar tidak perlu menginput token, kita akan menambahkan tokennya sebagai variable.

2. File server.tf

Disini kita akan menambahkan konfigurasi untuk server, seperti image yang digunakan, begitu juga akan dikasi label apa untuk memudahkan memisahkannya dengan berbagai deployment yang lain.
Terakhir setelah di deploy, kita akan menyimpan IPv4 dari masing-masing server pada file server-ips.txt

resource "hcloud_server" "app" {
  count       = var.instances
  name        = "server-${count.index}"
  image       = var.os_type
  server_type = var.server_type
  location    = var.location
  ssh_keys    = [hcloud_ssh_key.default.id]
  labels = {
    type = "app"
  }
 
  provisioner "local-exec" {
    command = "echo ${self.name} : ${self.ipv4_address} >> server-ips.txt"
  }
}

3. File ssh.tf

File ssh.tf ini berguna sebagai kunci untuk mengakses server, file SSH public key yang di deklarasikan disini akan ditambahkan ke user root server yang baru di-provision (deploy), sehingga kita bisa langsung login dan jauh lebih aman dibandingkan menggunakan password manual.

resource "hcloud_ssh_key" "default" {
  name       = "Jaranguda Public Key"
  public_key = file("~/.ssh/id_rsa.pub")
}

File ~/.ssh/id_rsa.pub adalah letak default bila anda menggenerate key SSH. Bila belum ada bisa digenerate dengan ssh-keygen. Salah satu kelemahan cara ini adalah kita tidak bisa menggunakan SSH key dengan nama yang sama untuk beberapa deployment yang berbeda. Solusinya bisa menggunakan remote-exec

4. File variable.tf

Disini tempat variable-nya disimpan, variable-variable ini yang nanti dipanggil dari file terraform

variable "hcloud_token" {
  default = "XXXXXXXXXXXXXXXXXXXX"
}
 
variable "location" {
  default = "ash"
}
 
variable "instances" {
  default = "3"
}
 
variable "server_type" {
  default = "cpx11"
}
 
variable "os_type" {
  default = "debian-11"
}

hcloud_token isi dengan token yang didapat dari console hetzner. Location tersebut adalah datacenter yang digunakan, pilihan Datacenter Hetzner saat ini

DATACENTER CODEDESCRIPTION
nbg1Nuremberg 1 DC 3
hel1Helsinki 1 DC 2
fsn1Falkenstein 1 DC14
ashAshburn DC1

untuk melihat informasi server type, images (distro os) gunakan hcloud, aplikasi CLI hetzner. Karena di dokumentasinya kurang lengkap, lebih baik menggunakan CLI ini.

Setelah selesai membuat ke empat file tersebut, sekarang kita akan memulai proses provisioning (deploy), pertama jalankan

terraform init

untuk mendownload config untuk provider hetzner, sama seperti yang kita set di file provider.tf.

Terakhir lakukan provisioning

terraform apply

saat diminta untuk menjawab “Enter a value:”, ketik yes lalu ENTER. Cara ini bisa dilewatkan dengan menambahkan parameter -auto-approve.

Setelah menjalankan terraform apply lihat control panel Hetzner
3 server baru ditambahkan

Cara konek ke Server

Setelah proses deployment selesai, cara untuk mengakses server tersebut adalah dengan SSH

ssh root@IP-SERVER

IP server tersebut bisa dilihat di file server-ips.txt ataupun dari console hetzner
ip server hetzner

Bersih Bersih

Kalo udah selesai digunakan/testing, semua server dan konfig yang dibuat oleh terraform bisa dihapus langsung, pada contoh diatas kita bisa langsung menghapus ketiga server dan ssh key yang sudah kita setting, caranya adalah dengan menjalankan

terraform destory

INGAT! sebelum menjalankan ini pastikan anda tidak salah folder ataupun project, karena semuanya akan dihapus tanpa tersisa.

Leave a comment

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