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
- 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)
- Menyelesaikan Panduan Fungsi Pertama Saya: Node.js
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.
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.
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 menyalurkan fungsi dengan mengarahkan kursor ke ikon peringatan yang muncul di ujung 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 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.
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 mouse ke variabel sementara untuk memverifikasi bahwa kontennya adalah undefined
, karena permintaan tidak menyediakan payload suhu.
Klik ikon {i>step-over<i} 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 disediakan, fungsi ini harus memberikan pengecualian.
Klik tombol Putuskan sambungan untuk memutuskan sambungan debugger.
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 namavalidateTemperature
dengan titik entri bernamavalidateTemperature
--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.
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.