Alur kerja Anda mungkin perlu menunggu proses eksternal. Anda dapat menggunakan callback HTTP untuk menunggu layanan lain membuat permintaan ke endpoint callback; permintaan tersebut akan melanjutkan eksekusi alur kerja. Anda juga dapat menunggu penggunaan polling.
Tutorial ini menunjukkan cara menunggu peristiwa atau pesan Pub/Sub, bukan menggunakan polling, menggunakan callback HTTP dan pemicu Eventarc. Meskipun Anda dapat memicu alur kerja dengan peristiwa atau pesan Pub/Sub, sebaiknya hentikan eksekusi tersebut untuk menunggu peristiwa lain sebelum melanjutkan. Misalnya, peristiwa memicu alur kerja untuk memulai proses, tetapi alur kerja harus menunggu peristiwa lain yang menandakan bahwa proses tersebut sudah selesai. Anda dapat mengimplementasikannya dengan membuat satu alur kerja memanggil kembali alur kerja lainnya.
Tujuan
Dalam tutorial ini, hal berikut terjadi:
Alur kerja utama yang harus menunggu peristiwa di-deploy dan dijalankan. Karena harus menunggu peristiwa terjadi, detail callback-nya akan disimpan dalam database Firestore sehingga alur kerja sekunder dapat mengambil detailnya. Alur kerja utama kemudian menunggu panggilan HTTP.
Alur kerja sekunder dipicu oleh peristiwa dan mengambil detail callback dari database Firestore saat peristiwa dibuat. Alur kerja sekunder kemudian memanggil kembali alur kerja utama yang melanjutkan eksekusinya.
Berikut adalah gambaran umum dari seluruh proses:
Alur kerja utama:
- Alur kerja
callback-event-sample
membuat endpoint callback untuk dua sumber peristiwa: topik Pub/Sub dan bucket Cloud Storage. - Alur kerja ini menyimpan kedua endpoint callback di dokumen Firestore.
- Alur kerja ini akan menghentikan eksekusinya dan menunggu permintaan HTTP tiba di endpoint callback.
Peristiwa:
- Peristiwa terjadi: pesan dipublikasikan ke topik Pub/Sub dan file diupload ke bucket Cloud Storage.
Alur kerja sekunder:
- Eventarc merutekan peristiwa ke alur kerja
callback-event-listener
dan memicu eksekusinya. - Alur kerja ini mengambil URL endpoint callback yang sesuai dari dokumen Firestore.
- Alur kerja ini mengeksekusi callback ke endpoint yang sesuai dalam contoh alur kerja.
Alur kerja utama:
- Alur kerja
callback-event-sample
menerima peristiwa di endpoint callback dan melanjutkan eksekusinya. - Alur kerja ini menghapus URL callback dari dokumen Firestore dan menyelesaikan eksekusinya.
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
Anda dapat menjalankan perintah berikut di Konsol Google Cloud, atau dengan menggunakan Google Cloud CLI di terminal atau Cloud Shell.
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.
Konsol
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.
Aktifkan App Engine, Eventarc, Firestore, Pub/Sub, dan Workflows API.
Buat akun layanan untuk alur kerja Anda yang akan digunakan untuk autentikasi dengan layanan Google Cloud lainnya dan berikan peran yang sesuai:
Di Konsol Google Cloud, buka halaman Akun layanan.
Untuk membuka halaman Create service account, pilih project Anda.
Di kolom Nama akun layanan, masukkan nama. Konsol Google Cloud mengisi kolom Service account ID berdasarkan nama ini.
Di kolom Deskripsi akun layanan, masukkan sebuah deskripsi. Misalnya,
Service account for tutorial
.Klik Buat dan lanjutkan.
Pada daftar Select a role, filter untuk peran berikut yang akan diberikan ke akun layanan yang dikelola pengguna yang Anda buat di langkah sebelumnya:
- Cloud Datastore User: untuk mengakses Firestore dalam data mode Datastore (Datastore).
- Penerima Peristiwa Eventarc: untuk menerima peristiwa dari penyedia peristiwa.
- Logs Writer: untuk menulis log.
- Workflows Invoker: untuk menjalankan alur kerja dan mengelola eksekusi.
Untuk peran tambahan, klik
Tambahkan peran lain, lalu tambahkan setiap peran lainnya.Klik Lanjutkan.
Untuk menyelesaikan pembuatan akun, klik Selesai.
Untuk membuat pemicu Eventarc yang merutekan peristiwa dari Cloud Storage, berikan peran Pub/Sub Publisher ke agen layanan Cloud Storage. Biasanya, namanya adalah
service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com
. Anda dapat mengambil alamat email untuk agen layanan Cloud Storage.Di konsol Google Cloud, buka halaman IAM.
Di baris untuk agen layanan Cloud Storage, klik
Edit principal. (Jika agen layanan tidak tercantum, lanjutkan ke langkah berikutnya.) Panel Edit akses akan terbuka.- Klik addAdd another role, lalu telusuri peran Pub/Sub Publisher.
- Pilih peran.
- Klik Save.
Jika agen layanan tidak tercantum, klik
Berikan akses. Panel Berikan akses akan terbuka.- Di kolom New principals, masukkan alamat email untuk agen layanan.
- Dalam daftar Select a role, telusuri peran Pub/Sub Publisher.
- Pilih peran.
- Klik Save.
gcloud
Di konsol Google Cloud, aktifkan Cloud Shell.
Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.
Aktifkan App Engine, Eventarc, Firestore, Pub/Sub, dan Workflows API.
gcloud services enable \ appengine.googleapis.com \ eventarc.googleapis.com \ firestore.googleapis.com \ pubsub.googleapis.com \ workflows.googleapis.com
Buat akun layanan untuk alur kerja Anda yang akan digunakan untuk autentikasi dengan layanan Google Cloud lainnya dan berikan peran yang sesuai kepadanya.
Buat akun layanan:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Ganti
SERVICE_ACCOUNT_NAME
dengan nama untuk akun layanan.Berikan peran ke akun layanan yang dikelola pengguna yang Anda buat di langkah sebelumnya. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/datastore.user
: untuk mengakses data Firestore dalam mode Datastore (Datastore).roles/eventarc.eventReceiver
: untuk menerima peristiwa dari penyedia peristiwa.roles/logging.logWriter
: untuk menulis log.roles/workflows.invoker
: untuk menjalankan alur kerja dan mengelola eksekusi.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=ROLE
Ganti kode berikut:
PROJECT_ID
: project ID tempat Anda membuat akun layananROLE
: peran yang akan diberikan
Untuk membuat pemicu Eventarc yang merutekan peristiwa dari Cloud Storage, berikan peran Pub/Sub Publisher ke agen layanan Cloud Storage. Biasanya, namanya adalah
service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com
. Gunakangsutil kms serviceaccount
untuk mengambil agen layanan Cloud Storage terlebih dahulu.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
Membuat database Firestore
Firestore menyimpan data Anda dalam dokumen yang berisi kolom yang dipetakan terhadap nilai. Dokumen ini disimpan dalam koleksi, yang merupakan container untuk dokumen Anda dan dapat digunakan untuk mengatur data dan membuat kueri. Pelajari Firestore lebih lanjut.
Perhatikan bahwa setiap project Google Cloud dibatasi untuk satu database Firestore. Selesaikan langkah-langkah berikut jika Anda perlu membuat database baru.
Konsol
Di Konsol Google Cloud, buka halaman Get started di Firestore.
Klik Pilih Mode Native .
Untuk panduan memilih mode database dan perbandingan fitur demi fitur, lihat memilih antara Mode Native dan Mode Datastore.
Pada daftar Select a location, pilih nam5 (United States).
Lokasi ini berlaku untuk database Firestore dan aplikasi App Engine di project Google Cloud Anda. Setelah membuat database, Anda tidak dapat mengubah lokasinya.
Klik Buat database.
gcloud
Untuk membuat database Firestore, Anda harus terlebih dahulu membuat aplikasi App Engine, lalu menjalankan perintah gcloud firestore databases create
:
gcloud app create --region=us-central gcloud firestore databases create --region=us-central
Anda dapat mengabaikan peringatan us-central is not a valid Firestore location
.
App Engine dan Firestore mendukung lokasi yang sama, tetapi region us-central
App Engine (Iowa) dipetakan ke multi-region Firestore nam5
(Amerika Serikat).
Membuat topik Pub/Sub
Tutorial ini menggunakan Pub/Sub sebagai sumber peristiwa. Buat topik Pub/Sub sehingga Anda dapat memublikasikan pesan ke topik tersebut. Pelajari lebih lanjut cara membuat dan mengelola topik.
Konsol
Di konsol Google Cloud, buka halaman Topics Pub/Sub.
Klik
CREATE TOPIC.Di kolom Topic ID, masukkan
topic-callback
.Setujui default lainnya.
Klik Create topic.
gcloud
Untuk membuat topik, jalankan
perintah
gcloud pubsub topics create
:
gcloud pubsub topics create topic-callback
Membuat bucket Cloud Storage
Tutorial ini menggunakan Cloud Storage sebagai sumber peristiwa. Buat bucket Cloud Storage agar Anda dapat mengupload file ke dalamnya. Pelajari lebih lanjut cara membuat bucket penyimpanan.
Konsol
Di konsol Google Cloud, buka halaman Buckets Cloud Storage.
Klik
Buat.Untuk Name bucket, masukkan
PROJECT_ID-bucket-callback
.Project ID digunakan dalam alur kerja
callback-event-sample
untuk mengidentifikasi bucket.Klik Lanjutkan.
Untuk Location type, pilih Region, lalu pilih us-central1 (Iowa).
Setujui default lainnya.
Klik Create.
gcloud
Untuk membuat bucket, jalankan perintah gcloud storage buckets create
:
gcloud storage buckets create gs://PROJECT_ID-bucket-callback \ --location=us-central1
Project ID digunakan dalam alur kerja callback-event-sample
untuk mengidentifikasi bucket.
Setelah sumber peristiwa dibuat, Anda dapat men-deploy alur kerja penerima peristiwa.
Men-deploy alur kerja yang memproses peristiwa
Alur kerja callback-event-listener
dipicu saat pesan dipublikasikan ke topik Pub/Sub atau saat file diupload ke bucket Cloud Storage. Alur kerja ini menerima peristiwa, mengambil detail callback yang sesuai dari database Firestore, lalu mengirim permintaan HTTP ke endpoint callback.
Konsol
Di konsol Google Cloud, buka halaman Workflows:
Klik
Buat.Masukkan nama untuk alur kerja baru:
callback-event-listener
.Pada daftar Region, pilih us-central1.
Pilih Akun layanan yang telah dibuat sebelumnya.
Klik Next.
Di editor alur kerja, masukkan definisi berikut untuk alur kerja Anda:
Klik Deploy.
gcloud
Buat file kode sumber untuk alur kerja Anda:
touch callback-event-listener.yaml
Di editor teks, salin alur kerja berikut ke file kode sumber Anda:
Deploy alur kerja dengan memasukkan perintah berikut:
gcloud workflows deploy callback-event-listener \ --source=callback-event-listener.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Ganti
SERVICE_ACCOUNT_NAME
dengan nama akun layanan yang Anda buat sebelumnya.
Men-deploy alur kerja yang menunggu peristiwa
Alur kerja callback-event-sample
menyimpan detail callback-nya dalam database Firestore, menghentikan eksekusinya, lalu menunggu peristiwa tertentu terjadi.
Konsol
Di konsol Google Cloud, buka halaman Workflows:
Klik
Buat.Masukkan nama untuk alur kerja baru:
callback-event-sample
.Pada daftar Region, pilih us-central1.
Pilih Akun layanan yang telah dibuat sebelumnya.
Klik Next.
Di editor alur kerja, masukkan definisi berikut untuk alur kerja Anda:
Klik Deploy.
gcloud
Buat file kode sumber untuk alur kerja Anda:
touch callback-event-sample.yaml
Di editor teks, salin alur kerja berikut ke file kode sumber Anda:
Deploy alur kerja dengan memasukkan perintah berikut:
gcloud workflows deploy callback-event-sample \ --source=callback-event-sample.yaml \ --location=us-central1 \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Ganti
SERVICE_ACCOUNT_NAME
dengan nama akun layanan yang Anda buat sebelumnya.
Membuat pemicu Eventarc untuk merutekan peristiwa Pub/Sub
Pemicu Eventarc memungkinkan Anda merutekan peristiwa dengan menentukan filter untuk pemicu tersebut, termasuk sumber peristiwa, dan alur kerja target.
Buat pemicu Eventarc untuk menjalankan alur kerja callback-event-listener
sebagai hasil dari memublikasikan pesan ke topik Pub/Sub.
Pelajari lebih lanjut cara memicu alur kerja.
Konsol
Di konsol Google Cloud, buka halaman Eventarc.
Klik
Create trigger.Ketik Nama pemicu.
Misalnya,
trigger-pubsub-events-listener
.Dalam daftar Event provider, pilih Cloud Pub/Sub.
Dalam daftar Peristiwa, di bagian Kustom, pilih google.cloud.pubsub.topic.v1.messagePublished.
Pada daftar Select a Cloud Pub/Sub topic, pilih topik yang Anda buat sebelumnya.
Pada daftar Region, pilih us-central1 (Iowa).
Jika diminta, berikan peran
iam.serviceAccountTokenCreator
ke akun layanan Pub/Sub.Pilih Akun layanan yang telah dibuat sebelumnya.
Dalam daftar Tujuan acara, pilih Alur kerja.
Di daftar Select a Workflow, pilih alur kerja callback-event-pemroses.
Klik Create.
gcloud
Untuk membuat pemicu, jalankan
perintah
gcloud eventarc triggers create
:
gcloud eventarc triggers create trigger-pubsub-events-listener \ --location=us-central1 \ --destination-workflow=callback-event-listener \ --destination-workflow-location=us-central1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=topic-callback \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Peristiwa diubah dan diteruskan ke eksekusi alur kerja sebagai argumen runtime. Perhatikan bahwa perlu waktu hingga 2 menit agar pemicu baru menjadi aktif.
Membuat pemicu Eventarc untuk merutekan peristiwa Cloud Storage
Pemicu Eventarc memungkinkan Anda merutekan peristiwa dengan menentukan filter untuk pemicu tersebut, termasuk sumber peristiwa, dan alur kerja target.
Buat pemicu Eventarc untuk menjalankan alur kerja callback-event-listener
sebagai hasil dari mengupload file ke bucket Cloud Storage.
Pelajari lebih lanjut cara memicu alur kerja.
Konsol
Di konsol Google Cloud, buka halaman Eventarc.
Klik
Create trigger.Ketik Nama pemicu.
Misalnya,
trigger-storage-events-listener
.Dalam daftar Event provider, pilih Cloud Storage.
Dalam daftar Event, di bagian Direct, pilih google.cloud.storage.object.v1.finalized.
Dalam daftar Bucket, cari bucket yang sebelumnya Anda buat, lalu pilih bucket tersebut.
Dalam daftar Region, berdasarkan bucket Cloud Storage Anda, terima setelan default us-central1 (Iowa).
Jika diminta, berikan peran
iam.serviceAccountTokenCreator
ke akun layanan Pub/Sub.Pilih Akun layanan yang telah dibuat sebelumnya.
Dalam daftar Tujuan acara, pilih Alur kerja.
Di daftar Select a Workflow, pilih alur kerja callback-event-pemroses.
Klik Create.
gcloud
Untuk membuat pemicu, jalankan
perintah
gcloud eventarc triggers create
:
gcloud eventarc triggers create trigger-storage-events-listener \ --location=us-central1 \ --destination-workflow=callback-event-listener \ --destination-workflow-location=us-central1 \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=PROJECT_ID-bucket-callback" \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Peristiwa diubah dan diteruskan ke eksekusi alur kerja sebagai argumen runtime. Perhatikan bahwa perlu waktu hingga 2 menit agar pemicu baru menjadi aktif.
Menjalankan alur kerja utama
Mengeksekusi alur kerja akan menjalankan definisi alur kerja saat ini yang terkait dengan
alur kerja. Jalankan alur kerja callback-event-sample
. Ini adalah alur kerja utama
dan menunggu peristiwa tertentu terjadi, hanya melanjutkan eksekusi
saat alur kerja sekunder membuat permintaan callback yang sesuai.
Konsol
Di konsol Google Cloud, buka halaman Workflows.
Di halaman Workflows, klik alur kerja callback-event-sample untuk membuka halaman detailnya.
Di halaman Workflow Details, klik play_arrow Execute.
Klik Execute lagi.
Eksekusi alur kerja dimulai. Saat eksekusi berjalan, Anda akan melihat Status eksekusi
Running
dan entri log yang mirip dengan berikut ini:Started waiting 1hr for an event from source topic-callback
.
gcloud
Untuk menjalankan alur kerja, jalankan
perintah gcloud workflows run
:
gcloud workflows run callback-event-sample \ --location=us-central1
Eksekusi alur kerja dimulai. Saat eksekusi berjalan, Anda akan melihat status eksekusi yang mirip seperti berikut ini:
Waiting for execution [a848a164-268a-449c-b2fe-396f32f2ed66] to complete...working...
Membuat peristiwa dan memeriksa status eksekusi
Anda dapat mengonfirmasi bahwa hasilnya sesuai yang diharapkan dengan membuat peristiwa, melihat entri log, dan memeriksa status eksekusi alur kerja.
Publikasikan pesan
Publikasikan pesan ke topik Pub/Sub yang Anda buat sebelumnya.
Konsol
Di konsol Google Cloud, buka halaman Topics Pub/Sub.
Klik topic-callback.
Klik tab Pesan.
Klik Publikasikan pesan.
Di kolom Isi pesan, masukkan
Hello World
.Klik Publikasikan.
gcloud
Untuk memublikasikan pesan, gunakan perintah gcloud pubsub topics publish:
gcloud pubsub topics publish topic-callback \ --message="Hello World"
Mengupload objek
Upload file ke bucket Cloud Storage yang telah Anda buat sebelumnya.
Konsol
- Di Konsol Google Cloud, buka halaman Bucket Cloud Storage.
Klik nama bucket yang telah Anda buat sebelumnya.
Di tab Objects, lakukan salah satu hal berikut:
Tarik lalu lepas file yang diinginkan dari desktop atau file manager ke panel utama di Konsol Google Cloud.
Klik Upload files, pilih file yang ingin diupload, lalu klik Open.
gcloud
Untuk mengupload file, jalankan perintah
gcloud storage cp
:
gcloud storage cp OBJECT_LOCATION gs://PROJECT_ID-bucket-callback/
Ganti OBJECT_LOCATION
dengan jalur lokal ke objek Anda. Contoh, random.txt
.
Melihat entri log dan status eksekusi
Konfirmasi bahwa alur kerja callback-event-sample
berhasil diselesaikan.
Konsol
Di konsol Google Cloud, buka halaman Workflows.
Di halaman Workflows, klik alur kerja callback-event-sample untuk membuka halaman detailnya.
Di halaman Workflow Details, untuk mengambil detail eksekusi tertentu, klik ID eksekusi yang sesuai.
Execution state harus Succeeded dan, di panel Output, Anda akan melihat peristiwa Pub/Sub dan Cloud Storage yang diterima.
gcloud
Filter entri log dan tampilkan output dalam format JSON:
gcloud logging read "resource.type=workflows.googleapis.com/Workflow AND textPayload:calling OR textPayload:waiting" \ --format=json
Cari entri log yang mirip dengan:
"textPayload": "Stopped waiting for an event from source..." "textPayload": "Calling back url https://workflowexecutions.googleapis.com/v1/projects/..." "textPayload": "Started waiting 1hr for an event from source..."
Periksa status upaya eksekusi terakhir:
gcloud workflows executions wait-last
Hasilnya akan terlihat seperti berikut:
Using cached execution name: projects/1085953646031/locations/us-central1/workflows/callback-event-sample/executions/79929e4e-82c1-4da1-b068-f828034c01b7 Waiting for execution [79929e4e-82c1-4da1-b068-f828034c01b7] to complete...done. [...] state: SUCCEEDED
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.