Membuat dan men-deploy fungsi Cloud Run HTTP dengan Ruby

Panduan ini akan memandu Anda dalam proses penulisan fungsi Cloud Run menggunakan runtime Ruby. 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 infrastruktur Cloud, seperti pesan di topik Pub/Sub, atau perubahan dalam bucket Cloud Storage.

Untuk mengetahui detail selengkapnya, baca artikel tentang menulis fungsi HTTP dan menulis fungsi berbasis peristiwa.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Functions, Cloud Build, Artifact Registry, Cloud Run, and Cloud Logging APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Functions, Cloud Build, Artifact Registry, Cloud Run, and Cloud Logging APIs.

    Enable the APIs

  8. Instal dan lakukan inisialisasi Google Cloud SDK.
  9. Update dan instal komponen gcloud dengan perintah berikut.
    gcloud components update
  10. Siapkan lingkungan pengembangan Anda.

    Buka panduan penyiapan Ruby

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 app.rb di direktori helloworld dengan konten berikut:

    require "functions_framework"
    require "cgi"
    require "json"
    
    FunctionsFramework.http "hello_http" do |request|
      # The request parameter is a Rack::Request object.
      # See https://www.rubydoc.info/gems/rack/Rack/Request
      name = request.params["name"] ||
             (request.body.rewind && JSON.parse(request.body.read)["name"] rescue nil) ||
             "World"
      # Return the response body as a string.
      # You can also return a Rack::Response object, a Rack response array, or
      # a hash which will be JSON-encoded into a response.
      "Hello #{CGI.escape_html name}!"
    end

    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 Ruby dikelola dengan bundler dan dinyatakan dalam file bernama Gemfile.

Saat Anda men-deploy fungsi, fungsi Cloud Run akan mendownload dan menginstal dependensi yang dideklarasikan di Gemfile dan Gemfile.lock menggunakan bundler.

Gemfile mencantumkan paket yang diperlukan oleh fungsi Anda, beserta batasan versi opsional apa pun. Untuk fungsi Cloud Run, salah satu paket ini harus berupa gem functions_framework.

Untuk latihan ini, buat file bernama Gemfile di direktori yang sama dengan file app.rb yang berisi kode fungsi Anda, dengan konten berikut:

source "https://rubygems.org"
gem "functions_framework", "~> 0.7"

Jalankan perintah berikut untuk menginstal gem functions_framework dan dependensi lainnya:

bundle install

Membangun dan menguji fungsi secara lokal

Sebelum men-deploy fungsi, Anda dapat membuat dan mengujinya secara lokal.

  1. Jalankan perintah berikut untuk menggunakan functions-framework-ruby yang dapat dieksekusi guna memulai server web lokal yang menjalankan fungsi hello_http Anda:

    bundle exec functions-framework-ruby --target hello_http
    
  2. Uji fungsi Anda dengan membuka http://localhost:8080 di browser atau dengan menjalankan curl localhost:8080 dari jendela lain.

    Lihat Mengirim permintaan ke fungsi lokal untuk mengetahui detail selengkapnya.

Lihat Menguji Functions dalam dokumentasi Ruby Functions Framework.

Men-deploy fungsi

Untuk men-deploy fungsi Anda, jalankan perintah berikut di direktori helloworld:

  gcloud functions deploy ruby-http-function \
    --gen2 \
    --runtime=ruby33 \
    --region=REGION \
    --entry-point=hello_http \
    --source=. \
    --trigger-http \
    --allow-unauthenticated

Ganti REGION dengan nama region Google Cloud tempat Anda ingin men-deploy fungsi (misalnya us-west1).

Flag --allow-unauthenticated opsional memungkinkan Anda menjangkau fungsi tanpa autentikasi.

Menguji fungsi yang di-deploy

  1. Setelah fungsi di-deploy, catat properti uri dari output perintah gcloud functions deploy, atau ambil dengan perintah berikut:

        gcloud functions describe ruby-http-function \
          --region=REGION
    

    Ganti REGION dengan nama region Google Cloud tempat Anda men-deploy fungsi (misalnya, us-west1).

  2. Kunjungi URL ini di browser Anda. Fungsi ini menampilkan pesan "Halo Dunia!".

Melihat log fungsi Anda

Anda dapat meninjau log fungsi dengan UI Cloud Logging atau melalui Google Cloud CLI.

Melihat log dengan alat command line

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

    gcloud functions logs read \
      --gen2 \
      --limit=10 \
      --region=REGION \
      ruby-http-function

Ganti REGION dengan nama region Google Cloud tempat Anda men-deploy fungsi (misalnya us-west1).

Outputnya akan terlihat seperti berikut:

LEVEL: I
NAME: hello-http
TIME_UTC: 2023-06-01 00:09:41.477
LOG: Default STARTUP TCP probe succeeded after 1 attempt for container "hello__http-1" on port 8080.

LEVEL:
NAME: hello-http
TIME_UTC: 2023-06-01 00:09:41.451
LOG: I, [2023-06-01T00:09:41.451784 #1]  INFO -- : FunctionsFramework: Serving function "hello_http" on port 8080...

LEVEL:
NAME: hello-http
TIME_UTC: 2023-06-01 00:09:41.364
LOG: I, [2023-06-01T00:09:41.363923 #1]  INFO -- : FunctionsFramework: Starting server...

LEVEL:
NAME: hello-http
TIME_UTC: 2023-06-01 00:09:41.363
LOG: I, [2023-06-01T00:09:41.363855 #1]  INFO -- : FunctionsFramework: Looking for function name "hello_http"...

LEVEL:
NAME: hello-http
TIME_UTC: 2023-06-01 00:09:41.354
LOG: I, [2023-06-01T00:09:41.354150 #1]  INFO -- : FunctionsFramework: Loading functions from "./app.rb"...

Melihat log dengan dasbor logging

Untuk melihat log fungsi Anda dengan dasbor logging, buka halaman Ringkasan fungsi Cloud Run, lalu klik nama fungsi Anda dari daftar, lalu klik tab Log.