Buat dan deploy fungsi HTTP Cloud Run menggunakan Node.js (generasi ke-1)

Panduan ini membawa Anda melalui proses penulisan fungsi Cloud Run menggunakan runtime Node.js. Ada dua jenis fungsi Cloud Run:

  • Fungsi HTTP, yang Anda panggil dari permintaan HTTP standar.
  • Fungsi berbasis peristiwa, yang Anda gunakan untuk menangani peristiwa dari Cloud infrastruktur IT, seperti pesan pada topik Pub/Sub, atau perubahan bucket Cloud Storage.

Contoh ini menunjukkan cara membuat fungsi HTTP sederhana.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Aktifkan API Cloud Functions and Cloud Build.

    Mengaktifkan API

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  6. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  7. Aktifkan API Cloud Functions and Cloud Build.

    Mengaktifkan API

  8. Instal dan lakukan inisialisasi gcloud CLI.
  9. Update dan instal komponen gcloud:
    gcloud components update
  10. Menyiapkan lingkungan pengembangan.

    Buka panduan penyiapan Node.js

Membuat fungsi

  1. Buat direktori di sistem lokal Anda untuk kode fungsi:

    Linux atau Mac OS X

    mkdir ~/helloworld
    cd ~/helloworld
    

    Windows

    mkdir %HOMEPATH%\helloworld
    cd %HOMEPATH%\helloworld
    
  2. Buat file index.js di direktori helloworld dengan konten berikut:

    const functions = require('@google-cloud/functions-framework');
    const escapeHtml = require('escape-html');
    
    /**
     * Responds to an HTTP request using data from the request body parsed according
     * to the "content-type" header.
     *
     * @param {Object} req Cloud Function request context.
     * @param {Object} res Cloud Function response context.
     */
    functions.http('helloHttp', (req, res) => {
      res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
    });

    Fungsi contoh ini mengambil nama yang diberikan dalam permintaan HTTP dan menampilkan salam, atau "Halo Dunia!" jika tidak ada nama yang diberikan.

Menentukan dependensi

Dependensi pada Node.js disimpan dalam file bernama package.json. Anda dapat membuat file ini secara manual atau dengan perintah npm.

  • Untuk membuat file dependensi package.json menggunakan npm, jalankan perintah berikut:

    npm init
    npm install c8 gaxios mocha sinon supertest wait-port --save-dev
    npm install @google-cloud/functions-framework escape-html
    
  • Jika Anda lebih suka mem-build file package.json secara manual, buat file package.json dalam direktori helloworld dengan konten berikut:

    {
      "name": "nodejs-docs-samples-functions-hello-world-http",
      "version": "0.0.1",
      "private": true,
      "license": "Apache-2.0",
      "author": "Google Inc.",
      "repository": {
        "type": "git",
        "url": "https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git"
      },
      "engines": {
        "node": ">=16.0.0"
      },
      "scripts": {
        "unit-test": "c8 mocha -p -j 2 test/index.test.js test/*unit*test.js test/*integration*test.js --timeout=6000 --exit",
        "system-test": "c8 mocha -p -j 2 test/*system*test.js --timeout=600000 --exit",
        "all-test": "npm run unit-test && npm run system-test",
        "test": "npm -- run unit-test"
      },
      "dependencies": {
        "@google-cloud/functions-framework": "^3.1.0",
        "escape-html": "^1.0.3"
      },
      "devDependencies": {
        "c8": "^10.0.0",
        "gaxios": "^6.0.0",
        "mocha": "^10.0.0",
        "sinon": "^18.0.0",
        "supertest": "^7.0.0",
        "wait-port": "^1.0.4"
      }
    }
    

Men-deploy cloud function

Untuk men-deploy fungsi dengan pemicu HTTP, jalankan perintah berikut di direktori helloworld:

gcloud functions deploy helloHttp --runtime nodejs20 --trigger-http --allow-unauthenticated

Flag --allow-unauthenticated memungkinkan Anda menjangkau fungsi tanpa autentikasi. Untuk mewajibkan autentikasi, hilangkan flag.

Menguji fungsi

  1. Setelah fungsi selesai di-deploy, catat properti httpsTrigger.url atau temukan menggunakan perintah berikut:

    gcloud functions describe helloHttp
    

    Kodenya akan terlihat seperti berikut:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/helloHttp
  2. Kunjungi URL ini di browser Anda. Anda akan melihat pesan "Halo Dunia!".

    Coba teruskan nama dalam permintaan HTTP, misalnya dengan menggunakan URL berikut:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/helloHttp?name=NAME

    Anda akan melihat pesan "Halo NAME!"

Lihat log

Log untuk fungsi Cloud Run dapat dilihat menggunakan Google Cloud CLI, dan di UI Cloud Logging.

Menggunakan alat command line

Untuk melihat log fungsi Anda dengan gcloud CLI, gunakan perintah logs read, diikuti dengan nama fungsi:

gcloud functions logs read helloHttp

Output akan terlihat seperti berikut:

LEVEL  NAME       EXECUTION_ID  TIME_UTC                 LOG
D      helloHttp  rvb9j0axfclb  2019-09-18 22:06:25.983  Function execution started
D      helloHttp  rvb9j0axfclb  2019-09-18 22:06:26.001  Function execution took 19 ms, finished with status code: 200

Menggunakan dasbor Logging

Anda juga dapat melihat log untuk fungsi Cloud Run dari Konsol Google Cloud.