Mulai Menggunakan fungsi Cloud Run Berbasis Peristiwa

1. Pengantar

Ringkasan

Fungsi Cloud Run adalah cara baru untuk men-deploy workload menggunakan paradigma peristiwa GCF dan tanda tangan fungsi yang sudah dikenal. Daripada menggunakan proses build dan konfigurasi deployment yang tidak dapat berubah, fungsi Cloud Run memberi Anda kontrol langsung atas Layanan dasar yang dibuat di Cloud Run.

Dengan fungsi Cloud Run, kami menyediakan UX deployment sumber Cloud Run yang sederhana, memberi developer kontrol penuh atas beban kerja mereka menggunakan konfigurasi Cloud Run.

Di bagian ini, Anda akan mempelajari cara men-deploy fungsi berbasis peristiwa di Node. Anda akan men-deploy fungsi yang dipicu setiap kali objek diselesaikan di bucket Google Cloud Storage.

Codelab ini menggunakan contoh nodejs pada contoh di bawah. Namun, Anda dapat menggunakan contoh kode Cloud Functions generasi ke-2 dalam bahasa pilihan Anda:

Yang akan Anda pelajari

  • Cara men-deploy fungsi Cloud Run berbasis peristiwa yang dipicu setiap kali objek diupload ke bucket GCS
  • Cara membuat akun layanan dengan peran yang tepat untuk menerima peristiwa dari Cloud Storage dan memanggil fungsi Cloud Run

2. Menyiapkan variabel lingkungan dan mengaktifkan API

Mengupdate gcloud CLI

Codelab ini memerlukan gcloud CLI versi terbaru. Anda dapat mengupdate CLI dengan menjalankan

gcloud components update

Mengaktifkan API

Sebelum Anda dapat mulai menggunakan codelab ini, ada beberapa API yang perlu Anda aktifkan. Codelab ini memerlukan penggunaan API berikut. Anda dapat mengaktifkan API tersebut dengan menjalankan perintah berikut:

gcloud services enable run.googleapis.com \
    cloudbuild.googleapis.com \
    storage.googleapis.com \
    artifactregistry.googleapis.com

Menyiapkan variabel lingkungan

Anda dapat menetapkan variabel lingkungan yang akan digunakan di seluruh codelab ini.

PROJECT_ID=<YOUR_PROJECT_ID>
REGION=<YOUR_REGION, e.g. us-central1>

gcloud config set project $PROJECT_ID
SERVICE_NAME=crf-event-codelab
BUCKET_NAME=$PROJECT_ID-$SERVICE_NAME
TRIGGER_NAME=$SERVICE_NAME-trigger

3. Membuat Bucket Penyimpanan dan Akun Layanan

Membuat bucket penyimpanan

Anda dapat membuat bucket Cloud Storage dengan menjalankan perintah berikut:

gsutil mb -l us-central1 gs://$BUCKET_NAME

Membuat akun layanan

Untuk contoh ini, Anda akan membuat akun layanan dengan izin EventArc yang diperlukan dan peran invoker Cloud Run untuk menerima peristiwa dari Cloud Storage dan memanggil fungsi Cloud Run.

Pertama, buat akun layanan.

PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

SERVICE_ACCOUNT="cloud-run-functions"
SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

gcloud iam service-accounts create $SERVICE_ACCOUNT \
  --display-name="Cloud Run functions Eventarc service account"

Selanjutnya, berikan peran Eventarc Event Receiver (roles/eventarc.eventReceiver) di project ke akun layanan yang terkait dengan pemicu Eventarc Anda, sehingga pemicu tersebut dapat menerima peristiwa dari penyedia peristiwa.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
  --role=roles/eventarc.eventReceiver

Kemudian, berikan peran invoker Cloud Run ke akun layanan agar dapat memanggil fungsi.

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \
  --role=roles/run.invoker

4. Membuat dan men-deploy fungsi

Pertama, buat direktori untuk kode sumber dan {i>cd<i} ke direktori tersebut.

mkdir ../$SERVICE_NAME && cd $_

Lalu, buat file package.json dengan konten berikut:

{
    "dependencies": {
        "@google-cloud/functions-framework": "^3.0.0"
    }
}

Selanjutnya, buat file index.js dengan konten berikut:

const functions = require("@google-cloud/functions-framework");

// Register a CloudEvent callback with the Functions Framework that will
// be triggered by Cloud Storage.
functions.cloudEvent("helloGCS", (cloudEvent) => {
    console.log(`Event ID: ${cloudEvent.id}`);
    console.log(`Event Type: ${cloudEvent.type}`);

    const file = cloudEvent.data;
    console.log(`Bucket: ${file.bucket}`);
    console.log(`File: ${file.name}`);
    console.log(`Metageneration: ${file.metageneration}`);
    console.log(`Created: ${file.timeCreated}`);
    console.log(`Updated: ${file.updated}`);
});

Sekarang Anda dapat men-deploy fungsi Cloud Run dengan menjalankan perintah berikut:

gcloud beta run deploy $SERVICE_NAME \
 --source . \
      --function helloGCS \
      --region $REGION \
      --no-allow-unauthenticated

Harap perhatikan hal berikut:

  • flag –source digunakan untuk memberi tahu Cloud Run agar membangun fungsi ke dalam layanan berbasis container yang dapat dijalankan
  • penanda –function (baru) digunakan untuk menyetel titik masuk layanan baru menjadi tanda tangan fungsi yang ingin dipanggil
  • (opsional) the –no-allow-unauthenticated untuk mencegah fungsi Anda dipanggil secara publik

Anda dapat melihat layanan baru crf-nodejs-event dengan menjalankan perintah berikut:

gcloud beta run services describe $SERVICE_NAME

5. Membuat peristiwa

Kita dapat membuat pemicu Eventarc untuk mengirim pesan ke fungsi setiap kali objek difinalisasi di Google Cloud Storage:

BUCKET_REGION=$REGION

gcloud eventarc triggers create $TRIGGER_NAME \
     --location=$REGION \
     --destination-run-service=crf-nodejs-event \
  --destination-run-region=$BUCKET_REGION \
     --event-filters="type=google.cloud.storage.object.v1.finalized" \
     --event-filters="bucket=$BUCKET_NAME" \
     --service-account=$SERVICE_ACCOUNT_ADDRESS

Harap perhatikan hal berikut:

  • gcs-function-trigger adalah nama pemicu
  • crf-nodejs-event adalah nama layanan Cloud Run tempat fungsi kami di-deploy
  • untuk tanda –event-filters, jangan gunakan awalan gs:// pada nama bucket Anda.

Tutorial mendetail cara menyiapkan layanan Pemicu dari Cloud Storage menggunakan Eventarc dapat ditemukan dalam dokumentasi Cloud Run di sini: https://cloud.google.com/run/docs/tutorial/eventarc

6. Menguji Fungsi

Setelah deployment selesai, Anda akan melihat URL layanan. Untuk memanggil fungsi, Anda perlu mengirim permintaan yang diautentikasi dengan token identitas Anda atau token identitas prinsip yang memiliki peran Cloud Run Invoker, seperti yang ditunjukkan di bawah ini:

# get the Service URL
SERVICE_URL="$(gcloud run services describe crf-nodejs-event --region us-central1 --format 'value(status.url)')"

# invoke the service
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL

Setelah fungsi di-deploy dan pemicu dibuat, sekarang kita siap untuk memanggil fungsi.

Membuat file dan menguploadnya ke bucket Cloud Storage. Anda dapat melakukannya melalui antarmuka web Konsol Cloud, atau menggunakan alat gsutil CLI, misalnya

echo "hello world" > test.txt
gsutil cp test gs://$BUCKET_NAME

Setelah file berhasil diupload, peristiwa akan dibuat dan fungsi Anda akan mencetak beberapa informasi dasar tentang objek, misalnya nama file. Anda dapat menemukan output ini dalam entri log untuk fungsi tersebut di Cloud Console. Atau, Anda dapat membuat kueri untuk output ini menggunakan gcloud CLI:

gcloud logging read "resource.labels.service_name=crf-nodejs-event AND textPayload: File" --format=json 

dan Anda akan melihat output berikut

"textPayload": "File: test.txt"

7. Selamat!

Selamat, Anda telah menyelesaikan codelab!

Sebaiknya tinjau dokumentasi untuk fungsi Cloud Run

Yang telah kita bahas

  • Cara men-deploy fungsi Cloud Run berbasis peristiwa yang dipicu setiap kali objek diupload ke bucket GCS
  • Cara membuat akun layanan dengan peran yang tepat untuk menerima peristiwa dari Cloud Storage dan memanggil fungsi Cloud Run

8. Pembersihan

Untuk menghindari tagihan yang tidak disengaja, (misalnya, jika layanan Cloud Run ini secara tidak sengaja dipanggil lebih sering daripada alokasi pemanggilan Cloud Run bulanan Anda dalam paket gratis), Anda dapat menghapus layanan Cloud Run atau menghapus project yang Anda buat di Langkah 2.

Untuk menghapus layanan Cloud Run, buka Konsol Cloud Cloud Run di https://console.cloud.google.com/run/ dan hapus layanan crf-event-codelab yang Anda buat di codelab ini.

Jika memilih untuk menghapus seluruh project, Anda dapat membuka https://console.cloud.google.com/cloud-resource-manager, pilih project yang dibuat pada Langkah 2, lalu pilih Hapus. Jika project dihapus, Anda harus mengubah project di Cloud SDK. Anda dapat melihat daftar semua project yang tersedia dengan menjalankan gcloud projects list.