arrow_back

Membangun Sistem yang Asinkron dan Tangguh dengan Cloud Run dan Pub/Sub

Login Gabung
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Membangun Sistem yang Asinkron dan Tangguh dengan Cloud Run dan Pub/Sub

Lab 1 jam universal_currency_alt 5 Kredit show_chart Menengah
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP650

Lab Mandiri Google Cloud

Logo Pet Theory

Ringkasan

Untuk lab dalam kursus Serverless Cloud Run Development, Anda akan membaca skenario bisnis fiktif dan membantu para karakter menerapkan rencana migrasi serverless mereka.

Dua belas tahun yang lalu, Lily memulai jaringan klinik hewan Pet Theory. Selama bertahun-tahun, jumlah klinik telah bertambah, demikian pula kebutuhan akan otomatisasi. Cara Pet Theory menangani hasil tes medis saat mereka kembali dari laboratorium terlalu lambat dan rawan kesalahan, jadi Lily ingin memperbaikinya.

Saat ini, Patrick, admin IT Pet Theory, menangani hasil tes secara manual. Tiap kali hasil tes keluar, ia menulis dan mengirim email ke klien yang hewan peliharaannya diuji, lalu ia menulis pesan teks di ponselnya dan mengirimkan hasilnya sebagai teks ke klien.

Patrick bekerja dengan Ruby, seorang konsultan software, untuk merancang sistem yang lebih skalabel. Mereka ingin membangun solusi yang tidak memerlukan banyak pemeliharaan berkelanjutan. Patrick dan Ruby telah memutuskan untuk menggunakan teknologi serverless.

Tujuan

Di lab ini, Anda akan mempelajari cara:

  • Membuat topik dan langganan Pub/Sub
  • Membuat layanan Cloud Run yang menerima permintaan HTTP dan memublikasikan pesan ke Cloud Pub/Sub
  • Membuat layanan Cloud Run yang menerima pesan dari Cloud Pub/Sub
  • Membuat langganan Pub/Sub yang memicu layanan Cloud Run
  • Menguji ketahanan suatu sistem

Prasyarat

Di lab ini, Anda dianggap telah memahami Konsol Cloud dan lingkungan shell. Lab ini adalah bagian dari sebuah seri. Pengalaman dari lab sebelumnya akan bermanfaat, tetapi tidak wajib:

Penyiapan dan persyaratan

Catatan: Untuk lab ini, login ke Konsol Google Cloud sebagai Username 1. Jika tidak, Anda akan mengalami error selama menjalani lab.

Sebelum mengklik tombol Mulai Lab

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 praktik ini dapat Anda gunakan untuk melakukan sendiri 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.

Untuk menyelesaikan lab ini, Anda memerlukan:

  • Akses ke browser internet standar (disarankan browser Chrome).
Catatan: Gunakan jendela Samaran atau browser pribadi untuk menjalankan lab ini. Hal ini akan mencegah konflik antara akun pribadi Anda dan akun Siswa yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.
  • Waktu untuk menyelesaikan lab. Ingat, setelah dimulai, lab tidak dapat dijeda.
Catatan: Jika Anda sudah memiliki project atau akun pribadi Google Cloud, jangan menggunakannya untuk lab ini agar terhindar dari tagihan ekstra pada akun Anda.

Cara memulai lab dan login ke Google Cloud Console

  1. Klik tombol Start Lab. Jika Anda perlu membayar lab, jendela pop-up akan terbuka untuk memilih metode pembayaran. Di sebelah kiri adalah panel Lab Details dengan berikut ini:

    • Tombol Open Google Console
    • Waktu tersisa
    • Kredensial sementara yang harus Anda gunakan untuk lab ini
    • Informasi lain, jika diperlukan, untuk menyelesaikan lab ini
  2. Klik Open Google Console. Lab akan menjalankan resource, lalu membuka tab lain yang menampilkan halaman Login.

    Tips: Atur tab di jendela terpisah secara berdampingan.

    Catatan: Jika Anda melihat dialog Choose an account, klik Use Another Account.
  3. Jika perlu, salin Username dari panel Lab Details dan tempel ke dialog Sign in. Klik Next.

  4. Salin Password dari panel Lab Details dan tempel ke dialog Welcome. Klik Next.

    Penting: Anda harus menggunakan kredensial dari panel sebelah kiri. Jangan menggunakan kredensial Google Cloud Skills Boost. Catatan: Menggunakan akun Google Cloud sendiri untuk lab ini dapat dikenai biaya tambahan.
  5. Klik halaman berikutnya:

    • Setujui persyaratan dan ketentuan.
    • Jangan tambahkan opsi pemulihan atau autentikasi 2 langkah (karena ini akun sementara).
    • Jangan daftar uji coba gratis.

Setelah beberapa saat, Cloud Console akan terbuka di tab ini.

Catatan: Anda dapat melihat menu dengan daftar Produk dan Layanan Google Cloud dengan mengklik Menu navigasi di kiri atas. Ikon menu navigasi

Mengaktifkan Cloud Shell

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.

  1. Klik Activate Cloud Shell Ikon Activate Cloud Shell di bagian atas konsol Google Cloud.

Setelah terhubung, Anda sudah diautentikasi, dan project ditetapkan ke PROJECT_ID Anda. Output berisi baris yang mendeklarasikan PROJECT_ID untuk sesi ini:

Project Cloud Platform Anda dalam sesi ini disetel ke YOUR_PROJECT_ID

gcloud adalah alat command line untuk Google Cloud. Alat ini sudah terinstal di Cloud Shell dan mendukung pelengkapan command line.

  1. (Opsional) Anda dapat menampilkan daftar nama akun yang aktif dengan perintah ini:
gcloud auth list
  1. Klik Authorize.

  2. Output Anda sekarang akan terlihat seperti ini:

Output:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net Untuk menyetel akun aktif, jalankan: $ gcloud config set account `ACCOUNT`
  1. (Opsional) Anda dapat menampilkan daftar project ID dengan perintah ini:
gcloud config list project

Output:

[core] project = <project_ID>

Contoh output:

[core] project = qwiklabs-gcp-44776a13dea667a6 Catatan: Untuk mendapatkan dokumentasi gcloud yang lengkap di Google Cloud, baca panduan ringkasan gcloud CLI.

Menetapkan region dan zona

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 Konsol Cloud guna menetapkan region dan zona default untuk lab Anda:

gcloud config set compute/zone "{{{project_0.default_zone|ZONE}}}" export ZONE=$(gcloud config get compute/zone) gcloud config set compute/region "{{{project_0.default_region|REGION}}}" export REGION=$(gcloud config get compute/region)

Skenario

Pet Theory ingin mengotomatiskan proses berbagi hasil tes kepada klien. Mereka mengalami kesulitan untuk memenuhi janji temu yang jumlahnya makin meningkat, jadi Lily memutuskan untuk meminta bantuan Ruby...

Lily

Lily, Pendiri Pet Theory

Halo Ruby,

Terima kasih telah memilah portal asuransi.

Saya ingin tahu, apakah ada yang bisa dilakukan terkait hasil tes medis? Kami membutuhkan cara yang lebih efisien dalam mengirimkan hasil kepada para klien.

Lily

Ruby

Ruby, Konsultan Software

Halo Lily,

Tentu. Coba saya lihat dulu apa yang bisa saya lakukan. Saya punya beberapa ide yang mungkin bisa memperbaiki situasinya.

Ruby

Tugas 1. Arsitektur

Pet Theory menggunakan perusahaan eksternal untuk tes medis. Setelah perusahaan lab menyelesaikan tes medis, mereka mengirimkan hasilnya kembali ke Pet Theory.

Perusahaan lab menggunakan HTTP(s) POST ke endpoint web Pet Theory untuk hasil lab medis. Ilustrasi di bawah menguraikan arsitektur umum yang digunakan.

Diagram arsitektur sistem Pet Theory

Setelah melihat proses umum yang diikuti, Ruby yakin bahwa sebuah sistem dapat dirancang agar Pet Theory bisa:

  1. Menerima permintaan POST HTTP dan mengonfirmasi penerimaan ke laboratorium medis.
  2. Mengirimkan hasil tes melalui email kepada klien.
  3. Mengirimkan pesan teks (SMS) dan email kepada klien yang berisi hasil tes.

Desain Ruby mengisolasi tiap aktivitas di atas dan memerlukan:

  • Layanan untuk melakukan permintaan dan respons terhadap hasil medis
  • Layanan untuk mengirimkan hasil tes melalui email kepada klien
  • Layanan untuk mengirimkan pesan teks (SMS) kepada klien
  • Pub/Sub yang akan digunakan untuk melakukan komunikasi antarlayanan
  • Infrastruktur serverless yang akan digunakan untuk arsitektur aplikasi

Melalui penggunaan fungsi sekali pakai, Ruby berupaya mengembangkan kode yang lebih mudah untuk ditulis dan mengandung lebih sedikit bug.

Ruby

Ruby, Konsultan Software

Halo Patrick,

Lily meminta saya membuat prototipe untuk membantu pemrosesan rekam medis.

Untuk memulai, tolong siapkan Topik Pub/Sub bernama new-lab-report.

Ruby

Patrick

Patrick, Admin IT

Halo Ruby,

Sepertinya ini project yang bagus. Saya bisa menyelesaikannya pagi ini. Kedua aktivitas tersebut dapat disiapkan dengan sangat cepat di Google Cloud.

Patrick

Membuat topik Pub/Sub

Bantu Patrick membuat topik Pub/Sub bernama new-lab-report.

Cloud Pub/Sub ditandai dalam diagram arsitektur

Saat layanan menayangkan pesan Pub/Sub, pesan tersebut harus diberi tag dengan sebuah topik. Laporan Lab digunakan melalui layanan yang akan dibuat dan memublikasikan pesan untuk tiap laporan yang ditemukan.

Pertama, Anda perlu membuat topik yang dapat digunakan untuk tugas ini.

  1. Jalankan perintah berikut untuk membuat topik Pub/Sub:
gcloud pubsub topics create new-lab-report

Tiap layanan yang berlangganan topik "new-lab-report" akan dapat memakai pesan yang dipublikasikan oleh Layanan Laporan Lab. Pada diagram di atas, Anda dapat melihat dua pemakai tersebut, yakni Layanan Email dan Layanan SMS.

  1. Kemudian aktifkan Cloud Run, yang akan menjalankan kode Anda di cloud:
gcloud services enable run.googleapis.com

Klik Check my progress untuk memverifikasi tujuan.

Membuat topik Pub/Sub

Jangan lupa untuk memberi tahu Ruby bahwa topik Pub/Sub sudah siap digunakan.

Patrick

Patrick, Admin IT

Halo Ruby,

Semua sudah selesai.

Jika ada waktu, saya ingin melihat bagaimana prototipe ini dibuat. Bisakah kita mengerjakannya bersama-sama?

Patrick

Ruby

Ruby, Konsultan Software

Halo Patrick,

Bagus sekali, terima kasih sudah menyelesaikannya begitu cepat. Saya akan mengatur waktunya supaya kita bisa mulai membangun.

Ruby

Tugas 2. Membangun Layanan Laporan Lab

Bantu Ruby menyiapkan Layanan Laporan Lab yang baru.

Layanan Laporan Lab ditandai dalam diagram arsitektur

Layanan ini akan melayani tujuan pembuatan prototipe, sehingga hanya akan melakukan dua hal:

  1. Menerima POST HTTPS laporan lab yang berisi data laporan.
  2. Memublikasikan pesan di Pub/Sub.

Menambahkan kode untuk Layanan Laporan Lab

  1. Kembali ke Cloud Shell, buat clone repositori yang diperlukan untuk lab ini:
git clone https://github.com/rosera/pet-theory.git
  1. Pindah ke direktori lab-service:
cd pet-theory/lab05/lab-service
  1. Instal paket berikut yang diperlukan untuk menerima permintaan HTTPS yang masuk dan publikasikan ke Pub/Sub:
npm install express npm install body-parser npm install @google-cloud/pubsub

Perintah ini akan mengupdate file package.json untuk menunjukkan dependensi yang diperlukan untuk layanan ini.

Anda sekarang akan mengedit file package.json agar Cloud Run mengetahui cara memulai kode Anda.

  1. Buka file package.json.

  2. Di bagian "scripts" pada file package.json, tambahkan baris kode "start": "node index.js", di baris 7 (seperti gambar di bawah), lalu simpan file-nya:

"scripts": { "start": "node index.js", "test": "echo \"Error: no test specified\" && exit 1" }, Catatan: Pastikan untuk menambahkan kode persis seperti yang diberikan, termasuk koma di bagian akhir:

"start": "node index.js",

Jika tidak, Anda akan mengalami error saat deployment.
  1. Buat file baru bernama index.js, lalu tambahkan kode ini pada file tersebut:
const {PubSub} = require('@google-cloud/pubsub'); const pubsub = new PubSub(); const express = require('express'); const app = express(); const bodyParser = require('body-parser'); app.use(bodyParser.json()); const port = process.env.PORT || 8080; app.listen(port, () => { console.log('Listening on port', port); }); app.post('/', async (req, res) => { try { const labReport = req.body; await publishPubSubMessage(labReport); res.status(204).send(); } catch (ex) { console.log(ex); res.status(500).send(ex); } }) async function publishPubSubMessage(labReport) { const buffer = Buffer.from(JSON.stringify(labReport)); await pubsub.topic('new-lab-report').publish(buffer); } Kedua baris ini akan melakukan pekerjaan utama layanan tersebut:

const labReport = req.body;

await publishPubSubMessage(labReport);

Khususnya, baris-baris ini akan:

  • Mengekstrak laporan lab dari permintaan POST.
  • Memublikasikan pesan PubSub yang berisi laporan lab yang baru diposting.
  1. Sekarang, buat file dengan nama Dockerfile dan tambahkan kode berikut ke file tersebut:
FROM node:18 WORKDIR /usr/src/app COPY package.json package*.json ./ RUN npm install --only=production COPY . . CMD [ "npm", "start" ]

File ini menetapkan cara memaketkan layanan Cloud Run ke dalam sebuah container.

Men-deploy lab-report-service

  1. Buat file bernama deploy.sh dan tempelkan perintah berikut ke dalamnya:
gcloud builds submit \ --tag gcr.io/$GOOGLE_CLOUD_PROJECT/lab-report-service gcloud run deploy lab-report-service \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/lab-report-service \ --platform managed \ --region {{{project_0.default_region | "REGION"}}} \ --allow-unauthenticated \ --max-instances=1
  1. Di Cloud Shell, jalankan perintah berikut agar file ini dapat dieksekusi:
chmod u+x deploy.sh
  1. Saatnya men-deploy Layanan Laporan Lab (lab-report-service). Jalankan skrip deployment:
./deploy.sh

Karena masalah waktu, Anda mungkin akan mendapatkan pesan error saat pertama kali menjalankan perintah ini. Jika demikian, jalankan kembali deploy.sh.

Ketika deployment berhasil diselesaikan, Anda akan melihat pesan seperti ini:

Service [lab-report-service] revision [lab-report-service-00001] has been deployed and is serving traffic at https://lab-report-service-[hash].a.run.app

Bagus, Layanan Laporan Lab telah di-deploy dan akan memproses hasil lab medis melalui HTTP. Anda sekarang dapat menguji apakah layanan yang baru ini sudah aktif dan berjalan atau belum.

Klik Check my progress untuk memverifikasi tujuan.

Men-deploy Layanan Laporan Lab: Membangun

Klik Check my progress untuk memverifikasi tujuan.

Men-deploy Layanan Laporan Lab: Membuat Revisi

Menguji Layanan Laporan Lab

Untuk memvalidasi Layanan Laporan Lab, simulasikan tiga POST HTTPS yang dibuat oleh perusahaan lab, masing-masing berisi satu laporan lab. Untuk keperluan pengujian, laporan lab yang dibuat hanya akan berisi sebuah ID.

  1. Pertama, masukkan URL laporan ke dalam variabel lingkungan, agar lebih mudah digunakan.
export LAB_REPORT_SERVICE_URL=$(gcloud run services describe lab-report-service --platform managed --region {{{project_0.default_region | "REGION"}}} --format="value(status.address.url)")
  1. Konfirmasi bahwa LAB_REPORT_SERVICE_URL telah diambil:
echo $LAB_REPORT_SERVICE_URL
  1. Buat file baru bernama post-reports.sh, lalu tambahkan kode berikut ke dalamnya:
curl -X POST \ -H "Content-Type: application/json" \ -d "{\"id\": 12}" \ $LAB_REPORT_SERVICE_URL & curl -X POST \ -H "Content-Type: application/json" \ -d "{\"id\": 34}" \ $LAB_REPORT_SERVICE_URL & curl -X POST \ -H "Content-Type: application/json" \ -d "{\"id\": 56}" \ $LAB_REPORT_SERVICE_URL &

Skrip di atas akan menggunakan perintah curl untuk memposting tiga ID berbeda ke URL Layanan Lab. Tiap perintah akan dijalankan satu per satu di latar belakang.

  1. Buat agar skrip post-reports.sh dapat dieksekusi:
chmod u+x post-reports.sh
  1. Sekarang uji endpoint Layanan Laporan Lab dengan memposting tiga laporan lab menggunakan skrip yang dijelaskan di atas:
./post-reports.sh

Skrip ini memposting tiga laporan lab ke Layanan Laporan Lab Anda. Periksa log untuk melihat hasilnya.

  1. Di Konsol Cloud, klik Navigation menu (Ikon Navigation menu) > Cloud Run.

  2. Anda sekarang akan melihat lab-report-service yang baru Anda deploy di daftar Services. Klik lab-report-service tersebut.

  3. Halaman berikutnya akan menunjukkan rincian tentang lab-report-service Anda. Klik tab Logs.

Di halaman Logs terdapat hasil dari tiga laporan pengujian yang baru saja Anda posting dengan skrip tersebut. Semoga kode HTTP yang ditampilkan adalah 204, artinya Oke - bukan konten, seperti di bawah ini. Jika Anda tidak melihat entri apa pun, coba scroll ke atas dan ke bawah menggunakan scrollbar di sebelah kanan. Tindakan ini akan memuat ulang log.

Tugas selanjutnya adalah menulis layanan SMS dan Email. Layanan ini akan dipicu ketika Layanan Laporan Lab memublikasikan pesan Pub/Sub tentang topik "new-lab-report".

Tugas 3. Layanan Email

Bantu Ruby menyiapkan Layanan Email yang baru.

Layanan Email ditandai dalam diagram arsitektur

Menambahkan kode untuk Layanan Email

  1. Pindah ke direktori Layanan Email:
cd ~/pet-theory/lab05/email-service
  1. Instal paket-paket ini sehingga kode dapat menangani permintaan HTTPS yang masuk:
npm install express npm install body-parser

Perintah di atas akan mengupdate file package.json, yang menjelaskan aplikasi dan dependensinya. Cloud Run perlu mengetahui cara menjalankan kode, jadi tambahkan petunjuk start agar ia tahu apa yang harus dilakukan.

  1. Buka file package.json.

  2. Di bagian "scripts", tambahkan baris "start": "node index.js", seperti yang ditunjukkan di bawah ini, lalu simpan file-nya:

"scripts": { "start": "node index.js", "test": "echo \"Error: no test specified\" && exit 1" }, Catatan: Pastikan untuk menambahkan kode persis seperti yang diberikan, termasuk koma di bagian akhir:

"start": "node index.js",

Jika tidak, Anda akan mengalami error saat deployment.
  1. Buat file baru bernama index.js dan tambahkan yang berikut ke dalamnya:
const express = require('express'); const app = express(); const bodyParser = require('body-parser'); app.use(bodyParser.json()); const port = process.env.PORT || 8080; app.listen(port, () => { console.log('Listening on port', port); }); app.post('/', async (req, res) => { const labReport = decodeBase64Json(req.body.message.data); try { console.log(`Email Service: Report ${labReport.id} trying...`); sendEmail(); console.log(`Email Service: Report ${labReport.id} success :-)`); res.status(204).send(); } catch (ex) { console.log(`Email Service: Report ${labReport.id} failure: ${ex}`); res.status(500).send(); } }) function decodeBase64Json(data) { return JSON.parse(Buffer.from(data, 'base64').toString()); } function sendEmail() { console.log('Sending email'); }

Kode ini akan dijalankan ketika Pub/Sub memposting pesan ke layanan. Inilah yang dilakukannya:

  • Layanan akan mendekode pesan Pub/Sub, lalu mencoba memanggil fungsi sendEmail().
  • Jika berhasil dan tidak ada pengecualian yang diberikan, layanan akan menampilkan kode status 204 sehingga Pub/Sub akan tahu bahwa pesan telah diproses.
  • Jika ada pengecualian, layanan akan menampilkan kode status 500 sehingga Pub/Sub akan tahu bahwa pesan tidak diproses dan harus diposting ulang ke layanan nanti.

Setelah komunikasi antarlayanan berfungsi, Ruby akan menambahkan kode ke fungsi sendEmail() untuk benar-benar mengirim email.

  1. Sekarang, buat file dengan nama Dockerfile dan tambahkan kode berikut ke file tersebut:
FROM node:18 WORKDIR /usr/src/app COPY package.json package*.json ./ RUN npm install --only=production COPY . . CMD [ "npm", "start" ]

File ini menetapkan cara memaketkan layanan Cloud Run ke dalam sebuah container.

Men-deploy Layanan Email

  1. Buat file baru bernama deploy.sh, lalu tambahkan yang berikut ke dalamnya:
gcloud builds submit \ --tag gcr.io/$GOOGLE_CLOUD_PROJECT/email-service gcloud run deploy email-service \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/email-service \ --platform managed \ --region {{{project_0.default_region | "REGION"}}} \ --no-allow-unauthenticated \ --max-instances=1
  1. Buat agar deploy.sh dapat dieksekusi:
chmod u+x deploy.sh
  1. Deploy Layanan Email:
./deploy.sh

Ketika deployment selesai, Anda akan melihat pesan seperti ini:

Service [email-service] revision [email-service-00001] has been deployed and is serving traffic at https://email-service-[hash].a.run.app

Layanan telah berhasil di-deploy. Anda sekarang perlu memastikan Layanan Email dipicu ketika pesan Pub/Sub tersedia.

Klik Check my progress untuk memverifikasi tujuan.

Men-deploy Layanan Email: Membangun

Klik Check my progress untuk memverifikasi tujuan.

Men-deploy Layanan Email: Membuat Revisi

Mengonfigurasi Pub/Sub untuk memicu Layanan Email

Tiap kali pesan Pub/Sub baru dipublikasikan menggunakan topik "new-lab-report", pesan tersebut akan memicu Layanan Email. Untuk menyelesaikan tugas ini, atur konfigurasi sebuah akun layanan agar otomatis menangani permintaan terkait untuk layanan ini.

Diagram arsitektur menyoroti alur dari Cloud Pub/Sub ke Layanan Email

  1. Buat akun layanan baru yang akan digunakan untuk memicu layanan yang merespons pesan Pub/Sub:
gcloud iam service-accounts create pubsub-cloud-run-invoker --display-name "PubSub Cloud Run Invoker"

Klik Check my progress untuk memverifikasi tujuan.

Membuat akun layanan
  1. Berikan izin kepada akun layanan baru untuk memanggil Layanan Email:
gcloud run services add-iam-policy-binding email-service --member=serviceAccount:pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com --role=roles/run.invoker --region {{{project_0.default_region | "REGION"}}} --platform managed

Selanjutnya, perintahkan Pub/Sub untuk memanggil Layanan SMS ketika ada pesan "new-lab-report" yang dipublikasikan.

  1. Masukkan nomor project dalam variabel lingkungan untuk memudahkan akses:
PROJECT_NUMBER=$(gcloud projects list --filter="qwiklabs-gcp" --format='value(PROJECT_NUMBER)')

Selanjutnya, aktifkan project untuk membuat token autentikasi Pub/Sub.

  1. Jalankan kode di bawah ini:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT --member=serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com --role=roles/iam.serviceAccountTokenCreator
  1. Masukkan URL Layanan Email di variabel lingkungan lain:
EMAIL_SERVICE_URL=$(gcloud run services describe email-service --platform managed --region {{{project_0.default_region | "REGION"}}} --format="value(status.address.url)")
  1. Konfirmasi bahwa EMAIL_SERVICE_URL telah diambil:
echo $EMAIL_SERVICE_URL
  1. Buat langganan Pub/Sub untuk Layanan Email.
gcloud pubsub subscriptions create email-service-sub --topic new-lab-report --push-endpoint=$EMAIL_SERVICE_URL --push-auth-service-account=pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com

Bagus! Layanan ini sekarang siap untuk merespons pesan Cloud Pub/Sub. Sebagai langkah selanjutnya, validasi kode untuk mengonfirmasi bahwa kode tersebut memenuhi persyaratan.

Klik Check my progress untuk memverifikasi tujuan.

Membuat langganan Pub/Sub

Menguji Layanan Laporan Lab dan Layanan Email secara bersamaan

  1. Dengan menggunakan skrip yang dibuat sebelumnya, posting lagi ke laporan lab:
~/pet-theory/lab05/lab-service/post-reports.sh
  1. Kemudian buka log (Navigation menu > Cloud Run). Anda akan melihat dua layanan Cloud Run, yakni email-service dan lab-report-service, di akun Anda.

  2. Klik email-service, lalu klik Logs.
    Anda akan melihat hasil layanan ini dipicu oleh Pub/Sub. Jika Anda tidak melihat pesan yang diharapkan, Anda mungkin perlu men-scroll ke atas dan ke bawah dengan scrollbar agar log dimuat ulang.

Bagus sekali. Layanan Email sekarang dapat menulis informasi ke log tiap kali pesan diproses dari antrean topik Cloud Pub/Sub. Tugas terakhir adalah menulis Layanan SMS.

Tugas 4. Layanan SMS

Bantu Ruby menyiapkan Layanan SMS baru.

Layanan SMS ditandai dalam diagram arsitektur

Menambahkan kode untuk Layanan SMS

  1. Buat direktori untuk Layanan SMS:
cd ~/pet-theory/lab05/sms-service
  1. Instal paket yang diperlukan untuk menerima permintaan HTTPS yang masuk:
npm install express npm install body-parser
  1. Buka file package.json.

  2. Di bagian "scripts", tambahkan baris "start": "node index.js", seperti yang ditunjukkan di bawah ini, lalu simpan file-nya:

... "scripts": { "start": "node index.js", "test": "echo \"Error: no test specified\" && exit 1" }, ... Catatan: Pastikan untuk menambahkan kode persis seperti yang diberikan, termasuk koma di bagian akhir:

"start": "node index.js",

Jika tidak, Anda akan mengalami error saat deployment.
  1. Buat file baru bernama index.js dan tambahkan yang berikut ke dalamnya:
const express = require('express'); const app = express(); const bodyParser = require('body-parser'); app.use(bodyParser.json()); const port = process.env.PORT || 8080; app.listen(port, () => { console.log('Listening on port', port); }); app.post('/', async (req, res) => { const labReport = decodeBase64Json(req.body.message.data); try { console.log(`SMS Service: Report ${labReport.id} trying...`); sendSms(); console.log(`SMS Service: Report ${labReport.id} success :-)`); res.status(204).send(); } catch (ex) { console.log(`SMS Service: Report ${labReport.id} failure: ${ex}`); res.status(500).send(); } }) function decodeBase64Json(data) { return JSON.parse(Buffer.from(data, 'base64').toString()); } function sendSms() { console.log('Sending SMS'); }
  1. Sekarang, buat file dengan nama Dockerfile dan tambahkan kode berikut ke file tersebut:
FROM node:18 WORKDIR /usr/src/app COPY package.json package*.json ./ RUN npm install --only=production COPY . . CMD [ "npm", "start" ]

File ini menetapkan cara memaketkan layanan Cloud Run ke dalam sebuah container. Sekarang kode telah dibuat, langkah selanjutnya adalah men-deploy layanan.

Men-deploy Layanan SMS

  1. Buat file bernama deploy.sh, lalu tambahkan kode ini ke dalamnya:
gcloud builds submit \ --tag gcr.io/$GOOGLE_CLOUD_PROJECT/sms-service gcloud run deploy sms-service \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/sms-service \ --platform managed \ --region {{{project_0.default_region | "REGION"}}} \ --no-allow-unauthenticated \ --max-instances=1
  1. Buat agar deploy.sh dapat dieksekusi:
chmod u+x deploy.sh
  1. Deploy Layanan SMS:
./deploy.sh

Saat deployment selesai, pesan seperti ini akan ditampilkan:

Service [sms-service] revision [sms-service-00001] has been deployed and is serving traffic at https://sms-service-[hash].a.run.app

Layanan SMS berhasil di-deploy, tetapi tidak tertaut ke layanan Cloud Pub/Sub. Perbaiki hal ini di bagian selanjutnya.

Klik Check my progress untuk memverifikasi tujuan.

Men-deploy Layanan SMS

Mengonfigurasi Cloud Pub/Sub untuk memicu Layanan SMS

Seperti halnya Layanan Email, link antara Cloud Pub/Sub dan layanan SMS perlu dikonfigurasi agar pesan dapat diproses.

Diagram arsitektur memperjelas alur dari Cloud Pub/Sub ke Layanan SMS

  1. Tetapkan izin untuk mengizinkan Pub/Sub memicu Layanan SMS:
gcloud run services add-iam-policy-binding sms-service --member=serviceAccount:pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com --role=roles/run.invoker --region {{{project_0.default_region | "REGION"}}} --platform managed

Selanjutnya, perintahkan Pub/Sub untuk memanggil Layanan SMS ketika ada pesan "new-lab-report" yang dipublikasikan.

  1. Langkah pertama adalah memasukkan alamat URL Layanan SMS ke dalam variabel lingkungan:
SMS_SERVICE_URL=$(gcloud run services describe sms-service --platform managed --region {{{project_0.default_region | "REGION"}}} --format="value(status.address.url)")
  1. Konfirmasi bahwa SMS_SERVICE_URL telah diambil:

    echo $SMS_SERVICE_URL
  2. Kemudian buat langganan Pub/Sub:

gcloud pubsub subscriptions create sms-service-sub --topic new-lab-report --push-endpoint=$SMS_SERVICE_URL --push-auth-service-account=pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com
  1. Jalankan skrip pengujian lagi untuk mengirim tiga laporan lab ke Layanan Laporan Lab:
~/pet-theory/lab05/lab-service/post-reports.sh
  1. Kemudian buka log (Navigation menu > Cloud Run). Anda akan melihat tiga layanan Cloud Run, yakni email-service, lab-report-service, dan sms-service, di akun Anda.

  2. Klik sms-service, lalu klik Logs. Anda akan melihat hasil layanan ini dipicu oleh Pub/Sub.

Sistem prototipe telah dibuat dan berhasil diuji. Namun, Patrick khawatir bahwa ketahanan, sebagai bagian dari proses validasi awal, belum teruji.

Tugas 5. Menguji ketahanan sistem

Apa yang terjadi jika salah satu layanan menjadi nonaktif? Patrick pernah mengalami hal ini sebelumnya, karena ini adalah situasi yang umum.

Bantu Ruby menyelidiki cara memastikan sistem dapat menangani skenario ini. Ia ingin menguji apa yang terjadi jika suatu layanan gagal dengan menerapkan versi Layanan Email yang buruk.

  1. Kembali ke direktori email-service:
cd ~/pet-theory/lab05/email-service

Tambahkan teks yang tidak valid ke aplikasi Layanan Email sehingga menyebabkan error.

  1. Edit index.js dan tambahkan baris throw ke fungsi sendEmail(), sebagaimana ditunjukkan di bawah ini. Tindakan ini akan menampilkan pengecualian, seolah-olah server email nonaktif:
... function sendEmail() { throw 'Email server is down'; console.log('Sending email'); } ...

Penambahan kode ini akan membuat layanan tidak bekerja ketika dipanggil.

  1. Deploy versi Layanan Email yang buruk ini:
./deploy.sh
  1. Ketika deployment Layanan Email berhasil diselesaikan, posting lagi data ke laporan lab, lalu perhatikan status log email-service dengan cermat:
~/pet-theory/lab05/lab-service/post-reports.sh
  1. Buka log Layanan Email untuk melihat log Layanan Email yang buruk: Navigation menu > Cloud Run.

  2. Saat terlihat tiga layanan Cloud Run di akun Anda, klik email-service.

Layanan Email sedang dipanggil, tetapi akan tetap error. Jika Anda scroll ke belakang sedikit di log, Anda akan menemukan akar masalahnya: “Email server is down”. Anda juga dapat melihat bahwa layanan menampilkan kode status 500, dan Pub/Sub terus mencoba memanggil layanan tersebut.

Jika Anda melihat log dari layanan SMS, Anda akan melihat bahwa layanan tersebut beroperasi dengan baik.

Sekarang perbaiki error pada Layanan Email untuk memulihkan aplikasi.

  1. Buka file index.js dan hapus baris throw yang sebelumnya anda masukkan, kemudian simpan file tersebut.

Fungsi index.js sendEmail sekarang akan terlihat seperti ini:

function sendEmail() { console.log('Sending email'); }
  1. Deploy versi Layanan Email yang sudah diperbaiki:
./deploy.sh
  1. Ketika deployment selesai, klik ikon refresh di sudut kanan atas.

Anda akan melihat bagaimana email untuk laporan 12, 34, dan 56 akhirnya terkirim, Layanan Email menampilkan kode status 204, dan Pub/Sub berhenti memanggil layanan. Tidak ada data yang hilang. Pub/Sub terus mencoba ulang hingga akhirnya berhasil. Ini adalah landasan dari sistem yang kuat.

Hasil

  1. Jika layanan berkomunikasi secara asinkron satu sama lain melalui Pub/Sub dan bukannya memanggil satu sama lain secara langsung, sistem bisa menjadi lebih tangguh.
  2. Pemicu Layanan Laporan Lab tidak bergantung pada layanan lain, berkat penggunaan Pub/Sub. Misalnya, jika pelanggan juga ingin menerima hasil lab melalui layanan pesan lain, layanan ini dapat ditambahkan tanpa perlu mengupdate Layanan Laporan Lab.
  3. Cloud Pub/Sub menangani percobaan ulang, sehingga layanan tidak perlu melakukannya. Layanan hanya diperlukan untuk menampilkan kode status: berhasil atau gagal.
  4. Jika suatu layanan terhenti, sistem mampu secara otomatis "menyembuhkan" dirinya sendiri ketika layanan kembali online berkat percobaan ulang Pub/Sub.

Selamat!

Dengan bantuan Anda, Ruby telah berhasil membangun sistem prototipe yang tangguh. Layanan ini mampu secara otomatis mengirimkan email dan pesan SMS kepada tiap klien. Jika layanan tertentu tidak aktif untuk sementara, sistem akan menerapkan mekanisme percobaan ulang sehingga tidak ada data yang hilang. Ruby menerima banyak pujian yang sepadan...

Lily

Lily, Pendiri Pet Theory

Halo Ruby,

Kami sangat berterima kasih atas semua kerja keras dan kepemimpinan Anda.

Dalam waktu yang sangat singkat, sistem esensial kami telah berubah total.

Kami mengadakan pertemuan kecil pada hari Jumat untuk merayakannya dan kami mengundang Anda menjadi tamu kehormatan.

Lily

MelodyMelody, Direktur Pengelola

Ruby,

Saya menerima banyak pujian atas pekerjaan Anda dari Pet Theory. Anda anggota yang luar biasa bagi tim.

Karena Anda telah menyelesaikan tugas ini, saya ingin membahas peran yang lebih senior dalam project baru bersama Anda.

Melody

Direktur Pengelola

Computer Consulting Inc.

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 1 Feb 2024

Lab Terakhir Diuji pada 20 September 2023

Hak cipta 2024 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.