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 menggunakan polling.
Alih-alih menggunakan polling, tutorial ini menunjukkan cara menunggu peristiwa atau pesan Pub/Sub menggunakan callback HTTP dan pemicu Eventarc. Meskipun Anda dapat memicu alur kerja dengan peristiwa atau pesan Pub/Sub, Anda mungkin ingin menghentikan 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 selesai. Anda dapat menerapkannya dengan membuat satu alur kerja memanggil kembali alur kerja lain.
Tujuan
Dalam tutorial ini, hal berikut akan terjadi:
Alur kerja utama yang perlu menunggu peristiwa di-deploy dan dieksekusi. Karena harus menunggu peristiwa terjadi, alur kerja ini menyimpan detail callback-nya di database Firestore sehingga alur kerja sekunder dapat mengambil detail tersebut. 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 eksekusi.
Berikut adalah ringkasan seluruh prosesnya:
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 dalam dokumen Firestore.
- Alur kerja ini 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 akan menggunakan komponen Google Cloud yang dapat ditagih berikut: Google Cloud:
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 .
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda. Pelajari cara memeriksa apakah penagihan diaktifkan pada 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 Service Accounts.
Untuk membuka halaman Create service account, pilih project Anda.
Di kolom Nama akun layanan, masukkan nama. Konsol Google Cloud akan mengisi kolom ID akun layanan berdasarkan nama ini.
Di kolom Deskripsi akun layanan, masukkan sebuah deskripsi. Contoh,
Service account for tutorial
.Klik Buat dan lanjutkan.
Di daftar Select a role, filter peran berikut untuk diberikan ke akun layanan yang dikelola pengguna yang Anda buat pada langkah sebelumnya:
- Pengguna Cloud Datastore: untuk mengakses data Firestore dalam mode Datastore (Datastore).
- Eventarc Event Receiver: 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 tambahan.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, ini adalah
service-PROJECT_NUMBER@gs-project-accounts.
. 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 addTambahkan peran lain, lalu telusuri peran Pub/Sub Publisher.
- Pilih peran.
- Klik Simpan.
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 Simpan.
gcloud
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda. Pelajari cara memeriksa apakah penagihan diaktifkan pada project.
Aktifkan API App Engine, Eventarc, Firestore, Pub/Sub, dan Workflows.
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.
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. \ --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, ini adalah
service-PROJECT_NUMBER@gs-project-accounts.
. Gunakangcloud storage service-agent
untuk mengambil agen layanan Cloud Storage terlebih dahulu.SERVICE_ACCOUNT_STORAGE="$(gcloud storage service-agent --project=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 pemetaan kolom ke nilai. Dokumen ini disimpan dalam koleksi, yang merupakan penampung untuk dokumen Anda, yang 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 Firestore Mulai.
Klik Pilih Mode Native .
Untuk panduan memilih mode database dan perbandingan fitur-per-fitur, lihat memilih antara Mode Native dan Mode Datastore.
Di daftar Select a location, pilih nam5 (United States).
Lokasi ini berlaku untuk database Firestore dan aplikasi App Engine di project Google Cloud . Setelah membuat database, Anda tidak dapat mengubah lokasinya.
Klik Buat database.
gcloud
Untuk membuat database Firestore, Anda harus membuat aplikasi App Engine terlebih dahulu, 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 App Engine us-central
(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 agar Anda dapat memublikasikan pesan ke topik tersebut. Pelajari lebih lanjut cara membuat dan mengelola topik.
Konsol
Di konsol Google Cloud , buka halaman Topik Pub/Sub.
Klik
CREATE TOPIC.Di kolom Topic ID, masukkan
topic-callback
.Terima setelan 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 Cloud Storage Bucket.
Klik
Buat.Untuk Name bucket Anda, 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).
Terima setelan 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 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
.Dalam daftar Region, pilih us-central1.
Pilih Service account yang sebelumnya Anda buat.
Klik Berikutnya.
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.
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 di 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
.Dalam daftar Region, pilih us-central1.
Pilih Service account yang sebelumnya Anda buat.
Klik Berikutnya.
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.
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, termasuk sumber peristiwa, dan alur kerja target.
Buat pemicu Eventarc untuk menjalankan alur kerja callback-event-listener
sebagai hasil dari publikasi 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 Penyedia peristiwa, pilih Cloud Pub/Sub.
Dalam daftar Peristiwa, di bagian Kustom, pilih google.cloud.pubsub.topic.v1.messagePublished.
Di daftar Select a Cloud Pub/Sub topic, pilih topik yang sebelumnya Anda buat.
Di daftar Region, pilih us-central1 (Iowa).
Jika diminta, berikan peran
iam.serviceAccountTokenCreator
ke akun layanan Pub/Sub.Pilih Service account yang sebelumnya Anda buat.
Dalam daftar Tujuan peristiwa, pilih Alur kerja.
Dalam daftar Select a workflow, pilih alur kerja callback-event-listener.
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.
Peristiwa diubah dan diteruskan ke eksekusi alur kerja sebagai argumen runtime. Perhatikan bahwa diperlukan 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, 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
.Di daftar Penyedia peristiwa, pilih Cloud Storage.
Dalam daftar Peristiwa, pada bagian Langsung, pilih google.cloud.storage.object.v1.finalized.
Dalam daftar Bucket, jelajahi bucket yang telah Anda buat sebelumnya dan pilih.
Dalam daftar Region, berdasarkan bucket Cloud Storage Anda, terima default us-central1 (Iowa).
Jika diminta, berikan peran
iam.serviceAccountTokenCreator
ke akun layanan Pub/Sub.Pilih Service account yang sebelumnya Anda buat.
Dalam daftar Tujuan peristiwa, pilih Alur kerja.
Dalam daftar Select a workflow, pilih alur kerja callback-event-listener.
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.
Peristiwa diubah dan diteruskan ke eksekusi alur kerja sebagai argumen runtime. Perhatikan bahwa diperlukan 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 eksekusinya
saat alur kerja sekunder membuat permintaan callback yang sesuai.
Konsol
Di konsol Google Cloud , buka halaman Workflows.
Di halaman Alur kerja, 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: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 dengan berikut ini:
Waiting for execution [a848a164-268a-449c-b2fe-396f32f2ed66] to complete...working...
Membuat peristiwa dan memeriksa status eksekusi
Anda dapat mengonfirmasi bahwa hasilnya seperti yang diharapkan dengan membuat peristiwa, melihat entri log, dan memeriksa status eksekusi alur kerja.
Publikasikan pesan
Publikasikan pesan ke topik Pub/Sub yang sebelumnya Anda buat.
Konsol
Di konsol Google Cloud , buka halaman Topik Pub/Sub.
Klik callback-topik.
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"
Mengunggah 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 pengelola file ke panel utama di konsol Google Cloud .
Klik Upload file, pilih file yang ingin diupload, lalu klik Buka.
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 Alur kerja, klik alur kerja callback-event-sample untuk membuka halaman detailnya.
Di halaman Workflow Details, untuk mengambil detail eksekusi tertentu, klik ID eksekusi yang sesuai.
Status eksekusi harus Berhasil 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 mirip dengan berikut ini:
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:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.