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.
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 File | Keterangan |
---|---|
provider.tf | konfigurasi provider apa yang digunakan, disini kita menggunakan hetzner |
server.tf | konfigurasi untuk server, seperti nama server, ukuran dan lain-lain |
ssh.tf | untuk public SSH key yang akan ditambahkan di server yang baru dibuat |
variable.tf | konfigurasi 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 CODE | DESCRIPTION |
---|---|
nbg1 | Nuremberg 1 DC 3 |
hel1 | Helsinki 1 DC 2 |
fsn1 | Falkenstein 1 DC14 |
ash | Ashburn 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
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
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.