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 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 yang ditentukan 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.
- Membuat dan menguji HTTP Cloud Function secara lokal.
- Men-debug Fungsi HTTP dari komputer lokal Anda.
- Men-deploy Fungsi HTTP dari komputer lokal.
2. Penyiapan dan Persyaratan
Prasyarat
- Cloud SDK
- Kode Visual Studio
- Node.js 8.6.0 atau yang lebih baru (untuk menginstal Node.js, gunakan nvm, untuk memeriksa versi Anda, jalankan node –version)
- Penyelesaian panduan Fungsi Pertama Saya: Node.js
Biaya
Meskipun codelab ini hanya memerlukan 1 pemanggilan Cloud Function yang di-deploy, Anda tetap harus merujuk ke 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 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 tujuan codelab, setiap pemanggilan Cloud Functions diperhitungkan terhadap paket gratis tersebut. Selama Anda tidak melebihi batas agregat (dalam setiap bulan), Anda tidak akan dikenai biaya apa pun.
3. Menginstal Framework Functions 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 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 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 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.
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.
Anda dapat beralih antar-jendela terminal 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 kembali fungsi 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 dengan 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 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 Palette Perintah dan pilih item teratas dalam daftar.
Untuk codelab ini, pilih Only With Flag
seperti yang ditunjukkan pada gambar di bawah:
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
.
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 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 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 telah dilampirkan.
Tetapkan titik henti sementara di baris 3 dengan mengklik di dalam margin di sebelah kiri nomor baris.
Ikon titik henti sementara akan menyala merah terang, yang menunjukkan bahwa baris kode ini dapat diakses oleh debugger.
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.
Arahkan kursor ke variabel temp untuk memverifikasi bahwa kontennya adalah undefined
, karena permintaan tidak memberikan payload suhu.
Klik ikon step-over untuk menjalankan pernyataan berikutnya.
Anda akan melihat pernyataan saat ini melompat ke bagian else dari pernyataan if.
Untuk demo ini, Anda dapat mengasumsikan bahwa spesifikasi mengharuskan semua permintaan untuk mengirim pembacaan suhu. Jika pembacaan suhu tidak diberikan, fungsi akan menampilkan pengecualian.
Klik tombol Putuskan sambungan untuk memutuskan sambungan debugger.
Di jendela terminal pertama, hentikan fungsi agar tidak berjalan 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 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 yang dijelaskan sebagai berikut:
deploy validateTemperature
- subperintah gcloud untuk men-deploy Cloud Function dengan namavalidateTemperature
dengan titik entri bernamavalidateTemperature
--trigger-http
- jenis peristiwa pemicu--runtime nodejs12
- runtime yang ditargetkan 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 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 tidak sengaja dipanggil lebih dari alokasi pemanggilan Cloud Function bulanan Anda di paket gratis, Anda dapat menghapus Cloud Function atau menghapus project yang Anda buat di Langkah 2.
Untuk menghapus Cloud Function, buka Cloud Console 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.
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
- Functions Framework untuk Node.js.
- Membuat dan menguji HTTP Cloud Function secara lokal.
- Men-debug Fungsi HTTP dari komputer lokal Anda.
- Men-deploy Fungsi HTTP dari komputer lokal.