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

1. Ringkasan

Google Cloud Functions adalah platform komputasi serverless berbasis peristiwa. Cloud Functions memungkinkan Anda menulis kode tanpa perlu khawatir tentang penyediaan resource atau penskalaan untuk menangani persyaratan yang berubah.

Cloud Functions yang ditulis dalam JavaScript dieksekusi di lingkungan Node.js di Google Cloud Platform. Anda dapat menjalankan Cloud Function dalam 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 yang ditentukan dapat diterima atau terlalu panas. Anda akan membuat, menguji, dan men-debug Cloud Function menggunakan Visual Studio Code di mesin lokal Anda. Terakhir, Anda akan men-deploy fungsi ke Google Cloud Platform.

Yang akan Anda pelajari

  • Framework Functions untuk Node.js.
  • Membuat dan menguji Cloud Function HTTP secara lokal.
  • Men-debug Fungsi HTTP dari komputer lokal Anda.
  • Deploy Fungsi HTTP dari komputer lokal Anda.

2. Penyiapan dan Persyaratan

Prasyarat

Biaya

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

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

3. Menginstal Framework Fungsi untuk Node.js

Functions Framework untuk Node.js adalah framework FaaS (Function as a Service) open source untuk menulis fungsi Node.js portabel yang dipersembahkan 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 setelan default, pastikan untuk menggunakan index.js sebagai titik entri untuk aplikasi Anda.

Sekarang, instal Framework Fungsi 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 sekarang berhasil diinstal. Sekarang Anda siap untuk 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 cuplikan 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 untuk menguji fungsi tersebut.

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 antarjendela terminal dengan menggunakan menu drop-down. Jika jendela terminal saat ini menayangkan fungsi, daftar drop-down akan menyebutnya sebagai node. Jika tidak, shell 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 menayangkan 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 ini:

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 tanpa payload.

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 disediakan. Anda telah menemukan bug dalam kode.

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

5. Men-debug Fungsi HTTP dari komputer lokal

Buka Palette 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 Palet Perintah dan 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 menyalurkan fungsi dengan mengarahkan kursor ke ikon peringatan yang muncul di ujung 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 flag --inspect yang memberi tahu Node.js untuk memproses klien proses debug. Untuk 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 harus menggunakan file yang dapat dieksekusi dengan symlink secara otomatis di /node_modules/.bin untuk menggunakan mode inspeksi.

Kali ini Anda akan melihat status bar oranye di VS Code yang menunjukkan bahwa debugger 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 terang, 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. Sorotan ini menunjukkan bahwa baris ini adalah pernyataan saat ini yang sedang dievaluasi oleh debugger.

206c7ed1eb189e90.pngS

Arahkan mouse ke variabel sementara untuk memverifikasi bahwa kontennya adalah undefined, karena permintaan tidak menyediakan payload suhu.

97979025f4bf2842.png

Klik ikon {i>step-over<i} 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 untuk mengirim pembacaan suhu. Jika pembacaan suhu tidak disediakan, fungsi ini harus memberikan pengecualian.

Klik tombol Putuskan sambungan untuk memutuskan sambungan debugger.

1070d059775ad769.png

Di jendela terminal pertama, hentikan fungsi menjalankan fungsi 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 lagi dengan menjalankan perintah berikut tanpa tanda –inspect untuk menghindari pemasangan debugger.

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

Pastikan bahwa pengecualian ditampilkan 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 dalam log oleh fungsi Anda.

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

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

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

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

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

gcloud config get-value project

Jika project yang Anda tentukan pada Langkah 2 bukan konfigurasi yang 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 yang 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 yang ditargetkan untuk fungsi ini
  • --allow-unauthenticated - memungkinkan 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 dalam 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 konfirmasi bahwa cloud function Anda telah berhasil di-deploy dengan memverifikasi respons yang sesuai.

Temperature OK

7. Pembersihan

Untuk menghindari tagihan yang tidak disengaja, misalnya, Cloud Function ini secara tidak sengaja dipanggil lebih sering daripada alokasi pemanggilan Cloud Function bulanan dalam paket 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 sedang dipilih.

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

4dada486485a935a.png

Jika 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

  • Framework Functions untuk Node.js.
  • Membuat dan menguji Cloud Function HTTP secara lokal.
  • Men-debug Fungsi HTTP dari komputer lokal Anda.
  • Deploy Fungsi HTTP dari komputer lokal Anda.