Memicu Cloud Run dengan peristiwa Eventarc

1. Pengantar

894762ebb681671c.png

Dengan Cloud Run, Anda dapat menjalankan container stateless di lingkungan yang terkelola sepenuhnya. Layanan ini dibangun dari Knative open source, yang memungkinkan Anda memilih untuk menjalankan container secara terkelola sepenuhnya dengan Cloud Run, atau di cluster Google Kubernetes Engine dengan Cloud Run for Anthos.

cb762f29e9183a3f.png

Eventarc memudahkan untuk menghubungkan berbagai layanan (Cloud Run, Cloud Functions, Workfklows) dengan peristiwa dari berbagai sumber. Solusi ini memungkinkan Anda membangun arsitektur berbasis peristiwa tempat microservice dikaitkan dan didistribusikan secara longgar. Layanan ini juga menangani penyerapan, pengiriman, keamanan, otorisasi, dan penanganan error peristiwa untuk Anda sehingga meningkatkan ketangkasan developer dan ketahanan aplikasi.

Dalam codelab ini, Anda akan mempelajari Eventarc. Lebih khususnya, Anda akan memproses peristiwa dari Pub/Sub, Cloud Storage, dan Cloud Audit Logs dengan Eventarc dan meneruskannya ke layanan Cloud Run.

Yang akan Anda pelajari

  • Visi Eventarc
  • Menemukan peristiwa di Eventarc
  • Membuat sink Cloud Run
  • Membuat pemicu untuk Pub/Sub
  • Membuat pemicu untuk Cloud Storage
  • Membuat pemicu untuk Cloud Audit Logs
  • Menjelajahi UI Eventarc

2. Visi Eventarc

Eventarc bertujuan untuk mengirimkan peristiwa dari berbagai sumber peristiwa Google, Google Cloud, dan pihak ketiga ke tujuan peristiwa Google Cloud.

59b147dc030b2b0b.pngS

Sumber Google Cloud

Sumber peristiwa yang merupakan produk milik Google Cloud

Sumber Google

Sumber peristiwa yang merupakan produk milik Google seperti Gmail, Hangouts, Pengelolaan Android, dan lainnya

Sumber kustom

Sumber peristiwa yang bukan produk milik Google dan dibuat oleh pengguna akhir itu sendiri

Sumber pihak ketiga

Sumber peristiwa yang tidak dimiliki Google atau diproduksi pelanggan. Hal ini mencakup sumber peristiwa populer seperti Check Point CloudGuard, Datadog, ForgeRock, Lacework, dll. yang dimiliki dan dikelola oleh penyedia dan partner pihak ketiga.

Peristiwa dinormalkan ke format CloudEvents v1.0 untuk interoperabilitas lintas layanan. CloudEvents adalah spesifikasi terbuka yang tidak terikat dengan vendor yang mendeskripsikan data peristiwa dalam format umum, sehingga memungkinkan interoperabilitas di seluruh layanan, platform, dan sistem.

3. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nama project adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API, dan Anda dapat memperbaruinya kapan saja.
  • Project ID harus unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis menghasilkan string unik; biasanya Anda tidak peduli dengan kata-katanya. Pada sebagian besar codelab, Anda harus mereferensikan Project ID (dan biasanya diidentifikasi sebagai PROJECT_ID). Jadi, jika Anda tidak menyukainya, buat ID acak lain, atau, Anda dapat mencoba sendiri dan melihat apakah tersedia. Kemudian file akan "dibekukan" setelah project dibuat.
  • Ada nilai ketiga, Nomor Project yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan API/resource Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Untuk menonaktifkan resource agar tidak menimbulkan penagihan di luar tutorial ini, ikuti petunjuk "pembersihan" yang ada di akhir codelab. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.

Dari GCP Console, klik ikon Cloud Shell di toolbar kanan atas:

55efc1aaa7a4d3ad.png

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:

7ffe5cbb04455448.png

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda di lab ini dapat dilakukan hanya dengan browser.

Sebelum memulai

Di dalam Cloud Shell, pastikan project ID Anda sudah disiapkan:

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

4. Men-deploy layanan Cloud Run

Deploy layanan Cloud Run untuk menerima peristiwa. Anda akan men-deploy container Hello Cloud Run yang mencatat konten CloudEvents.

Pertama, aktifkan layanan yang diperlukan untuk Cloud Run:

gcloud services enable run.googleapis.com

Deploy container hello ke Cloud Run:

REGION=us-central1
SERVICE_NAME=hello

gcloud run deploy $SERVICE_NAME \
  --allow-unauthenticated \
  --image=gcr.io/cloudrun/hello \
  --region=$REGION

Jika berhasil, command line akan menampilkan URL layanan. Anda dapat membuka URL layanan di jendela browser apa pun untuk memeriksa kembali bahwa layanan kini telah di-deploy.

5. Penemuan Peristiwa

Sebelum membuat pemicu di Eventarc, Anda dapat mencari tahu apa itu sumber peristiwa, jenis peristiwa yang dapat dimunculkan, dan cara mengonfigurasi pemicu untuk memakainya.

Untuk melihat daftar berbagai jenis peristiwa:

gcloud beta eventarc attributes types list

NAME                                           DESCRIPTION
google.cloud.audit.log.v1.written              Cloud Audit Log written
google.cloud.pubsub.topic.v1.messagePublished  Cloud Pub/Sub message published
google.cloud.storage.object.v1.archived         Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted.
google.cloud.storage.object.v1.deleted          Cloud Storage: Sent when an object has been permanently deleted.
google.cloud.storage.object.v1.finalized        Cloud Storage: Sent when a new object (or a new generation of an existing object).
google.cloud.storage.object.v1.metadataUpdated  Cloud Storage: Sent when the metadata of an existing object changes.

Untuk mendapatkan informasi selengkapnya tentang setiap jenis peristiwa:

gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written

attributes: type,serviceName,methodName,resourceName
description: 'Cloud Audit Log: Sent when a log is written.'
name: google.cloud.audit.log.v1.written

Untuk melihat daftar layanan yang memunculkan jenis peristiwa tertentu:

gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written

SERVICE_NAME                                DISPLAY_NAME
accessapproval.googleapis.com               Access Approval
accesscontextmanager.googleapis.com         Access Context Manager
admin.googleapis.com                        Google Workspace Admin
aiplatform.googleapis.com                   AI Platform (under Vertex AI)
apigee.googleapis.com                       Apigee
apigeeconnect.googleapis.com                Apigee Connect
...
workflows.googleapis.com                    Workflows

Untuk melihat daftar nama metode (sub-peristiwa) yang dapat dikeluarkan oleh setiap layanan:

gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com

METHOD_NAME
google.cloud.workflows.v1.Workflows.CreateWorkflow
google.cloud.workflows.v1.Workflows.DeleteWorkflow
google.cloud.workflows.v1.Workflows.GetWorkflow
google.cloud.workflows.v1.Workflows.ListWorkflows
google.cloud.workflows.v1.Workflows.UpdateWorkflow
google.cloud.workflows.v1beta.Workflows.CreateWorkflow
google.cloud.workflows.v1beta.Workflows.DeleteWorkflow
google.cloud.workflows.v1beta.Workflows.GetWorkflow
google.cloud.workflows.v1beta.Workflows.ListWorkflows
google.cloud.workflows.v1beta.Workflows.UpdateWorkflow

6. Membuat pemicu Pub/Sub

Salah satu cara untuk menerima peristiwa adalah melalui Cloud Pub/Sub. Semua aplikasi dapat memublikasikan pesan ke Pub/Sub dan pesan tersebut dapat dikirim ke Cloud Run melalui Eventarc.

Penyiapan

Sebelum membuat pemicu, aktifkan layanan yang diperlukan untuk Eventarc:

gcloud services enable eventarc.googleapis.com

Anda juga memerlukan akun layanan yang dapat digunakan oleh pemicu. Buat akun layanan:

SERVICE_ACCOUNT=eventarc-trigger-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT

Buat

Buat pemicu untuk memfilter peristiwa yang dipublikasikan ke topik Pub/Sub ke layanan Cloud Run yang di-deploy:

TRIGGER_NAME=trigger-pubsub

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Tes

Pemicu Pub/Sub membuat topik di balik sampul. Mari kita cari dan tetapkan ke sebuah variabel:

TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')

Gunakan gcloud untuk memublikasikan pesan ke topik:

gcloud pubsub topics publish $TOPIC_ID --message="Hello World"

Layanan Cloud Run mencatat isi pesan masuk. Anda dapat melihatnya di bagian Logs pada instance Cloud Run Anda:

69e0177e04a0d1af.pngS

Membuat dengan topik Pub/Sub yang ada

Secara default, saat Anda membuat pemicu Pub/Sub, Eventarc akan membuat topik di balik layar untuk Anda gunakan sebagai topik transportasi antara aplikasi Anda dan layanan Cloud Run. Hal ini berguna untuk membuat pemicu yang didukung Pub/Sub dengan mudah dan cepat, tetapi terkadang Anda mungkin ingin menggunakan topik yang sudah ada. Eventarc memungkinkan Anda menentukan topik Pub/Sub yang ada dalam project yang sama dengan flag gcloud --transport-topic.

Untuk melihat cara kerjanya, buat topik Pub/Sub untuk digunakan sebagai topik transportasi:

TOPIC_ID=eventarc-topic

gcloud pubsub topics create $TOPIC_ID

Buat pemicu:

TRIGGER_NAME=trigger-pubsub-existing

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Anda dapat menguji pemicu dengan mengirim pesan ke topik:

gcloud pubsub topics publish $TOPIC_ID --message="Hello again"

7. Membuat pemicu Cloud Storage

Pada langkah ini, Anda akan membuat pemicu untuk memproses peristiwa dari Cloud Storage.

Penyiapan

Pertama, buat bucket untuk menerima peristiwa dari:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

gsutil mb -l $REGION gs://$BUCKET_NAME

Berikan peran eventarc.eventReceiver agar akun layanan dapat digunakan dalam pemicu Cloud Storage:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/eventarc.eventReceiver \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Anda juga perlu menambahkan peran pubsub.publisher ke akun layanan Cloud Storage untuk pemicu Cloud Storage:

SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID)

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
    --role roles/pubsub.publisher

Buat

Buat pemicu untuk mengarahkan peristiwa pembuatan file baru dari bucket ke layanan Anda:

TRIGGER_NAME=trigger-storage

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=$BUCKET_NAME" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Tes

Buat daftar semua pemicu untuk mengonfirmasi bahwa pemicu berhasil dibuat:

gcloud eventarc triggers list

Upload file ke bucket Cloud Storage:

echo "Hello World" > random.txt
gsutil cp random.txt gs://$BUCKET_NAME/random.txt

Jika Anda memeriksa log layanan Cloud Run di Cloud Console, Anda akan melihat peristiwa yang diterima:

904cfc93bb8e8df1.pngS

8. Membuat pemicu Cloud Audit Logs

Meskipun pemicu Cloud Storage adalah cara yang lebih baik untuk memproses peristiwa Cloud Storage, pada langkah ini Anda membuat pemicu Cloud Audit Log untuk melakukan hal yang sama.

Penyiapan

Untuk menerima peristiwa dari layanan, Anda harus mengaktifkan Cloud Audit Logs. Dari Cloud Console, pilih IAM & Admin dan Audit Logs dari menu sebelah kiri atas. Dalam daftar layanan, centang Google Cloud Storage:

3c654597faed237c.pngS

Di sisi kanan, pastikan Admin, Read, dan Write dipilih, lalu klik Save:

1deb3ad78f11dd5f.pngS

Buat

Buat pemicu untuk mengarahkan peristiwa pembuatan file baru dari bucket ke layanan Anda:

TRIGGER_NAME=trigger-auditlog-storage

gcloud eventarc triggers create $TRIGGER_NAME\
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.audit.log.v1.written" \
  --event-filters="serviceName=storage.googleapis.com" \
  --event-filters="methodName=storage.objects.create" \
  --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Tes

Pemicu Log Audit memerlukan sedikit waktu untuk melakukan inisialisasi. Anda dapat memeriksa apakah pemicu dibuat dengan mencantumkan semua pemicu:

gcloud eventarc triggers list

Anda akan melihat bahwa kolom ACTIVE adalah Yes:

NAME                          TYPE                                       DESTINATION               ACTIVE
trigger-auditlog-storage  google.cloud.audit.log.v1.written              Cloud Run service: hello  Yes

Upload file yang sama ke bucket Cloud Storage seperti yang Anda lakukan sebelumnya:

gsutil cp random.txt gs://$BUCKET_NAME/random.txt

Jika Anda memeriksa log layanan Cloud Run di Cloud Console, Anda akan melihat peristiwa yang diterima:

7be7859bcc8976f8.pngS

9. Menjelajahi UI Eventarc

Pada langkah ini, Anda akan menjelajahi UI Eventarc di Konsol Google Cloud. Di UI Eventarc, Anda bisa mendapatkan ringkasan tentang semua pemicu, mengedit dan menghapusnya, serta membuat pemicu baru dari Konsol Google Cloud.

Buka bagian Eventarc di Google Cloud:

81e139f17e0d29bf.pngS

Anda akan melihat daftar pemicu yang Anda buat sebelumnya:

3240c7c830398718.png

Jika mengklik pemicu, Anda dapat melihat detail pemicu, mengedit, atau menghapusnya:

b4d8bbc6601a8b9e.png

Anda juga dapat membuat pemicu baru dengan memilih Create trigger dan mengisi detail pemicu:

3ee290ec72f130d5.pngS

10. Selamat!

Selamat, Anda telah menyelesaikan codelab.

Yang telah kita bahas

  • Visi Eventarc
  • Menemukan peristiwa di Eventarc
  • Membuat sink Cloud Run
  • Membuat pemicu untuk Pub/Sub
  • Membuat pemicu untuk Cloud Storage
  • Membuat pemicu untuk Cloud Audit Logs
  • Menjelajahi UI Eventarc