Hai!

Pada jurnal ini saya ingin membahas mengenai instance group dan instance template yang merupakan salah dua dari sekian banyak fitur keren di GCP.

Pertama adalah instance template dimana fungsinya adalah sebagai template untuk pembuatan instance atau vm. Mungkin bisa dibayangkan, jika kita ingin membuat banyak instance dengan spesifikasi ram, disk, os, hingga firewall yang sama, akan sangat repot kalau membuatnya satu-per-satu.

Dan disinilah instance template berperan. Template ini berisi parameter apa saja yang akan di apply di instance yang kita buat. Dan template ini bersifat global. Ya, kita bisa gunakan template tersebut di semua region dan zona.

Di jurnal ini saya buat skenarionya mirip di jurnal sebelumnya. Bisa dibaca dulu di Google Cloud: How to Retrieve Instance Logs using the Google Stackdriver Logging Agent and Automatically Save them to a Bucket. Kita install stackdriver logging agent dan log nya akan tersimpan di bucket.

Bucket yang saya gunakan masih sama yaitu misskecupbung-bucket-01.

Untuk membuat instance template, bisa ke menu Compute Engine > Instance Templates.

Di bawah ini terlihat saya belum memiliki template satupun, dan untuk membuatnya klik Create Instance Templates.

Bisa dilihat di bawah ini. Bukankah sangat mirip dengan ketika kita membuat sebuah instance sungguhan? Perbedaan utama ketika kita membuat instance template dibanding instance sungguhan terletak di zona dan region. Di instance template tidak kita definisikan parameter tersebut.

Disini saya definisikan namanya my-instance-template, dengan tipe f1-micro,

Scroll kebawah dan pilih boot disk nya Debian, dan di Access scopes pilih Set access for each API.

Masih sama seperti jurnal sebelumnya, agar lognya dapat di import ke bucket secara otomatis, harus memliki akses Write Only di Storage. Lalu klik Management, security, disks, networking, sole tenancy.

Kita bisa tambahkan labels, startup script:

#! /bin/bash

# Echo commands as they are run, to make debugging easier.
set -x

# Stop apt-get calls from trying to bring up UI.
export DEBIAN_FRONTEND=noninteractive

# Make sure installed packages are up to date with all security patches.
apt-get -yq update
apt-get -yq upgrade

# Install Google's Stackdriver logging agent, as per
# https://cloud.google.com/logging/docs/agent/installation
curl -sSO https://dl.google.com/cloudagents/install-logging-agent.sh
bash install-logging-agent.sh

# Install and run the "stress" tool to max the CPU load for a while.
apt-get -yq install stress
stress -c 8 -t 120

# Report that we're done.

# Metadata should be set in the "lab-logs-bucket" attribute using the "gs://mybucketname/" format.
log_bucket_metadata_name=lab-logs-bucket
log_bucket_metadata_url="http://metadata.google.internal/computeMetadata/v1/instance/attributes/${log_bucket_metadata_name}"
worker_log_bucket=$(curl -H "Metadata-Flavor: Google" "${log_bucket_metadata_url}")

# We write a file named after this machine.
worker_log_file="machine-$(hostname)-finished.txt"
echo "Phew!  Work completed at $(date)" >"${worker_log_file}"

# And we copy that file to the bucket specified in the metadata.
echo "Copying the log file to the bucket..."
gsutil cp "${worker_log_file}" "${worker_log_bucket}"

Dan metadata yang mengarah ke bucket. Masih sama seperti jurnal sebelumnya:). Jika sudah klik Create.

Hasilnya akan seperti berikut ini. Jadi, dari template yang sudah kita buat kita bisa membuat instance langsung.

Oh iya. Ketika kita klik nama instance template, dan saat menunjukkan detailnya, kita tidak menemukan opsi untuk Edit karena memang tidak bisa diubah. Cara paling mudah adalah dengan Create Similar ya. Dan untuk membuat instance dari template yang sudah dibuat, klik Create VM.

Tinggal diverifikasi dan klik Create. Tidak perlu diubah-ubah (mungkin hanya nama instance untuk pembeda) karena memang tujuan dari template adalah mempermudah.

Hasil instance nya adalah seperti berikut:

Dan ketika kita tunggu beberapa saat setelah proses stress, file lognya akan muncul:

Ya, semudah itu.

Selain cara melalui menu instance template untuk membuat instance, kita bisa langsung dari menu VM instances. Klik Create Instance.

Dan pilih menu New VM instance from template, dan pilih template nya. Lalu klik Continue.

Prosesnya sama, bisa kita ubah nama instancenya untuk pembeda dan langsung create.

Otomatis instance nya akan terbuat dengan spesifikasi yang sama dengan instance sebelumnya.

Dan tentu saja, log bucket akan otomatis disimpan ke bucket. Karena kita sudah definisikan startup script di template sebelumnya ya.

Bisa dibaca lebih jauh di sumbernya ya: https://cloud.google.com/compute/docs/instance-templates/.

Setelah instance template, kita bahas Instance Groups. Fitur ini merupakan fitur dimana kita bisa mengelompokkan instance-intance yang sudah kita buat menjadi satu. Ada banyak alasan mengapa harus dikelompokkan, misal karena butuh ketersediaan aplikasi yang tinggi.

Instance group terdiri dari dua tipe, managed dan unmanaged. Berdasarkan laman resminya disini https://cloud.google.com/compute/docs/instance-groups/, tipe unmanaged, ia secara sederhana hanya mengelompokkan instance-instance di sebuah group menjadi satu. Fungsinya bisa untuk load balancing, dan instance-instance dalam satu grup tersebut tidak harus sama spesifikasinya. Sedangkan managed biasanya untuk menjalankan aplikasi yang sama di instance-instance dengan spesifikasi yang sama pula. Ini bisa disebut duplikasi atau salinan. Jadi, ketika salah satu instance down/crash disebuah instance group, aplikasi akan tetap berjalan.

Perbedaan yang paling terlihat adalah di tipe managed, sebuah group bisa melakukan autoscaling (instance akan dibuat secara otomatis ketika load sedang tinggi dan instance akan otomatis dihapus ketika load sedang rendah untuk menghemat biaya), autohealing (ketika salah satu instance crash, maka otomatis akan dibuat instance baru untuk menggantikannya), dan itu bisa multi zone dan bisa auto update.

Untuk membuat instance group bisa ke ke menu Instance groups > create instance group.

Pertama, kita coba buat unmanaged instance group, disini kita bisa definisikan region, zona, network, dan anggota dari groupnya. Tambahkan instance-instance yang dibuat menggunakan template sebelumnya. Klik Create.

Dan hasilnya akan seperti berikut. Ketika salah satu instance crash/down, otomatis yang menyala tidak akan bertambah dan beban kerja dari instance yang crash tadi akan dialihkan ke instance yang masih menyala.

Bisa klik nama instance group untuk melihat detailnya. Terlihat anggotanya ada dua.

Selanjutnya kita buat instance group dengan tipe managed. Klik Create instance group.

Perbedaannya akan terlihat sekali dibandingkan dengan tipe unmanaged, bahwa tipe managed parameternya lebih banyak. Kita definisikan nama, lokasi bisa set multiple zones, dan bisa kita pilih zona mana saja yang akan menjadi tempat instance berada.

Ini juga merupakan salah satu kelebihan dari managed, dimana ketika salah satu zona terkena bencana, aplikasi akan tetap menyala di zona lainnya. Lalu scroll kebawah.

Kita bisa definisikan autoscaling policy nya, dimana target CPU utilization ini merupakan batas maksimal toleransi sebuah CPU di instance. Misal disini saya set 30%, maka ketika utilisasi cpu di satu instance menyentuh angka 30%, maka akan otomatis membuat instance baru.

Lalu kita bisa set cool down period, minimum dan maksimum instance di instance group.

Dan Autohealing nya berupa health check. Ini fitur mirip ping yang akan memanggil sebuah host untuk memastikan apakah host tersebut menyala atau tidak secara berkala. Disini health check akan memanggil sebuah instance secara berkala dan ketika dipanggil tidak merespon, maka dianggap crash/down dan otomatis akan dimatikan dan dibuat baru atau di recreate.

Disini tidak saya bahas health check terlebih dahulu:) maka tidak saya set dan klik Create.

Haislnya akan seperti berikut ini. Bisa klik nama instance groupnya.

Dan ketika load tinggi, akan dibuat instance baru dan ketika load rendah, instance akan dihapus. Di bawah ini contoh proses ketika instance baru dibuat untuk menangani proses stress.

Sekian!