Tutorial ini menunjukkan cara men-deploy fungsi berbasis peristiwa di Cloud Run, dan menggunakan Eventarc untuk memicu fungsi sebagai respons terhadap peristiwa Cloud Storage menggunakan Google Cloud CLI.
Dengan menentukan filter untuk pemicu Eventarc, Anda dapat mengonfigurasi pemilihan rute peristiwa, termasuk sumber peristiwa dan target peristiwa. Untuk contoh dalam tutorial ini, update pada bucket Cloud Storage akan memicu peristiwa tersebut, dan permintaan akan dikirim ke fungsi Anda dalam bentuk permintaan HTTP.
Tujuan
Dalam tutorial ini, Anda akan:
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
Batasan keamanan yang ditentukan oleh organisasi mungkin mencegah Anda menyelesaikan langkah-langkah berikut. Untuk mengetahui informasi pemecahan masalah, lihat Mengembangkan aplikasi di lingkungan Google Cloud yang terbatas.
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan nama project Google Cloud Anda.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan nama project Google Cloud Anda.
-
-
Make sure that billing is enabled for your Google Cloud project.
- Jika tidak menggunakan Cloud Shell, update komponen Google Cloud CLI
dan login menggunakan akun Anda:
gcloud components update gcloud auth login
- Aktifkan API:
gcloud services enable artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ eventarc.googleapis.com \ run.googleapis.com \ storage.googleapis.com
- Tetapkan variabel konfigurasi yang akan digunakan dalam tutorial ini:
export REGION=us-central1 gcloud config set run/region ${REGION} gcloud config set run/platform managed gcloud config set eventarc/location ${REGION}
Jika Anda dikenai kebijakan organisasi pembatasan domain yang membatasi pemanggilan yang tidak diautentikasi untuk project, Anda perlu mengakses layanan yang di-deploy seperti yang dijelaskan di bagian Menguji layanan pribadi.
Menetapkan peran yang diperlukan
-
Jika Anda adalah project creator, Anda diberi peran Pemilik dasar (
roles/owner
). Secara default, peran Identity and Access Management (IAM) ini mencakup izin yang diperlukan untuk akses penuh ke sebagian besar resource Google Cloud dan Anda dapat melewati langkah ini.Jika Anda bukan project creator, izin yang diperlukan harus diberikan pada project kepada akun utama yang sesuai. Misalnya, akun utama dapat berupa Akun Google (untuk pengguna akhir) atau akun layanan (untuk aplikasi dan workload komputasi). Untuk mengetahui informasi selengkapnya, lihat halaman eran dan izin untuk tujuan peristiwa Anda.
Izin yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan tutorial ini, minta administrator untuk memberi Anda peran IAM berikut di project Anda:
-
Editor Cloud Build (
roles/cloudbuild.builds.editor
) -
Cloud Run Admin (
roles/run.admin
) -
Cloud Run Source Developer (
roles/run.sourceDeveloper
) -
Eventarc Admin (
roles/eventarc.admin
) -
Logs View Accessor (
roles/logging.viewAccessor
) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) -
Service Account Admin (
roles/iam.serviceAccountAdmin
) -
Service Account User (
roles/iam.serviceAccountUser
) -
Service Usage Admin (
roles/serviceusage.serviceUsageAdmin
) -
Storage Admin (
roles/storage.admin
)
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
-
Editor Cloud Build (
Catat akun layanan default Compute Engine karena Anda akan melampirkan akun tersebut ke pemicu Eventarc untuk merepresentasikan identitas pemicu untuk tujuan pengujian. Akun layanan ini dibuat secara otomatis setelah mengaktifkan atau menggunakan layanan Google Cloud yang menggunakan Compute Engine, dan dengan format email berikut:
PROJECT_NUMBER-compute@
Ganti
PROJECT_NUMBER
dengan nomor project Google Cloud Anda. Anda dapat menemukan nomor project di halaman Selamat Datang pada Konsol Google Cloud atau dengan menjalankan perintah berikut:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Untuk lingkungan produksi, sebaiknya buat akun layanan baru dan berikan satu atau beberapa peran IAM yang berisi izin minimum yang diperlukan dan ikuti prinsip hak istimewa terendah.
- Secara default, layanan Cloud Run hanya dapat dipanggil oleh
Project Owner, Project Editor, Cloud Run Admin dan Invoker.
Anda dapat
mengontrol
akses per layanan; namun, untuk tujuan pengujian, berikan
peran Cloud Run
Invoker (
run.invoker
) di project Google Cloud ke akun layanan Compute Engine. Peran ini akan memberikan peran tersebut di semua layanan dan tugas Cloud Run dalam suatu project.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@ \ --role=roles/run.invoker
Perhatikan bahwa pemicu akan berhasil dibuat dan diaktifkan jika Anda membuat pemicu untuk layanan Cloud Run yang diautentikasi tanpa memberikan peran Cloud Run Namun, pemicu tidak akan berfungsi seperti yang diharapkan dan pesan yang mirip dengan berikut ini akan muncul di log:
The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
- Berikan
Peran
Eventarc Event Receiver (
roles/eventarc.eventReceiver
) pada project ke akun layanan default Compute Engine agar pemicu Eventarc dapat menerima peristiwa dari penyedia peristiwa.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@ \ --role=roles/eventarc.eventReceiver
- Sebelum membuat pemicu untuk peristiwa langsung dari Cloud Storage,
berikan peran Pub/Sub
Publisher (
roles/pubsub.publisher
) ke agen layanan Cloud Storage:SERVICE_ACCOUNT="$(gcloud storage service-agent --project=PROJECT_ID)" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:${SERVICE_ACCOUNT}" \ --role='roles/pubsub.publisher'
- Jika Anda mengaktifkan agen layanan Cloud Pub/Sub pada atau sebelum
8 April 2021, untuk mendukung permintaan push Pub/Sub yang diautentikasi, berikan
peran
Service Account Token Creator (
roles/iam.serviceAccountTokenCreator
) ke agen layanan. Jika tidak, peran ini akan diberikan secara default:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub. \ --role=roles/iam.serviceAccountTokenCreator
Membuat bucket Cloud Storage
Membuat bucket Cloud Storage untuk digunakan sebagai sumber peristiwa:
gcloud storage buckets create -l us-central1 gs://PROJECT_ID-bucket/
Menulis fungsi berbasis peristiwa
Untuk menulis fungsi berbasis peristiwa, ikuti langkah-langkah berikut:
Node.js
Buat sebuah direktori baru bernama
helloGCS
dan ubah ke direktori tersebut:mkdir helloGCS cd helloGCS
Buat file
package.json
di direktorihelloGCS
untuk menentukan dependensi Node.js:Buat file
index.js
di direktorihelloGCS
dengan contoh Node.js berikut:
Python
Buat sebuah direktori baru bernama
helloGCS
dan ubah ke direktori tersebut:mkdir helloGCS cd helloGCS
Buat file
requirements.txt
di direktorihelloGCS
, untuk menentukan dependensi Python:Langkah ini akan menambahkan paket yang dibutuhkan oleh contoh.
Buat file
main.py
di direktorihelloGCS
dengan contoh Python berikut:
Men-deploy fungsi berbasis peristiwa
Deploy fungsi bernama helloworld-events
dengan menjalankan perintah berikut di direktori yang berisi kode contoh:
Node.js
gcloud beta run deploy helloworld-events \
--source . \
--function helloGCS \
--base-image nodejs20 \
--region us-central1
Python
gcloud beta run deploy helloworld-events \
--source . \
--function hello_gcs \
--base-image python312 \
--region us-central1
Setelah deployment selesai, Google Cloud CLI akan menampilkan URL tempat
layanan helloworld-events
berjalan.
Membuat pemicu Eventarc
Pemicu Eventarc mengirimkan peristiwa dari
bucket Cloud Storage ke layanan Cloud Run helloworld-events
Anda.
Buat pemicu yang memfilter peristiwa Cloud Storage:
gcloud eventarc triggers create TRIGGER_NAME \ --location=${REGION} \ --destination-run-service=helloworld-events \ --destination-run-region=${REGION} \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=PROJECT_ID-bucket" \ --service-account=PROJECT_NUMBER-compute@
Ganti:
- TRIGGER_NAME dengan nama untuk pemicu Anda.
- PROJECT_ID dengan ID project Google Cloud Anda.
- PROJECT_NUMBER dengan nomor project Google Cloud Anda.
Perhatikan bahwa saat membuat pemicu Eventarc untuk pertama kalinya dalam project Google Cloud, mungkin akan ada penundaan dalam penyediaan agen layanan Eventarc. Masalah ini biasanya dapat diatasi dengan mencoba membuat ulang pemicu. Untuk informasi selengkapnya, lihat Error izin ditolak.
Konfirmasi bahwa pemicu telah berhasil dibuat. Perhatikan bahwa meskipun pemicu Anda langsung dibuat, diperlukan waktu hingga dua menit agar pemicu berfungsi sepenuhnya.
gcloud eventarc triggers list --location=${REGION}
Output-nya akan mirip dengan berikut ini:
NAME: helloworld-events TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Cloud Run service: helloworld-events ACTIVE: Yes LOCATION: us-central1
Membuat dan melihat peristiwa
Upload file teks ke bucket Cloud Storage untuk membuat peristiwa yang dirutekan ke fungsi. Fungsi Cloud Run mencatat peristiwa ke dalam log layanan.
Upload file teks ke Cloud Storage untuk membuat peristiwa:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://PROJECT_ID-bucket/random.txt
Hasil upload ini akan membuat peristiwa dan fungsi Cloud Run akan mencatat pesan peristiwa tersebut ke dalam log.
Untuk melihat entri log:
Filter entri log dan tampilkan output dalam format JSON:
gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
Cari entri log yang mirip dengan:
[ { .... "resource": { "labels": { .... "location": "us-central1", ..... "service_name": "helloworld-events" }, }, "textPayload": "File: random.txt", ..... } ]
Log mungkin memerlukan waktu beberapa saat untuk ditampilkan. Jika Anda tidak melihatnya, periksa lagi setelah satu menit.
Setelah Anda melihat entri log, ini mengonfirmasi bahwa Anda telah berhasil men-deploy fungsi berbasis peristiwa yang dipicu saat file teks diupload ke Cloud Storage.
Pembersihan
Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang ada dan ingin mempertahankannya tanpa perubahan yang ditambahkan dalam tutorial ini, hapus resource yang dibuat untuk tutorial.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project:
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus referensi tutorial
Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini:
gcloud run services delete SERVICE_NAME
Dengan
SERVICE_NAME
adalah nama layanan pilihan Anda.Anda juga dapat menghapus layanan Cloud Run dari Google Cloud Console.
Hapus konfigurasi default gcloud CLI yang Anda tambahkan selama penyiapan tutorial.
Contoh:
gcloud config unset run/region
atau
gcloud config unset project
Hapus resource Google Cloud lain yang dibuat dalam tutorial ini:
- Hapus pemicu Eventarc:
Gantigcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAME
dengan nama pemicu Anda.
- Hapus pemicu Eventarc: