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.
- 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.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
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.
-
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
- Menginstal Google Cloud CLI.
-
Untuk initialize gcloud CLI, jalankan perintah berikut:
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.
-
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
- 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
- Setel 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 guna menyelesaikan tutorial ini, minta administrator untuk memberi Anda peran IAM berikut pada project Anda:
-
Editor Cloud Build (
roles/cloudbuild.builds.editor
) -
Admin Cloud Run (
roles/run.admin
) -
Cloud Run Source Developer (
roles/run.sourceDeveloper
) -
Admin Eventarc (
roles/eventarc.admin
) -
Aksesor Tampilan Log (
roles/logging.viewAccessor
) -
Project IAM Admin (
roles/resourcemanager.projectIamAdmin
) -
Admin Akun Layanan (
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 perintah peran atau setelan standar lainnya peran tertentu.
-
Editor Cloud Build (
Perhatikan Compute Engine akun layanan default seperti yang akan Anda lampirkan ke pemicu Eventarc untuk mewakili 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, kami sangat menyarankan membuat akun layanan baru dan memberikan satu atau beberapa peran IAM yang berisi izin minimum yang diperlukan dan mengikuti 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 izin Pub/Sub
Peran penayang (
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 bulan April
8 tahun 2021, untuk mendukung permintaan push Pub/Sub yang diautentikasi, berikan
Layanan
Peran 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
dalam direktorihelloGCS
dengan perintah berikut Contoh Node.js:
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
dalam direktorihelloGCS
dengan perintah berikut Contoh Python:
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
sedang berjalan.
Membuat pemicu Eventarc
Pemicu Eventarc mengirimkan peristiwa dari
Bucket Cloud Storage ke Cloud Run helloworld-events
Anda
layanan.
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
Mengupload file teks ke bucket Cloud Storage untuk membuat peristiwa yang dirutekan ke fungsi. Tujuan Fungsi Cloud Run mencatat peristiwa tersebut 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 melihat entri log, Anda akan 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 sudah ada dan ingin menyimpannya tanpa perubahan yang ditambahkan dalam tutorial ini, menghapus referensi 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.
- Hapus pemicu Eventarc: