1. Pengantar
Ringkasan
Fungsi Cloud Run adalah cara baru untuk men-deploy beban kerja menggunakan paradigma peristiwa dan tanda tangan fungsi GCF yang sudah dikenal. Daripada menggunakan konfigurasi deployment dan proses build yang sudah ditentukan, fungsi Cloud Run memberi Anda kontrol langsung atas Layanan yang mendasarinya yang dibuat di Cloud Run.
Dengan fungsi Cloud Run, kami menyediakan UX sederhana untuk deployment sumber Cloud Run, yang 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 dalam contoh di bawah. Namun, Anda dapat menggunakan contoh kode Cloud Functions generasi ke-2 dalam bahasa pilihan Anda:
- Contoh fungsi Python
- Contoh fungsi Nodejs
- Contoh fungsi Go
- Contoh fungsi Java
- Contoh fungsi PHP
- Contoh fungsi Ruby
- Contoh fungsi.NET
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 penginstalan 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 diaktifkan. 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 pemanggil 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) pada project ke akun layanan yang terkait dengan pemicu Eventarc Anda agar pemicu 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 cd ke direktori tersebut.
mkdir ../$SERVICE_NAME && cd $_
Kemudian, 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 untuk mem-build fungsi menjadi layanan berbasis container yang dapat dijalankan
- flag –function (baru) digunakan untuk menetapkan titik entri layanan baru sebagai tanda tangan fungsi yang ingin Anda panggil
- (opsional) –no-allow-unauthenticated untuk mencegah fungsi Anda dipanggil secara publik
Anda dapat melihat crf-nodejs-event
layanan baru 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 diselesaikan 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 kita di-deploy
- untuk flag –event-filters, jangan gunakan awalan gs:// dalam nama bucket Anda.
Tutorial mendetail tentang cara menyiapkan layanan Pemicu dari Cloud Storage menggunakan Eventarc dapat ditemukan dalam dokumentasi Cloud Run di sini: https://cloud.google.com/run/docs/tutorials/eventarc
6. Menguji Fungsi
Setelah deployment selesai, Anda akan melihat URL layanan. Untuk memanggil fungsi, Anda harus mengirim permintaan yang diautentikasi dengan token identitas Anda atau token identitas akun yang memiliki peran Cloud Run Invoker, seperti yang ditunjukkan di bawah:
# 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, kita sekarang siap untuk memanggil fungsi.
Buat file dan upload ke bucket Cloud Storage Anda. Anda dapat melakukannya melalui antarmuka web Cloud Console, atau menggunakan alat CLI gsutil, misalnya
echo "hello world" > test.txt gsutil cp test gs://$BUCKET_NAME
Saat file berhasil diupload, peristiwa akan dibuat dan fungsi Anda akan mencetak beberapa informasi dasar tentang objek, misalnya nama file. Anda dapat menemukan output ini di entri log untuk fungsi 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 tidak sengaja dipanggil lebih dari alokasi pemanggilan Cloud Run bulanan Anda di 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 dalam codelab ini.
Jika memilih untuk menghapus seluruh project, Anda dapat membuka https://console.cloud.google.com/cloud-resource-manager, memilih project yang Anda buat di Langkah 2, lalu memilih Hapus. Jika menghapus project, Anda harus mengubah project di Cloud SDK. Anda dapat melihat daftar semua project yang tersedia dengan menjalankan gcloud projects list
.