Ada banyak cara untuk men-deploy situs di Google Cloud. Masing-masing solusi menawarkan fitur, kapabilitas, dan level kontrol yang berbeda-beda. Compute Engine menawarkan level kontrol yang mendalam atas infrastruktur yang digunakan untuk menjalankan situs. Namun, solusi ini memerlukan sedikit lebih banyak pengelolaan operasional dibandingkan dengan solusi lain seperti Google Kubernetes Engines (GKE), App Engine, atau lainnya. Dengan Compute Engine, Anda memiliki kontrol mendetail atas berbagai aspek infrastruktur, termasuk virtual machine, load balancer, dan lainnya.
Di lab ini, Anda akan mempelajari cara men-deploy aplikasi contoh, yakni situs e-commerce "Fancy Store", untuk menunjukkan bagaimana situs dapat di-deploy dan diskalakan dengan mudah menggunakan Compute Engine.
Di akhir lab, Anda akan memiliki instance di dalam grup instance terkelola untuk menyediakan autohealing, load balancing, penskalaan otomatis, dan update bertahap untuk situs Anda.
Baca petunjuk ini. Lab memiliki timer dan Anda tidak dapat menjedanya. Timer yang dimulai saat Anda mengklik Start Lab akan menampilkan durasi ketersediaan resource Google Cloud untuk Anda.
Lab interaktif ini dapat Anda gunakan untuk melakukan aktivitas lab di lingkungan cloud sungguhan, bukan di lingkungan demo atau simulasi. Untuk mengakses lab ini, Anda akan diberi kredensial baru yang bersifat sementara dan dapat digunakan untuk login serta mengakses Google Cloud selama durasi lab.
Setelah beberapa saat, Konsol Google Cloud akan terbuka di tab ini.
Cloud Shell adalah mesin virtual yang dilengkapi dengan berbagai alat pengembangan. Mesin virtual ini menawarkan direktori beranda persisten berkapasitas 5 GB dan berjalan di Google Cloud. Cloud Shell menyediakan akses command-line untuk resource Google Cloud Anda.
Resource Compute Engine tertentu berada di region dan zona. Region adalah lokasi geografis spesifik tempat Anda dapat menjalankan resource. Setiap region memiliki satu atau beberapa zona.
Jalankan perintah gcloud berikut di Cloud Shell guna menetapkan region dan zona default untuk lab Anda:
Anda akan menggunakan bucket Cloud Storage untuk menampung kode yang Anda buat serta skrip startup Anda.
Lab ini menggunakan situs e-commerce Fancy Store yang ada berdasarkan repositori monolith-to-microservices sebagai dasar untuk situs Anda.
Dalam tugas ini, Anda akan membuat clone kode sumber sehingga dapat berfokus pada aspek deployment ke Compute Engine. Nanti di lab ini, Anda akan melakukan update kecil pada kode untuk menunjukkan kemudahan melakukan update di Compute Engine.
Perlu waktu beberapa menit hingga skrip ini selesai.
Anda akan menerima output berikut.
Tindakan ini akan membuka jendela baru yang menampilkan frontend Fancy Store.
Sekarang saatnya untuk mulai men-deploy instance Compute Engine.
Skrip startup digunakan agar setiap kali dimulai, instance tahu apa yang harus dilakukan. Dengan cara ini, instance akan dikonfigurasi secara otomatis.
-
Klik Save atau tekan CTRL+S untuk menyimpan file startup-script.sh, tetapi jangan menutupnya dulu.
-
Lihat bagian kanan bawah Editor Kode Cloud Shell dan pastikan "End of Line Sequence" ditetapkan sebagai "LF", bukan "CRLF".

- Jika "End of Line Sequence" ditetapkan sebagai CRLF, klik CRLF, lalu pilih LF pada drop-down.
- Jika sudah berupa LF, biarkan saja.
Kembali ke Cloud Shell Terminal, lalu jalankan perintah berikut untuk menyalin file startup-script.sh ke bucket Anda:
gcloud storage cp ~/monolith-to-microservices/startup-script.sh gs://fancy-store-{{{project_0.project_id | Project ID}}}
File tersebut sekarang dapat diakses di: https://storage.googleapis.com/[BUCKET_NAME]/startup-script.sh.
[BUCKET_NAME] mewakili nama bucket Cloud Storage. Secara default, nama ini hanya dapat dilihat oleh pengguna yang diizinkan serta akun layanan, dan tidak dapat diakses di browser web. Instance Compute Engine secara otomatis dapat mengakses nama ini melalui akun layanannya.
Skrip startup akan melakukan tugas-tugas berikut:
- Menginstal agen Logging. Agen ini mengumpulkan log dari syslog secara otomatis.
- Menginstal Node.js dan Supervisor. Supervisor menjalankan aplikasi sebagai daemon.
- Membuat clone kode sumber aplikasi dari Bucket Cloud Storage, lalu menginstal dependensi.
- Mengonfigurasi Supervisor untuk menjalankan aplikasi. Supervisor memastikan aplikasi dimulai ulang jika tertutup secara tidak terduga atau dihentikan oleh admin atau proses. Supervisor juga akan mengirimkan stdout dan stderr aplikasi ke syslog untuk dikumpulkan oleh agen Logging.
Menyalin kode ke bucket Cloud Storage
Saat diluncurkan, instance mengambil kode dari bucket Cloud Storage, sehingga Anda dapat menyimpan beberapa variabel konfigurasi dalam file .env kode tersebut.
Catatan: Anda juga dapat membuat kode ini mengambil variabel lingkungan dari tempat lain. Namun, untuk tujuan demonstrasi ini, kita menggunakan metode sederhana ini untuk menangani konfigurasi. Dalam produksi, variabel lingkungan kemungkinan akan disimpan di luar kode.
- Jalankan perintah berikut untuk menyalin clone kode ke bucket Anda:
cd ~
rm -rf monolith-to-microservices/*/node_modules
gcloud storage cp -r monolith-to-microservices gs://fancy-store-{{{project_0.project_id | Project ID}}}/
Catatan: Direktori dependensi node_modules dihapus guna memastikan penyalinan dapat dilakukan secepat dan seefisien mungkin. Direktori ini dibuat ulang di instance saat instance dimulai.
Klik Periksa progres saya untuk memverifikasi tujuan.
Menyalin skrip startup dan kode ke bucket Cloud Storage
Men-deploy backend instance
Instance pertama yang akan di-deploy adalah backend instance, yang menampung microservice Orders dan Products.
Catatan: Dalam lingkungan produksi, sebaiknya pisahkan tiap microservice ke dalam instance dan grup instance-nya masing-masing agar dapat diskalakan sendiri-sendiri. Untuk tujuan demonstrasi, kedua microservice backend (Orders & Products) akan berada di instance dan grup instance yang sama.
- Jalankan perintah berikut untuk membuat instance
e2-standard-2 yang dikonfigurasi untuk menggunakan skrip startup. Instance ini ditandai sebagai backend instance, sehingga Anda dapat menerapkan aturan firewall tertentu padanya nanti:
gcloud compute instances create backend \
--zone={{{project_0.default_zone | zone}}} \
--machine-type=e2-standard-2 \
--tags=backend \
--image-family={{{project_0.startup_script.debian_image_id_short | Debian image name}}} \
--image-project=debian-cloud \
--metadata=startup-script-url=https://storage.googleapis.com/fancy-store-{{{project_0.project_id | Project ID}}}/startup-script.sh
Mengonfigurasi koneksi ke backend
Sebelum men-deploy frontend aplikasi, Anda perlu mengubah konfigurasinya agar mengarah ke backend yang baru saja Anda deploy.
- Ambil alamat IP eksternal backend dengan perintah berikut. Lihat alamat backend instance tersebut di tab
EXTERNAL_IP:
gcloud compute instances list
Contoh output:
NAME: backend
ZONE: {{{project_0.default_zone | zone}}}
MACHINE_TYPE: e2-standard-2
PREEMPTIBLE:
INTERNAL_IP: 10.142.0.2
EXTERNAL_IP: 35.237.245.193
STATUS: RUNNING
-
Salin IP Eksternal backend.
-
Di Cloud Shell Explorer, buka monolith-to-microservices > react-app.
-
Di Editor Kode, pilih View > Toggle Hidden Files untuk melihat file .env.
Di langkah berikutnya, Anda akan mengedit file .env supaya diarahkan ke IP Eksternal backend. [BACKEND_ADDRESS] mewakili alamat IP Eksternal dari backend instance yang diidentifikasi dari perintah gcloud yang baru saja dijalankan.
- Di file
.env, ganti localhost dengan [BACKEND_ADDRESS] Anda:
REACT_APP_ORDERS_URL=http://[BACKEND_ADDRESS]:8081/api/orders
REACT_APP_PRODUCTS_URL=http://[BACKEND_ADDRESS]:8082/api/products
-
Simpan file dengan mengklik tombol Save.
-
Di Cloud Shell, jalankan perintah berikut untuk membangun ulang react-app, sehingga mengubah kode frontend:
cd ~/monolith-to-microservices/react-app
npm install && npm run-script build
- Kemudian jalankan perintah berikut untuk menyalin kode aplikasi ke dalam bucket Cloud Storage:
cd ~
rm -rf monolith-to-microservices/*/node_modules
gcloud storage cp -r monolith-to-microservices gs://fancy-store-{{{project_0.project_id | Project ID}}}/
Men-deploy frontend instance
Sekarang setelah kode dikonfigurasi, Anda siap men-deploy frontend instance.
- Jalankan perintah berikut untuk men-deploy
frontend instance dengan perintah serupa seperti sebelumnya. Instance ini ditandai sebagai frontend untuk keperluan firewall:
gcloud compute instances create frontend \
--zone={{{project_0.default_zone | zone}}} \
--machine-type=e2-standard-2 \
--tags=frontend \
--image-family={{{project_0.startup_script.debian_image_id_short | Debian image name}}} \
--image-project=debian-cloud \
--metadata=startup-script-url=https://storage.googleapis.com/fancy-store-{{{project_0.project_id | Project ID}}}/startup-script.sh
Catatan: Perintah deployment dan skrip startup digunakan dengan frontend dan backend instance untuk kemudahan, dan karena kode dikonfigurasi untuk meluncurkan semua microservice secara default. Sebab itu, dalam contoh ini, semua microservice berjalan baik di frontend maupun backend. Dalam lingkungan produksi, Anda hanya akan menjalankan microservice yang Anda perlukan pada tiap komponen.
Mengonfigurasi jaringan
- Jalankan perintah berikut untuk membuat aturan firewall yang mengizinkan akses ke port 8080 untuk frontend, dan port 8081-8082 untuk backend. Perintah firewall ini menggunakan tag yang ditetapkan dalam pembuatan instance untuk aplikasi:
gcloud compute firewall-rules create fw-fe \
--allow tcp:8080 \
--target-tags=frontend
gcloud compute firewall-rules create fw-be \
--allow tcp:8081-8082 \
--target-tags=backend
Situs tersebut kini seharusnya sudah dapat berfungsi sepenuhnya.
- Untuk membuka IP eksternal
frontend, Anda perlu mengetahui alamatnya. Jalankan perintah berikut dan cari EXTERNAL_IP dari frontend instance:
gcloud compute instances list
Contoh output:
NAME: backend
ZONE: us-central1-f
MACHINE_TYPE: e2-standard-2
PREEMPTIBLE:
INTERNAL_IP: 10.128.0.2
EXTERNAL_IP: 34.27.178.79
STATUS: RUNNING
NAME: frontend
ZONE: us-central1-f
MACHINE_TYPE: e2-standard-2
PREEMPTIBLE:
INTERNAL_IP: 10.128.0.3
EXTERNAL_IP: 34.172.241.242
STATUS: RUNNING
Mungkin diperlukan waktu beberapa menit agar instance dapat dimulai dan dikonfigurasi.
-
Tunggu 3 menit, lalu buka tab browser baru dan masukkan alamat http://[FRONTEND_ADDRESS]:8080 untuk mengakses situs. Di sini, [FRONTEND_ADDRESS] adalah EXTERNAL_IP frontend yang sebelumnya diidentifikasi.
-
Coba buka halaman Products dan Orders. Seharusnya sekarang semuanya berfungsi.

Klik Periksa progres saya untuk memverifikasi tujuan.
Men-deploy instance dan mengonfigurasi jaringan
Tugas 5. Membuat grup instance terkelola
Agar aplikasi dapat diskalakan, grup instance terkelola akan dibuat dengan menggunakan instance frontend dan backend sebagai Template Instance.
Grup instance terkelola (MIG) berisi instance identik yang dapat Anda kelola sebagai satu entity dalam satu zona. Grup instance terkelola menjaga agar aplikasi Anda memiliki tingkat ketersediaan tinggi dengan secara proaktif memastikan instance Anda terus tersedia, yaitu dalam status RUNNING. Anda akan menggunakan grup instance terkelola untuk frontend instance dan backend instance guna menyediakan autohealing, load balancing, penskalaan otomatis, dan update bertahap.
Membuat template instance dari instance sumber
Sebelum dapat membuat grup instance terkelola, Anda harus terlebih dahulu membuat template instance yang akan menjadi fondasi grup tersebut. Dengan template instance, Anda dapat menentukan jenis mesin, boot disk image atau image container, jaringan, dan properti instance lainnya yang akan digunakan saat membuat instance VM baru. Anda dapat menggunakan template instance untuk membuat instance dalam grup instance terkelola atau bahkan membuat instance terpisah.
Untuk membuat template instance, gunakan instance yang sudah Anda buat sebelumnya.
- Pertama, jalankan perintah berikut untuk menghentikan kedua instance:
gcloud compute instances stop frontend --zone={{{project_0.default_zone | zone}}}
gcloud compute instances stop backend --zone={{{project_0.default_zone | zone}}}
- Kemudian, buat template instance dari setiap instance sumber dengan perintah berikut:
gcloud compute instance-templates create fancy-fe \
--source-instance-zone={{{project_0.default_zone | zone}}} \
--source-instance=frontend
gcloud compute instance-templates create fancy-be \
--source-instance-zone={{{project_0.default_zone | zone}}} \
--source-instance=backend
- Jalankan perintah berikut untuk mengonfirmasi bahwa template instance telah dibuat:
gcloud compute instance-templates list
Contoh output:
NAME: fancy-be
MACHINE_TYPE: e2-standard-2
PREEMPTIBLE:
CREATION_TIMESTAMP: 2023-07-25T14:52:21.933-07:00
NAME: fancy-fe
MACHINE_TYPE: e2-standard-2
PREEMPTIBLE:
CREATION_TIMESTAMP: 2023-07-25T14:52:15.442-07:00
- Setelah template instance dibuat, jalankan perintah berikut untuk menghapus VM
backend guna menghemat ruang resource:
gcloud compute instances delete backend --zone={{{project_0.default_zone | zone}}}
- Ketikkan y dan tekan Enter saat diminta.
Biasanya, Anda juga dapat menghapus VM frontend, tetapi Anda akan menggunakannya untuk mengupdate template instance nanti di lab.
Membuat grup instance terkelola
- Selanjutnya, jalankan perintah berikut untuk membuat dua grup instance terkelola, satu untuk frontend dan satu lagi untuk backend:
gcloud compute instance-groups managed create fancy-fe-mig \
--zone={{{project_0.default_zone | zone}}} \
--base-instance-name fancy-fe \
--size 2 \
--template fancy-fe
gcloud compute instance-groups managed create fancy-be-mig \
--zone={{{project_0.default_zone | zone}}} \
--base-instance-name fancy-be \
--size 2 \
--template fancy-be
Grup instance terkelola ini akan menggunakan template instance dan dikonfigurasi sehingga dua instance akan dimulai dalam setiap grup. Instance secara otomatis diberi nama berdasarkan base-instance-name yang ditentukan dengan penambahan karakter acak.
- Jalankan perintah berikut guna memastikan bahwa untuk aplikasi Anda, microservice
frontend berjalan di port 8080, dan microservice backend berjalan di port 8081 untuk orders, dan port 8082 untuk products:
gcloud compute instance-groups set-named-ports fancy-fe-mig \
--zone={{{project_0.default_zone | zone}}} \
--named-ports frontend:8080
gcloud compute instance-groups set-named-ports fancy-be-mig \
--zone={{{project_0.default_zone | zone}}} \
--named-ports orders:8081,products:8082
Karena ini adalah port nonstandar, Anda perlu menentukan port bernama untuk mengidentifikasinya. Port bernama adalah metadata pasangan nilai kunci yang mewakili nama layanan dan port tempatnya dijalankan. Port bernama dapat ditetapkan ke grup instance, yang menunjukkan bahwa layanan tersedia di semua instance dalam grup. Informasi ini digunakan oleh layanan Load Balancing HTTP yang akan Anda konfigurasi nanti.
Mengonfigurasi autohealing
Untuk meningkatkan ketersediaan aplikasi itu sendiri dan memverifikasi bahwa aplikasi responsif, atur kebijakan autohealing untuk grup instance terkelola.
Kebijakan autohealing bergantung pada health check berbasis aplikasi untuk memverifikasi bahwa aplikasi memberikan respons sesuai yang diharapkan. Memeriksa respons aplikasi lebih presisi dibanding hanya memverifikasi bahwa suatu instance berstatus RUNNING, yang merupakan perilaku default.
Catatan: Ada health check terpisah yang digunakan untuk load balancing dan autohealing. Health check untuk load balancing dapat dan seharusnya lebih agresif karena health check ini mengidentifikasi apakah suatu instance menerima traffic pengguna atau tidak. Anda perlu segera mendeteksi instance yang tidak responsif, sehingga dapat mengalihkan traffic jika diperlukan.
Sebaliknya, health check untuk autohealing menyebabkan Compute Engine secara proaktif mengganti instance yang gagal, sehingga health check ini harus lebih konservatif daripada health check load balancing.
- Jalankan perintah berikut untuk membuat health check yang akan memperbaiki instance jika memberikan respons "unhealthy" 3 kali berturut-turut untuk
frontend dan backend:
gcloud compute health-checks create http fancy-fe-hc \
--port 8080 \
--check-interval 30s \
--healthy-threshold 1 \
--timeout 10s \
--unhealthy-threshold 3
gcloud compute health-checks create http fancy-be-hc \
--port 8081 \
--request-path=/api/orders \
--check-interval 30s \
--healthy-threshold 1 \
--timeout 10s \
--unhealthy-threshold 3
- Jalankan perintah berikut untuk membuat aturan firewall yang mengizinkan pemeriksaan health check terhubung ke microservice pada port 8080-8081:
gcloud compute firewall-rules create allow-health-check \
--allow tcp:8080-8081 \
--source-ranges 130.211.0.0/22,35.191.0.0/16 \
--network default
- Terapkan health check ke layanannya masing-masing dengan perintah berikut:
gcloud compute instance-groups managed update fancy-fe-mig \
--zone={{{project_0.default_zone | zone}}} \
--health-check fancy-fe-hc \
--initial-delay 300
gcloud compute instance-groups managed update fancy-be-mig \
--zone={{{project_0.default_zone | zone}}} \
--health-check fancy-be-hc \
--initial-delay 300
Note: It can take 15 minutes before autohealing begins monitoring instances in the group.
- Lanjutkan aktivitas lab untuk memberikan waktu bagi autohealing memantau instance dalam grup. Anda akan menyimulasikan kegagalan untuk menguji autohealing di akhir lab.
Klik Periksa progres saya untuk memverifikasi tujuan.
Membuat grup instance terkelola
Tugas 6. Membuat load balancer
Untuk melengkapi grup instance terkelola Anda, gunakan Load Balancer HTTP(S) untuk melayani traffic ke microservice frontend dan backend, dan gunakan pemetaan untuk mengirim traffic ke layanan backend yang tepat berdasarkan aturan penetapan jalur. Pendekatan ini akan mengekspos satu IP yang di-load balance untuk semua layanan.
Anda dapat mempelajari lebih lanjut opsi Load Balancing di Google Cloud: Ringkasan Load Balancing.
Membuat load balancer HTTP(S)
Google Cloud menawarkan beragam jenis load balancer. Untuk lab ini, Anda akan menggunakan Load Balancer HTTP(S) untuk traffic Anda. Load balancer HTTP disusun sebagai berikut:
- Aturan penerusan mengarahkan permintaan masuk ke proxy HTTP target.
- Proxy HTTP target memeriksa tiap permintaan berdasarkan peta URL guna menentukan layanan backend yang sesuai untuk permintaan tersebut.
- Layanan backend mengarahkan tiap permintaan ke backend yang sesuai berdasarkan kapasitas penyajian, zona, dan kondisi instance dari backend yang terkait. Kondisi tiap backend instance diverifikasi menggunakan health check HTTP. Jika layanan backend dikonfigurasi untuk menggunakan health check HTTPS atau HTTP/2, permintaan akan dienkripsi saat dikirimkan ke backend instance.
- Sesi antara load balancer dan instance dapat menggunakan protokol HTTP, HTTPS, atau HTTP/2. Jika Anda menggunakan HTTPS atau HTTP/2, tiap instance di layanan backend harus memiliki sertifikat SSL.
Catatan: Untuk tujuan demonstrasi ini, gunakan HTTP, bukan HTTPS, untuk menghindari kerumitan sertifikat SSL. Untuk produksi, sebaiknya gunakan HTTPS untuk enkripsi jika memungkinkan.
- Jalankan perintah berikut untuk membuat health check yang digunakan untuk mengidentifikasi instance mana yang mampu melayani traffic untuk setiap layanan:
gcloud compute health-checks create http fancy-fe-frontend-hc \
--request-path=/ \
--port=8080
gcloud compute health-checks create http fancy-be-orders-hc \
--request-path=/api/orders \
--port=8081
gcloud compute health-checks create http fancy-be-products-hc \
--request-path=/api/products \
--port=8082
Catatan: Health check ini ditujukan untuk load balancer dan hanya menangani pengarahan traffic dari load balancer; proses ini tidak menyebabkan grup instance terkelola membuat ulang instance.
- Jalankan perintah berikut untuk membuat layanan backend yang menjadi target untuk traffic yang di-load balance; layanan backend tersebut menggunakan health check dan port bernama yang Anda buat:
gcloud compute backend-services create fancy-fe-frontend \
--health-checks=fancy-fe-frontend-hc \
--port-name=frontend \
--global
gcloud compute backend-services create fancy-be-orders \
--health-checks=fancy-be-orders-hc \
--port-name=orders \
--global
gcloud compute backend-services create fancy-be-products \
--health-checks=fancy-be-products-hc \
--port-name=products \
--global
- Jalankan perintah berikut untuk menambahkan layanan backend load balancer:
gcloud compute backend-services add-backend fancy-fe-frontend \
--instance-group-zone={{{project_0.default_zone | zone}}} \
--instance-group fancy-fe-mig \
--global
gcloud compute backend-services add-backend fancy-be-orders \
--instance-group-zone={{{project_0.default_zone | zone}}} \
--instance-group fancy-be-mig \
--global
gcloud compute backend-services add-backend fancy-be-products \
--instance-group-zone={{{project_0.default_zone | zone}}} \
--instance-group fancy-be-mig \
--global
- Jalankan perintah berikut untuk membuat peta URL yang menentukan layanan backend tujuan bagi masing-masing URL:
gcloud compute url-maps create fancy-map \
--default-service fancy-fe-frontend
- Jalankan perintah berikut untuk membuat path matcher yang memungkinkan jalur
/api/orders dan /api/products diarahkan ke layanannya masing-masing:
gcloud compute url-maps add-path-matcher fancy-map \
--default-service fancy-fe-frontend \
--path-matcher-name orders \
--path-rules "/api/orders=fancy-be-orders,/api/products=fancy-be-products"
- Jalankan perintah berikut untuk membuat proxy yang terhubung ke peta URL:
gcloud compute target-http-proxies create fancy-proxy \
--url-map fancy-map
- Jalankan perintah berikut untuk membuat aturan penerusan global yang menghubungkan alamat IP publik dan port ke proxy:
gcloud compute forwarding-rules create fancy-http-rule \
--global \
--target-http-proxy fancy-proxy \
--ports 80
Klik Periksa progres saya untuk memverifikasi tujuan.
Membuat load balancer HTTP(S)
Mengubah konfigurasi
Sekarang Anda sudah memiliki alamat IP statis baru, jadi ubah kode di frontend supaya diarahkan ke alamat baru ini, bukan alamat sementara sebelumnya yang diarahkan ke backend instance.
- Di Cloud Shell, jalankan perintah berikut untuk beralih ke folder
react-app yang berisi file .env, yang menyimpan konfigurasi:
cd ~/monolith-to-microservices/react-app/
- Cari alamat IP untuk Load Balancer dengan menjalankan perintah berikut:
gcloud compute forwarding-rules list --global
Contoh output:
NAME: fancy-http-rule
REGION:
IP_ADDRESS: 34.111.203.235
IP_PROTOCOL: TCP
TARGET: fancy-proxy
- Kembali ke Editor Cloud Shell, lalu edit lagi file
.env agar mengarah ke IP Publik Load Balancer. [LB_IP] mewakili alamat IP Eksternal dari backend instance yang ditentukan tadi.
REACT_APP_ORDERS_URL=http://[LB_IP]/api/orders
REACT_APP_PRODUCTS_URL=http://[LB_IP]/api/products
Catatan: Port dihapus di alamat yang baru karena load balancer dikonfigurasi untuk menangani penerusan ini bagi Anda.
-
Simpan file dengan mengklik tombol Save.
-
Jalankan perintah berikut untuk membangun ulang react-app sehingga mengubah kode frontend:
cd ~/monolith-to-microservices/react-app
npm install && npm run-script build
- Jalankan perintah berikut untuk menyalin kode aplikasi ke bucket Anda:
cd ~
rm -rf monolith-to-microservices/*/node_modules
gcloud storage cp -r monolith-to-microservices gs://fancy-store-{{{project_0.project_id | Project ID}}}/
Mengupdate frontend instance
Mengingat sudah ada konfigurasi dan kode yang baru, frontend instance dalam grup instance terkelola sebaiknya mengambil kode baru itu.
- Karena instance Anda mengambil kode saat sistem dimulai, jalankan perintah berikut untuk menginisiasi proses mulai ulang bertahap:
gcloud compute instance-groups managed rolling-action replace fancy-fe-mig \
--zone={{{project_0.default_zone | zone}}} \
--max-unavailable 100%
Catatan: Dalam contoh penggantian bertahap ini, Anda secara spesifik menyatakan bahwa semua mesin dapat segera diganti melalui parameter --max-unavailable. Tanpa parameter ini, perintah di atas akan menyisakan satu instance yang tetap berjalan sambil memulai ulang instance lainnya untuk memastikan ketersediaan. Untuk tujuan pengujian ini, Anda menyatakan bahwa semua instance dapat segera diganti guna mempercepat prosesnya.
Klik Periksa progres saya untuk memverifikasi tujuan.
Mengupdate frontend instance
Menguji situs
- Tunggu 3 menit setelah Anda memberikan perintah
rolling-action replace agar ada cukup waktu untuk pemrosesan instance, lalu periksa status grup instance terkelola. Jalankan perintah berikut untuk mengonfirmasi bahwa layanan tercantum sebagai HEALTHY:
watch -n 2 gcloud compute backend-services get-health fancy-fe-frontend --global
- Tunggu hingga kedua layanan tercantum sebagai HEALTHY.
Contoh output:
backend: https://www.googleapis.com/compute/v1/projects/my-gce-codelab/zones/us-central1-a/instanceGroups/fancy-fe-mig
status:
healthStatus:
- healthState: HEALTHY
instance: https://www.googleapis.com/compute/v1/projects/my-gce-codelab/zones/us-central1-a/instances/fancy-fe-x151
ipAddress: 10.128.0.7
port: 8080
- healthState: HEALTHY
instance: https://www.googleapis.com/compute/v1/projects/my-gce-codelab/zones/us-central1-a/instances/fancy-fe-cgrt
ipAddress: 10.128.0.11
port: 8080
kind: compute#backendServiceGroupHealth
Catatan: Jika satu instance mengalami masalah dan statusnya UNHEALTHY, instance tersebut akan otomatis diperbaiki. Tunggu sampai perbaikan ini terjadi.
Jika tidak ada instance yang menunjukkan status HEALTHY setelah ditunggu beberapa saat, berarti ada yang salah dengan konfigurasi frontend instance sehingga tidak dapat diakses pada port 8080. Uji hal ini dengan mengakses instance secara langsung pada port 8080.
- Setelah kedua item muncul sebagai HEALTHY pada daftar, keluar dari perintah
watch dengan menekan CTRL+C.
Catatan: Aplikasi dapat diakses melalui http://[LB_IP]. [LB_IP] adalah IP_ADDRESS yang ditentukan untuk Load Balancer dan dapat ditemukan dengan perintah berikut:
gcloud compute forwarding-rules list --global
Anda akan memeriksa aplikasinya nanti di lab.
Tugas 7. Menskalakan Compute Engine
Sejauh ini Anda telah membuat dua grup instance terkelola, masing-masing dengan dua instance. Konfigurasi ini sepenuhnya berfungsi, tetapi merupakan konfigurasi statis yang tidak beradaptasi terhadap beban. Selanjutnya, Anda akan membuat kebijakan penskalaan otomatis berdasarkan penggunaan untuk secara otomatis menskalakan masing-masing grup instance terkelola.
Mengubah ukuran secara otomatis berdasarkan penggunaan
- Untuk membuat kebijakan penskalaan otomatis, jalankan perintah berikut:
gcloud compute instance-groups managed set-autoscaling \
fancy-fe-mig \
--zone={{{project_0.default_zone | zone}}} \
--max-num-replicas 2 \
--target-load-balancing-utilization 0.60
gcloud compute instance-groups managed set-autoscaling \
fancy-be-mig \
--zone={{{project_0.default_zone | zone}}} \
--max-num-replicas 2 \
--target-load-balancing-utilization 0.60
Perintah ini membuat autoscaler di grup instance terkelola yang otomatis menambahkan instance ketika penggunaan load balancer melebihi 60%, dan menghapus instance ketika penggunaannya kurang dari 60%.
Mengaktifkan jaringan penayangan konten
Cara lain yang dapat membantu penskalaan adalah dengan mengaktifkan layanan Jaringan Penayangan Konten guna menyediakan penyimpanan cache untuk frontend.
- Jalankan perintah berikut pada layanan frontend:
gcloud compute backend-services update fancy-fe-frontend \
--enable-cdn --global
Saat pengguna meminta konten dari load balancer HTTP(S), permintaan tersebut akan mencapai Google Front End (GFE) yang pertama-tama akan mencari respons untuk permintaan pengguna di cache Cloud CDN. Jika menemukan respons yang di-cache, GFE akan mengirimkannya kepada pengguna. Kondisi ini disebut sebagai cache hit (cache ditemukan).
Jika tidak dapat menemukan respons yang di-cache untuk permintaan tersebut, GFE akan membuat permintaan langsung ke backend. Jika respons untuk permintaan ini dapat disimpan ke dalam cache, GFE akan menyimpannya ke dalam cache Cloud CDN agar cache tersebut dapat digunakan untuk permintaan berikutnya.
Klik Periksa progres saya untuk memverifikasi tujuan.
Menskalakan Compute Engine
Tugas 8. Mengupdate situs
Mengupdate template instance
Template instance yang ada tidak dapat diedit. Namun, karena instance Anda bersifat stateless dan semua konfigurasi dilakukan melalui skrip startup, Anda hanya perlu mengubah template instance jika ingin mengubah setelan template. Dalam tugas ini, Anda akan membuat perubahan sederhana, yaitu menggunakan jenis mesin yang lebih besar, dan menerapkannya.
Lakukan tindakan berikut dengan mengikuti langkah-langkah di bawah:
-
Update frontend instance, yang bertindak sebagai dasar untuk template instance. Dalam update ini, masukkan sebuah file ke versi terbaru image template instance, update template instance, luncurkan template baru, lalu konfirmasi bahwa file tersebut ada di instance grup instance terkelola.
-
Ubah jenis mesin template instance Anda dari e2-standard-2 menjadi e2-small.
- Jalankan perintah berikut untuk mengubah jenis mesin frontend instance:
gcloud compute instances set-machine-type frontend \
--zone={{{project_0.default_zone | zone}}} \
--machine-type e2-small
- Jalankan perintah berikut untuk membuat Template Instance baru:
gcloud compute instance-templates create fancy-fe-new \
--region=$REGION \
--source-instance=frontend \
--source-instance-zone={{{project_0.default_zone | zone}}}
- Luncurkan template instance yang diupdate ke Grup Instance Terkelola menggunakan perintah berikut:
gcloud compute instance-groups managed rolling-action start-update fancy-fe-mig \
--zone={{{project_0.default_zone | zone}}} \
--version template=fancy-fe-new
- Tunggu 3 menit, lalu jalankan perintah berikut untuk memantau status update:
watch -n 2 gcloud compute instance-groups managed list-instances fancy-fe-mig \
--zone={{{project_0.default_zone | zone}}}
Proses ini memerlukan waktu beberapa menit.
Pastikan Anda memiliki setidaknya satu instance dalam kondisi berikut sebelum melanjutkan:
- STATUS: RUNNING
- ACTION: None
- INSTANCE_TEMPLATE: nama template baru (fancy-fe-new)
-
Salin nama salah satu mesin yang tercantum untuk digunakan pada perintah berikutnya.
-
Tekan CTRL+C untuk keluar dari proses watch.
-
Jalankan perintah berikut untuk melihat apakah virtual machine sudah menggunakan jenis mesin baru (e2-small), dengan [VM_NAME] adalah instance yang baru dibuat:
gcloud compute instances describe [VM_NAME] --zone={{{project_0.default_zone | zone}}} | grep machineType
Contoh output yang seharusnya:
machineType: https://www.googleapis.com/compute/v1/projects/project-name/zones/us-central1-f/machineTypes/e2-small
Membuat perubahan pada situs
Skenario: Tim pemasaran telah meminta Anda mengubah halaman beranda situs Anda. Menurut mereka, halaman ini harus lebih menggambarkan perusahaan Anda dan apa yang sebenarnya Anda jual.
Di bagian ini, Anda akan menambahkan teks ke beranda untuk memenuhi permintaan tim pemasaran. Sepertinya salah satu developer telah membuat perubahan itu dengan nama file index.js.new. Salin saja file ini ke index.js dan perubahannya akan diterapkan. Lakukan petunjuk berikut untuk membuat perubahan yang sesuai.
- Jalankan perintah berikut untuk menyalin file yang telah diperbarui itu ke nama file yang benar:
cd ~/monolith-to-microservices/react-app/src/pages/Home
mv index.js.new index.js
- Cetak konten file untuk memverifikasi perubahan:
cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js
Kode yang dihasilkan seharusnya menyerupai output berikut.
Output:
/*
Copyright 2019 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from "react";
import { Box, Paper, Typography } from "@mui/material";
export default function Home() {
return (
<Box sx={{ flexGrow: 1 }}>
<Paper
elevation={3}
sx={{
width: "800px",
margin: "0 auto",
padding: (theme) => theme.spacing(3, 2),
}}
>
<Typography variant="h5">Welcome to the Fancy Store!</Typography>
<br />
<Typography variant="body1">
Take a look at our wide variety of products.
</Typography>
</Paper>
</Box>
);
}
Anda telah mengupdate komponen React, tetapi Anda perlu membangun aplikasi React untuk menghasilkan file statisnya.
- Jalankan perintah berikut untuk membangun aplikasi React dan menyalinnya ke direktori publik monolith:
cd ~/monolith-to-microservices/react-app
npm install && npm run-script build
- Kemudian jalankan perintah berikut untuk mengirim kembali kode ini ke bucket:
cd ~
rm -rf monolith-to-microservices/*/node_modules
gcloud storage cp -r monolith-to-microservices gs://fancy-store-{{{project_0.project_id | Project ID}}}/
Memaksakan perubahan dengan penggantian bertahap
- Sekarang, jalankan perintah berikut untuk memaksa semua instance diganti agar dapat mengambil update:
gcloud compute instance-groups managed rolling-action replace fancy-fe-mig \
--zone={{{project_0.default_zone | zone}}} \
--max-unavailable=100%
Catatan: Dalam contoh penggantian bertahap ini, Anda secara spesifik menyatakan bahwa semua mesin dapat segera diganti melalui parameter --max-unavailable. Tanpa parameter ini, perintah di atas akan menyisakan satu instance yang tetap berjalan saat mengganti instance lainnya. Untuk tujuan pengujian ini, Anda menyatakan bahwa semua instance dapat segera diganti guna mempercepat prosesnya. Dalam produksi, Anda bisa menyediakan buffer untuk memungkinkan situs terus menyediakan layanan saat di-update.
Klik Periksa progres saya untuk memverifikasi tujuan.
Mengupdate situs
- Tunggu 3 menit setelah Anda memberikan perintah
rolling-action replace agar ada cukup waktu untuk pemrosesan instance, lalu periksa status grup instance terkelola. Jalankan perintah berikut untuk mengonfirmasi bahwa layanan tercantum sebagai HEALTHY:
watch -n 2 gcloud compute backend-services get-health fancy-fe-frontend --global
- Tunggu beberapa saat hingga kedua layanan tersebut muncul dan statusnya menjadi HEALTHY.
Contoh output:
backend: https://www.googleapis.com/compute/v1/projects/my-gce-codelab/zones/us-central1-a/instanceGroups/fancy-fe-mig
status:
healthStatus:
- healthState: HEALTHY
instance: https://www.googleapis.com/compute/v1/projects/my-gce-codelab/zones/us-central1-a/instances/fancy-fe-x151
ipAddress: 10.128.0.7
port: 8080
- healthState: HEALTHY
instance: https://www.googleapis.com/compute/v1/projects/my-gce-codelab/zones/us-central1-a/instances/fancy-fe-cgrt
ipAddress: 10.128.0.11
port: 8080
kind: compute#backendServiceGroupHealth
-
Setelah ada item yang tercantum dengan status HEALTHY, keluar dari perintah watch dengan menekan CTRL+C.
-
Jelajahi situs melalui http://[LB_IP]. [LB_IP] adalah IP_ADDRESS yang ditentukan untuk Load Balancer dan dapat ditemukan dengan perintah berikut:
gcloud compute forwarding-rules list --global
Perubahan baru pada situs seharusnya sudah terlihat sekarang.
Menyimulasikan kegagalan
Untuk mengonfirmasi bahwa health check berfungsi, Anda memutuskan untuk login ke salah satu instance dan menghentikan layanan.
- Untuk menemukan nama instance, jalankan perintah berikut:
gcloud compute instance-groups list-instances fancy-fe-mig --zone={{{project_0.default_zone | zone}}}
- Salin nama instance, lalu jalankan perintah berikut untuk membuat koneksi SSH ke instance, dengan INSTANCE_NAME adalah salah satu instance dari daftar:
gcloud compute ssh [INSTANCE_NAME] --zone={{{project_0.default_zone | zone}}}
-
Ketik "y" untuk mengonfirmasi, dan tekan Enter dua kali untuk tidak menggunakan sandi.
-
Di dalam instance, jalankan perintah berikut untuk menghentikan aplikasi menggunakan supervisorctl:
sudo supervisorctl stop nodeapp; sudo killall node
- Jalankan perintah berikut untuk keluar dari instance:
exit
- Pantau operasi perbaikan:
watch -n 2 gcloud compute operations list \
--filter='operationType~compute.instances.repair.*'
Proses ini membutuhkan waktu beberapa menit.
Cari contoh output berikut.
Output:
NAME: repair-1755080598062-63c3c8b99843b-eed8dabc-f1833ea3
TYPE: compute.instances.repair.recreateInstance
TARGET: us-east4-c/instances/fancy-fe-tn40
HTTP_STATUS: 200
STATUS: DONE
TIMESTAMP: 2025-08-13T03:23:18.062-07:00
Grup instance terkelola telah membuat ulang instance tersebut untuk memperbaikinya.
- Anda juga dapat membuka Navigation menu > Compute Engine > VM instances untuk memantau melalui konsol.
Selamat!
Anda telah berhasil men-deploy, menskalakan, dan mengupdate situs Anda di Compute Engine. Anda kini sudah memiliki pengalaman menggunakan Compute Engine, Grup Instance Terkelola, Load Balancer, dan Health Check.
Langkah berikutnya/Pelajari lebih lanjut
Sertifikasi dan pelatihan Google Cloud
...membantu Anda mengoptimalkan teknologi Google Cloud. Kelas kami mencakup keterampilan teknis dan praktik terbaik untuk membantu Anda memahami dengan cepat dan melanjutkan proses pembelajaran. Kami menawarkan pelatihan tingkat dasar hingga lanjutan dengan opsi on demand, live, dan virtual untuk menyesuaikan dengan jadwal Anda yang sibuk. Sertifikasi membantu Anda memvalidasi dan membuktikan keterampilan serta keahlian Anda dalam teknologi Google Cloud.
Manual Terakhir Diperbarui pada 19 Juni 2026
Lab Terakhir Diuji pada 19 Juni 2026
Hak cipta 2026 Google LLC. Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lain mungkin adalah merek dagang masing-masing perusahaan yang bersangkutan.