Membuat dan men-deploy HTTP Cloud Function menggunakan Ruby (generasi ke-1)

Panduan ini akan membawa Anda melalui proses penulisan Cloud Function menggunakan runtime Ruby. Ada dua jenis Cloud Functions:

  • Fungsi HTTP, yang Anda panggil dari permintaan HTTP standar.
  • Fungsi berbasis peristiwa, yang Anda gunakan untuk menangani peristiwa dari infrastruktur Cloud, seperti pesan pada topik Pub/Sub, atau perubahan dalam 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. Enable the Cloud Functions and Cloud Build APIs.

    Enable the APIs

  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. Enable the Cloud Functions and Cloud Build APIs.

    Enable the APIs

  8. Instal dan lakukan inisialisasi gcloud CLI.
  9. Update dan instal komponen gcloud:
    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, Cloud Functions 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 Cloud Function, 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

Membuat dan menguji secara lokal

Sebelum men-deploy fungsi, Anda dapat membuat dan mengujinya secara lokal. 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
# ...starts the web server in the foreground

Jika fungsi berhasil dibuat, fungsi tersebut akan menampilkan URL yang dapat Anda kunjungi di browser web untuk melihat cara kerja fungsi: http://localhost:8080/. Anda akan melihat pesan Hello World!.

Atau, Anda dapat mengirim permintaan ke fungsi ini menggunakan curl dari jendela terminal lain:

curl localhost:8080
# Output: Hello World!

Lihat Menguji Fungsi dalam dokumentasi Framework Fungsi Ruby.

Men-deploy cloud function

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

gcloud functions deploy hello_http --runtime ruby32 --trigger-http --allow-unauthenticated

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

Menguji fungsi yang di-deploy

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

    gcloud functions describe hello_http
    

    Kodenya akan terlihat seperti berikut:

    https://GCP_REGION-PROJECT_ID.cloudfunctions.net/hello_http
  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/hello_http?name=NAME

    Anda akan melihat pesan "Halo NAME!"

Melihat log

Anda dapat melihat log Cloud Functions di Cloud Logging UI atau melalui Google Cloud CLI.

Melihat log dengan alat command line

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

gcloud functions logs read hello_http

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

Melihat log di dasbor Logging

Anda juga dapat melihat log untuk Cloud Functions dari konsol Google Cloud.