Memanggil fungsi lokal

Penyiapan

Dokumen ini mengasumsikan bahwa Anda telah menyiapkan fungsi yang berjalan secara lokal di localhost menggunakan Functions Framework atau Buildpacks. Contoh ini juga mengasumsikan bahwa Anda telah menginstal alat curl di komputer lokal Anda.

Mengirim permintaan ke fungsi lokal

Anda dapat memicu fungsi yang berjalan secara lokal dengan mengiriminya permintaan HTTP yang dirutekan melalui proses inferensi lokal.

Tentukan tempat fungsi Anda berjalan secara lokal dengan memeriksa URL yang ditampilkan saat Anda mulai menjalankan fungsi. Secara default, fungsi Anda akan dihosting di localhost:8080.

Fungsi HTTP

Saat Anda menguji fungsi HTTP dari lingkungan pengembangan, fungsi HTTP biasanya akan memproses permintaan di localhost:8080. Antarmuka ini hanya dapat diakses dari mesin atau VM tempat fungsi Anda berjalan; permintaan yang dikirim dari sistem lain tidak dapat mencapainya. Karena alasan ini, Anda harus mengeluarkan permintaan HTTP dari sistem yang sama dengan tempat fungsi Anda berjalan. Dalam contoh berikut, jika fungsi Anda memproses port selain 8080, ganti 8080 dalam contoh dengan nomor port untuk fungsi Anda.

Menguji fungsi HTTP dengan Cloud Shell

Jika Anda menggunakan Cloud Shell untuk mem-build dan menguji fungsi, mulai fungsi secara lokal di jendela terminal Cloud Shell, lalu keluarkan permintaan pemicu HTTP dari browser atau instance curl sebagai berikut:

Browser

Klik ikon Tombol Web Preview di toolbar Cloud Shell dan pilih port 8080 atau Ubah port untuk memilih port lain. Tindakan ini akan membuka jendela browser di sistem yang benar dan mengirimkan permintaan GET ke port yang ditunjukkan.

Curl

Untuk mengontrol format permintaan HTTP atau melihat balasan yang tidak berformat, gunakan curl:

  1. Klik ikon + pada panel menu Cloud Shell untuk membuka jendela terminal baru di sistem yang sama dengan tempat fungsi Anda berjalan.
  2. Dari dalam jendela tersebut, jalankan perintah curl untuk memicu fungsi Anda. Contoh:

    curl localhost:8080
    

Menguji fungsi HTTP di server desktop

Jika Anda mem-build dan menjalankan fungsi di sistem desktop lokal, pertama-tama mulai fungsi Anda secara lokal, lalu keluarkan permintaan pemicu HTTP dari browser atau instance curl sebagai berikut:

Browser

Buka tab atau jendela browser baru, lalu ketik http://localhost:8080 di kolom URL browser. Tindakan ini akan membuka jendela browser ke localhost:8080 di server desktop untuk memicu fungsi Anda.

Curl

Buka jendela terminal baru di desktop lokal Anda, lalu jalankan perintah curl di jendela tersebut untuk memicu fungsi Anda. Contoh:

 curl localhost:8080

Tindakan ini menjalankan perintah curl yang ditentukan untuk memicu fungsi Anda dan menampilkan respons yang tidak diformat.

Fungsi CloudEvent

Anda dapat mengirim contoh peristiwa ke fungsi CloudEvent menggunakan curl. Permintaan curl berikut menunjukkan cara mengirim contoh peristiwa Cloud Pub/Sub dan Cloud Storage ke fungsi CloudEvent yang berjalan pada localhost:8080.

Pub/Sub

curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -H "ce-id: 123451234512345" \
  -H "ce-specversion: 1.0" \
  -H "ce-time: 2020-01-02T12:34:56.789Z" \
  -H "ce-type: google.cloud.pubsub.topic.v1.messagePublished" \
  -H "ce-source: //pubsub.googleapis.com/projects/MY-PROJECT/topics/MY-TOPIC" \
  -d '{
        "message": {
          "data": "d29ybGQ=",
          "attributes": {
             "attr1":"attr1-value"
          }
        },
        "subscription": "projects/MY-PROJECT/subscriptions/MY-SUB"
      }'
    

Penyimpanan

curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -H "ce-id: 123451234512345" \
  -H "ce-specversion: 1.0" \
  -H "ce-time: 2020-01-02T12:34:56.789Z" \
  -H "ce-type: google.cloud.storage.object.v1.finalized" \
  -H "ce-source: //storage.googleapis.com/projects/_/buckets/MY-BUCKET-NAME" \
  -H "ce-subject: objects/MY_FILE.txt" \
  -d '{
        "bucket": "MY_BUCKET",
        "contentType": "text/plain",
        "kind": "storage#object",
        "md5Hash": "...",
        "metageneration": "1",
        "name": "MY_FILE.txt",
        "size": "352",
        "storageClass": "MULTI_REGIONAL",
        "timeCreated": "2020-04-23T07:38:57.230Z",
        "timeStorageClassUpdated": "2020-04-23T07:38:57.230Z",
        "updated": "2020-04-23T07:38:57.230Z"
      }'
    

Fungsi latar belakang

Anda dapat mengirim contoh peristiwa ke fungsi latar belakang menggunakan curl. Permintaan curl berikut menunjukkan cara mengirim contoh peristiwa Cloud Pub/Sub dan Cloud Storage ke fungsi latar belakang yang berjalan pada localhost:8080.

Pub/Sub

# 'world' base64-encoded is 'd29ybGQ='
curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
        "context": {
          "eventId":"1144231683168617",
          "timestamp":"2020-05-06T07:33:34.556Z",
          "eventType":"google.pubsub.topic.publish",
          "resource":{
            "service":"pubsub.googleapis.com",
            "name":"projects/sample-project/topics/gcf-test",
            "type":"type.googleapis.com/google.pubsub.v1.PubsubMessage"
          }
        },
        "data": {
          "@type": "type.googleapis.com/google.pubsub.v1.PubsubMessage",
          "attributes": {
             "attr1":"attr1-value"
          },
          "data": "d29ybGQ="
        }
      }'
    

Penyimpanan

curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
        "context": {
          "eventId": "1147091835525187",
          "timestamp": "2020-04-23T07:38:57.772Z",
          "eventType": "google.storage.object.finalize",
          "resource": {
             "service": "storage.googleapis.com",
             "name": "projects/_/buckets/MY_BUCKET/MY_FILE.txt",
             "type": "storage#object"
          }
        },
        "data": {
          "bucket": "MY_BUCKET",
          "contentType": "text/plain",
          "kind": "storage#object",
          "md5Hash": "...",
          "metageneration": "1",
          "name": "MY_FILE.txt",
          "size": "352",
          "storageClass": "MULTI_REGIONAL",
          "timeCreated": "2020-04-23T07:38:57.230Z",
          "timeStorageClassUpdated": "2020-04-23T07:38:57.230Z",
          "updated": "2020-04-23T07:38:57.230Z"
        }
      }'