Pengembangan Lokal dengan Cloud Functions untuk Node.js menggunakan Visual Studio Code

1. Ringkasan

Google Cloud Functions adalah platform komputasi serverless berbasis peristiwa. Dengan Cloud Functions, Anda dapat menulis kode tanpa perlu khawatir tentang penyediaan resource atau penskalaan untuk menangani perubahan persyaratan.

Cloud Functions yang ditulis dalam JavaScript dieksekusi di lingkungan Node.js di Google Cloud Platform. Anda dapat menjalankan Cloud Function di runtime Node.js standar untuk mengaktifkan portabilitas dan pengujian lokal.

Panduan

Dalam codelab ini, Anda akan membuat Cloud Function untuk Node.js yang melaporkan apakah suhu tertentu dapat diterima atau terlalu panas. Anda akan membuat, menguji, dan men-debug Cloud Function menggunakan Visual Studio Code di komputer lokal. Terakhir, Anda akan men-deploy fungsi ke Google Cloud Platform.

Yang akan Anda pelajari

  • Functions Framework untuk Node.js.
  • Buat dan uji HTTP Cloud Function secara lokal.
  • Men-debug Fungsi HTTP dari komputer lokal Anda.
  • Men-deploy Fungsi HTTP dari komputer lokal Anda.

2. Penyiapan dan Persyaratan

Prasyarat

Biaya

Meskipun codelab ini hanya memerlukan 1 pemanggilan Cloud Function yang di-deploy, Anda tetap harus melihat informasi harga Cloud Functions API untuk memahami cara kerja penagihan.

Meskipun banyak Google API yang dapat digunakan tanpa biaya, penggunaan Google Cloud Platform (yaitu produk & API-nya) tidak gratis. Anda memerlukan akun penagihan yang aktif untuk menggunakan Cloud Functions. Perlu diingat bahwa produk Google Cloud Platform (GCP) tertentu memiliki paket"Selalu Gratis" yang harus Anda lampaui agar muncul penagihan. Untuk keperluan codelab, setiap pemanggilan Cloud Functions diperhitungkan terhadap paket gratis tersebut. Selama Anda tidak melebihi batas agregat (dalam setiap bulan), Anda tidak akan dikenakan biaya apa pun.

3. Instal Functions Framework untuk Node.js

Functions Framework untuk Node.js adalah framework FaaS (Function as a Service) open source untuk menulis fungsi Node.js portabel yang disediakan oleh tim Google Cloud Functions.

Dengan Functions Framework, Anda dapat menulis fungsi ringan yang berjalan di banyak lingkungan yang berbeda, termasuk:

  • Google Cloud Functions
  • Mesin pengembangan lokal Anda
  • Cloud Run dan Cloud Run di GKE
  • Lingkungan berbasis Knative

Buat aplikasi node.js baru.

npm init

Saat menerima default, pastikan untuk menggunakan index.js sebagai titik entri untuk aplikasi Anda.

Sekarang, instal Functions Framework untuk Node.js.

npm install @google-cloud/functions-framework

Buka package.json Anda. Pastikan Anda melihat framework fungsi yang tercantum sebagai dependensi seperti yang ditunjukkan pada contoh di bawah.

"dependencies": {
   "@google-cloud/functions-framework": "^1.7.1"
 }

Framework Functions kini telah berhasil diinstal. Sekarang Anda siap membuat Cloud Function.

4. Membuat dan menguji Cloud Function HTTP secara lokal

Membuat Cloud Function lokal

Di bagian ini, Anda akan membuat dan menguji Fungsi HTTP yang merespons permintaan HTTP.

Buat file baru bernama index.js di direktori yang sama dengan file package.json Anda.

Tambahkan perintah berikut:

exports.validateTemperature = async (req, res) => {
 try {
   if (req.body.temp < 100) {
     res.status(200).send("Temperature OK");
   } else {
     res.status(200).send("Too hot");
   }
 } catch (error) {
   //return an error
   console.log("got error: ", error);
   res.status(500).send(error);
 }
};

Sekarang Anda siap menguji fungsi.

Menguji fungsi di Visual Studio Code

Mulai saat ini, codelab ini menggunakan terminal terintegrasi dalam Visual Studio Code.

Di Visual Studio Code, buka jendela terminal.

Jalankan perintah berikut:

node node_modules/@google-cloud/functions-framework --target=validateTemperature

Perintah ini memulai server lokal yang siap memanggil fungsi validateTemperature saat server menerima permintaan HTTP.

Anda akan melihat output berikut di jendela terminal:

Serving function...
Function: validateTemperature
URL: http://localhost:8080/

Buat jendela terminal kedua dalam VS Code dengan mengklik ikon plus New Terminal di panel jendela Terminal. Anda akan beralih di antara dua jendela terminal ini: yang pertama untuk menayangkan fungsi dan yang kedua untuk memanggil fungsi menggunakan curl.

bceb65f366d837ae.png

Anda dapat beralih antar-jendela terminal menggunakan menu drop-down. Jika jendela terminal saat ini melayani fungsi, daftar drop-down akan menyebutnya sebagai node. Jika tidak, variabel ini akan dirujuk ke zsh (atau shell yang Anda gunakan).

Di jendela terminal kedua, jalankan perintah berikut untuk mengirim payload suhu 50 ke server lokal yang melayani fungsi validateTemperature.

curl -X POST http://localhost:8080 -H "Content-Type:application/json"  -d '{"temp":"50"}'

Anda akan menerima respons berikut dari fungsi cloud:

Temperature OK

Di jendela terminal kedua, uji fungsi lagi dengan mengirimkan payload suhu "terlalu tinggi" seperti yang ditunjukkan di bawah:

curl -X POST http://localhost:8080 -H "Content-Type:application/json"  -d '{"temp":"120"}'

Anda akan menerima respons berikut dari fungsi cloud:

Too hot

Terakhir, uji fungsi dengan memanggilnya menggunakan payload yang tidak ada.

curl -X POST http://localhost:8080

Anda akan menerima respons berikut dari fungsi cloud:

Too hot

Idealnya, fungsi tidak boleh menampilkan "terlalu panas" jika tidak ada suhu yang diberikan. Anda telah menemukan bug dalam kode.

Pastikan untuk menghentikan fungsi Anda agar tidak berjalan dengan menekan Ctrl + C di jendela terminal pertama yang menyajikan fungsi Anda.

5. Men-debug Fungsi HTTP dari komputer lokal

Buka Palet Perintah di Visual Studio Code. Jika Anda menggunakan Mac, gunakan Cmd + Shift + P. Jika Anda menggunakan Windows, gunakan Ctrl + Shift + P.

Ketik auto attach di Command Palette, lalu pilih item teratas dalam daftar.

601e542b4ec9f6f9.png

Untuk codelab ini, pilih Only With Flag seperti yang ditunjukkan pada gambar di bawah:

b9e6b762d150e62b.png

Sekarang, muat ulang jendela terminal yang Anda gunakan di VS Code untuk menayangkan fungsi dengan mengarahkan kursor ke ikon peringatan yang muncul di sisi paling kanan.

Klik Relaunch Terminal.

37b61e3fb546fc76.png

Dari jendela terminal yang dimuat ulang, jalankan kembali framework fungsi untuk menayangkan fungsi Anda menggunakan perintah berikut:

node --inspect node_modules/.bin/functions-framework --target=validateTemperature

dengan tanda --inspect memberi tahu Node.js untuk memproses permintaan klien proses debug. Untuk mengetahui info selengkapnya, lihat dokumentasi Node tentang proses debug.

Perhatikan bahwa Anda menggunakan node_modules/.bin/functions-framework, bukan node_modules/@google-cloud/functions-framework. Anda perlu menggunakan dapat dieksekusi yang ditautkan secara simbolis secara otomatis di /node_modules/.bin untuk menggunakan mode pemeriksaan.

Kali ini Anda akan melihat status bar berwarna oranye di VS Code yang menunjukkan bahwa debugger telah terpasang.

Tetapkan titik henti sementara di baris 3 dengan mengklik di dalam margin di sebelah kiri nomor baris.

2fbb4d5916e1dbfa.png

Ikon titik henti sementara akan menyala merah cerah, yang menunjukkan bahwa baris kode ini dapat diakses oleh debugger.

846e6c5993cc87f9.png

Di jendela terminal kedua, tekan titik henti sementara dengan menjalankan perintah curl berikut.

curl -X POST http://localhost:8080 

Anda akan melihat sorotan kuning muncul di baris 3. Penyorotan ini menunjukkan bahwa baris ini adalah pernyataan saat ini yang sedang dievaluasi oleh debugger.

206c7ed1eb189e90.png

Arahkan kursor ke variabel temp untuk memverifikasi bahwa isinya adalah undefined, karena permintaan tidak memberikan payload suhu.

97979025f4bf2842.png

Klik ikon step-over untuk menjalankan pernyataan berikutnya.

Anda akan melihat pernyataan saat ini melompat ke bagian else dari pernyataan if.

cf0e8ce7e0388f98.png

Untuk demo ini, Anda dapat mengasumsikan bahwa spesifikasi mengharuskan semua permintaan mengirimkan pembacaan suhu. Jika pembacaan suhu tidak diberikan, fungsi harus memunculkan pengecualian.

Klik tombol Putuskan sambungan untuk memutuskan sambungan debugger.

1070d059775ad769.png

Di jendela terminal pertama, hentikan penayangan fungsi Anda dengan menekan Ctrl + C.

Perbarui fungsi Anda untuk menambahkan pernyataan if guna menampilkan pengecualian jika suhu tidak ditentukan seperti yang ditunjukkan di bawah ini:

exports.validateTemperature = async (req, res) => {

 try {

   // add this if statement below line #2
   if (!req.body.temp) {
     throw "Temperature is undefined";
   }

 ...

Di jendela terminal pertama, mulai jalankan cloud function Anda lagi dengan menjalankan perintah berikut tanpa tanda –inspect untuk menghindari lampiran debugger.

node node_modules/@google-cloud/functions-framework --target=validateTemperature

Pastikan pengecualian dilemparkan dengan menjalankan perintah berikut di jendela terminal kedua:

curl -X POST http://localhost:8080 

Anda akan melihat output berikut yang ditampilkan dari permintaan Anda:

Temperature is undefined

Di jendela terminal pertama, Anda juga akan melihat error yang dicatat oleh fungsi Anda.

Serving function...
Function: validateTemperature
URL: http://localhost:8080/
got error:  Temperature is undefined

Sekarang Anda dapat menghentikan fungsi dengan menekan Ctrl + C di jendela terminal pertama.

6. Men-deploy Fungsi HTTP dari komputer lokal ke Google Cloud

Setelah membuat, menguji, dan men-debug Cloud Function di komputer lokal, Anda siap men-deploy-nya ke Google Cloud.

Pastikan Anda menggunakan project yang Anda buat di Langkah 2 secara lokal dengan menjalankan perintah berikut:

gcloud config get-value project

Jika project yang Anda tentukan di Langkah 2 bukan konfigurasi aktif, jalankan perintah berikut:

gcloud config set project <project-name-created-step-2>

Di jendela terminal mana pun, jalankan perintah berikut:

gcloud functions deploy validateTemperature --trigger-http --runtime nodejs12 --allow-unauthenticated

dengan parameter dijelaskan sebagai berikut:

  • deploy validateTemperature - subperintah gcloud untuk men-deploy Cloud Function dengan nama validateTemperature dengan titik entri bernama validateTemperature
  • --trigger-http - jenis peristiwa pemicu
  • --runtime nodejs12 - runtime target untuk fungsi ini
  • --allow-unauthenticated - mengizinkan akses publik untuk memanggil fungsi

Anda akan diminta untuk mengaktifkan Cloud Functions API. Ketik y untuk mengaktifkan API.

API [cloudfunctions.googleapis.com] not enabled on project 
[1057316433766]. Would you like to enable and retry (this will take a 
few minutes)? (y/N)? y 

Setelah deployment selesai, Anda akan melihat hal berikut di output:

Deploying function (may take a while - up to 2 minutes)...done. 
availableMemoryMb: 256
buildId: <your-build-id>
entryPoint: validateTemperature
httpsTrigger:
  url: https://<your-region-and-project>.cloudfunctions.net/validateTemperature
...

Di jendela terminal, gunakan curl untuk memanggil endpoint publik ini.

curl -X POST https://<your-region-and-project>.cloudfunctions.net/validateTemperature -H "Content-Type:application/json"  -d '{"temp":"50"}'

dan mengonfirmasi bahwa fungsi cloud Anda telah berhasil di-deploy dengan memverifikasi respons yang sesuai.

Temperature OK

7. Pembersihan

Untuk menghindari biaya yang tidak disengaja, misalnya, Cloud Function ini tidak sengaja dipanggil lebih banyak kali daripada alokasi pemanggilan Cloud Function bulanan Anda di tingkat gratis, Anda dapat menghapus Cloud Function atau menghapus project yang Anda buat di Langkah 2.

Untuk menghapus Cloud Function, buka Konsol Cloud Cloud Function di https://console.cloud.google.com/functions/ Pastikan project yang Anda buat di langkah 2 adalah project yang saat ini dipilih.

Pilih fungsi validateTemperature yang Anda deploy di Langkah 6. Lalu, tekan Hapus.

4dada486485a935a.png

Jika Anda memilih untuk menghapus seluruh project, Anda dapat membuka https://console.cloud.google.com/cloud-resource-manager, memilih project yang Anda buat di Langkah 2, lalu memilih Hapus. Jika menghapus project, Anda harus mengubah project di Cloud SDK. Anda dapat melihat daftar semua project yang tersedia dengan menjalankan gcloud projects list.

8. Selamat!

Selamat, Anda telah menyelesaikan codelab. Anda dapat mempelajari lebih lanjut cara Cloud Functions mendukung runtime Node.js dan cara kerja proses debug lokal dengan Cloud Functions.

Yang telah kita bahas

  • Functions Framework untuk Node.js.
  • Buat dan uji HTTP Cloud Function secara lokal.
  • Men-debug Fungsi HTTP dari komputer lokal Anda.
  • Men-deploy Fungsi HTTP dari komputer lokal Anda.