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.
Tampilan di dashboard upcloud
Karena server yang kita buat menggunakan IP Public, jadi bisa langsung di cek dengan mengakses IPv4
Setelah testing selesai dengan mudah server-server yang tadi dibuat dihapus
terraform destroy