Anda dapat menggunakan Workflows untuk mengeksekusi tugas Cloud Run sebagai bagian dari alur kerja yang melakukan pemrosesan data yang lebih kompleks atau yang mengorkestrasi sistem tugas yang ada.
Tutorial ini menunjukkan cara menggunakan Workflows untuk menjalankan tugas Cloud Run yang memproses data peristiwa yang disimpan di bucket Cloud Storage. Menyimpan payload peristiwa di bucket Cloud Storage memungkinkan Anda mengenkripsi data menggunakan kunci enkripsi yang dikelola pelanggan, yang tidak mungkin dilakukan jika Anda meneruskan data peristiwa sebagai variabel lingkungan ke tugas Cloud Run.
Diagram berikut memberikan ringkasan tingkat tinggi:
Membuat tugas Cloud Run
Tutorial ini menggunakan kode contoh yang dapat Anda temukan di GitHub. Skrip deployment membangun image container untuk membuat tugas Cloud Run. Skrip juga membuat bucket Cloud Storage. Tugas Cloud Run membaca data peristiwa yang disimpan di bucket Cloud Storage, lalu mencetak data peristiwa tersebut.
Jika Anda menjalankan skrip deployment di Cloud Shell, dan jika akun layanan default Compute Engine tidak memiliki peran Editor, berikan peran berikut di project ke akun layanan default Compute Engine. (Jika tidak, Anda dapat melewati langkah ini dan melanjutkan dengan meng-clone repositori aplikasi contoh pada langkah berikutnya.)
Berikan peran Penulis Artifact Registry (
roles/artifactregistry.writer
):gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/artifactregistry.writer
Ganti
PROJECT_NUMBER
dengan Google Cloud nomor project Anda. Anda dapat menemukan nomor project di halaman Selamat Datang di konsol Google Cloud atau dengan menjalankan perintah berikut:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Berikan peran Storage Object User (
roles/storage.objectUser
):gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/storage.objectUser
Beri peran Logging Logs Writer (
roles/logging.logWriter
):gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/logging.logWriter
Dapatkan kode contoh dengan meng-clone repositori aplikasi contoh ke komputer lokal Anda:
git clone https://github.com/GoogleCloudPlatform/workflows-demos.git
Atau, Anda dapat mendownload contoh sebagai file ZIP
Ubah ke direktori yang berisi kode contoh:
cd workflows-demos/cloud-run-jobs-payload-gcs/message-payload-job
Buat tugas Cloud Run dengan menjalankan skrip deployment:
./deploy-job.sh
Skrip ini membuat bucket Cloud Storage dengan nama
message-payload-PROJECT_ID
, dengan
PROJECT_ID
adalah ID project Google Cloud Anda.
Tugas Cloud Run bernama message-payload-job
juga dibuat.
Men-deploy alur kerja yang menjalankan tugas Cloud Run
Tentukan dan deploy alur kerja yang menjalankan tugas Cloud Run yang baru saja Anda buat. Definisi alur kerja terdiri dari serangkaian langkah yang dijelaskan menggunakan sintaksis Workflows.
Alur kerja menerima peristiwa, menyimpan data peristiwa ke bucket Cloud Storage, lalu menjalankan tugas Cloud Run untuk memproses data peristiwa.
Konsol
Di konsol Google Cloud , buka halaman Workflows:
Klik
Buat.Masukkan nama untuk alur kerja baru, seperti
message-payload-workflow
.Pilih region yang sesuai; misalnya,
us-central1
.Di kolom Service account, pilih akun layanan yang Anda buat sebelumnya.
Akun layanan berfungsi sebagai identitas alur kerja. Anda seharusnya telah memberikan peran berikut ke akun layanan:
- Admin Cloud Run: untuk menjalankan tugas Cloud Run
- Logs Writer: untuk menulis entri log
- Storage Object Creator: untuk membuat objek di Cloud Storage
Klik Berikutnya.
Dalam editor alur kerja, masukkan definisi berikut untuk alur kerja Anda:
Klik Deploy.
gcloud
Buat file kode sumber untuk alur kerja Anda:
touch message-payload-workflow.yaml
Salin definisi alur kerja berikut ke
message-payload-workflow.yaml
:Deploy alur kerja dengan memasukkan perintah berikut:
gcloud workflows deploy message-payload-workflow \ --location=us-central1 \ --source=message-payload-workflow.yaml \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Ganti kode berikut:
SERVICE_ACCOUNT_NAME
: nama akun layanan yang Anda buat sebelumnyaPROJECT_ID
: ID project Google Cloud Anda
Akun layanan berfungsi sebagai identitas alur kerja. Anda seharusnya telah memberikan peran berikut ke akun layanan:
roles/logging.logWriter
: untuk menulis entri logroles/run.admin
: untuk menjalankan tugas Cloud Runroles/storage.objectCreator
: untuk membuat objek di Cloud Storage
Alur kerja ini akan melakukan hal berikut:
init
—Menerima peristiwa sebagai argumen dan menetapkan variabel yang diperlukan.Langkah
log_event
—Membuat entri log di Cloud Logging menggunakan fungsi, sys.log.Langkah
write_payload_to_gcs
—Membuat permintaan HTTPPOST
dan menulis data payload peristiwa ke file bucket Cloud Storage.langkah
run_job_to_process_payload
—Menggunakan metode konektor Cloud Run Admin API,googleapis.run.v1.namespaces.jobs.run
, untuk mengeksekusi tugas. Bucket Cloud Storage dan nama file data diteruskan sebagai variabel penggantian dari alur kerja ke tugas.Langkah
finish
—Menampilkan informasi tentang eksekusi tugas sebagai hasil alur kerja.
Membuat topik Pub/Sub
Buat topik Pub/Sub agar Anda dapat memublikasikan pesan ke topik tersebut. Peristiwa Pub/Sub digunakan untuk mendemonstrasikan cara merutekan peristiwa menggunakan Workflows dan menyimpan peristiwa ke Cloud Storage sehingga tugas Cloud Run dapat memproses data peristiwa.
Konsol
Di konsol Google Cloud , buka halaman Topics.
Klik
CREATE TOPIC.Di kolom ID Topik, masukkan ID untuk topik, seperti
message-payload-topic
.Tetapkan opsi Tambahkan langganan default.
Jangan pilih opsi lainnya.
Klik Buat.
gcloud
Untuk membuat topik dengan ID message-payload-topic
, jalankan perintah
gcloud pubsub topics create
:
gcloud pubsub topics create message-payload-topic
Membuat pemicu Eventarc untuk merutekan peristiwa ke alur kerja
Untuk menjalankan alur kerja dan tugas Cloud Run secara otomatis, buat pemicu Eventarc yang merespons peristiwa Pub/Sub, dan yang merutekan peristiwa ke alur kerja. Setiap kali pesan ditulis ke topik Pub/Sub, peristiwa memicu eksekusi alur kerja.
Konsol
Di konsol Google Cloud , buka halaman Workflows:
Klik nama alur kerja Anda, seperti
message-payload-workflow
.Di halaman Detail alur kerja, klik
Edit.Di halaman Edit alur kerja, di bagian Pemicu, klik Tambahkan pemicu baru > Eventarc.
Panel Pemicu Eventarc akan terbuka.
Di kolom Nama pemicu, masukkan nama untuk pemicu, seperti
message-payload-trigger
.Dari daftar Event provider, pilih Cloud Pub/Sub.
Dari daftar Peristiwa, pilih google.cloud.pubsub.topic.v1.messagePublished.
Dari daftar Select a Cloud Pub/Sub topic, pilih topik Pub/Sub yang Anda buat sebelumnya.
Di kolom Service account, pilih akun layanan yang Anda buat sebelumnya.
Akun layanan berfungsi sebagai identitas pemicu. Anda seharusnya telah memberikan peran berikut ke akun layanan:
- Eventarc Event Receiver: untuk menerima peristiwa
- Workflows Invoker: untuk menjalankan alur kerja
Klik Save trigger.
Pemicu Eventarc kini muncul di bagian Pemicu di halaman Edit alur kerja.
Klik Berikutnya.
Klik Deploy.
gcloud
Buat pemicu Eventarc dengan menjalankan perintah berikut:
gcloud eventarc triggers create message-payload-trigger \ --location=us-central1 \ --destination-workflow=message-payload-workflow \ --destination-workflow-location=us-central1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_ID/topics/message-payload-topic \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Ganti kode berikut:
PROJECT_ID
: ID Google Cloud project AndaSERVICE_ACCOUNT_NAME
: nama akun layanan yang Anda buat sebelumnya.
Akun layanan berfungsi sebagai identitas pemicu. Anda seharusnya telah memberikan peran berikut ke akun layanan:
roles/eventarc.eventReceiver
: untuk menerima peristiwaroles/workflows.invoker
: untuk menjalankan alur kerja
Memicu alur kerja
Uji sistem end-to-end dengan memublikasikan pesan ke topik Pub/Sub dan membuat peristiwa. Untuk mengetahui informasi selengkapnya, lihat memicu alur kerja dengan peristiwa atau pesan Pub/Sub.
Publikasikan pesan ke topik Pub/Sub untuk membuat peristiwa:
gcloud pubsub topics publish message-payload-topic --message="Hello World"
Peristiwa dirutekan ke alur kerja yang mencatat pesan peristiwa, menyimpan data peristiwa ke bucket Cloud Storage, dan menjalankan tugas Cloud Run untuk memproses data yang disimpan di Cloud Storage. Proses ini dapat memakan waktu satu menit.
Pastikan tugas Cloud Run berjalan seperti yang diharapkan dengan melihat eksekusi tugas:
gcloud run jobs executions list --job=message-payload-job
Anda akan melihat eksekusi tugas baru di output.
Untuk melihat entri log terkait peristiwa yang dibuat dengan memicu alur kerja, jalankan perintah berikut:
gcloud logging read "resource.type=cloud_run_job AND textPayload:Payload"
Cari entri log yang mirip dengan:
textPayload: "Payload: {'message': {'data': 'SGVsbG8gV29ybGQ=', 'messageId': '8834108235224238',\ \ 'publishTime': '2023-09-20T17:07:52.921Z'}, 'subscription': 'projects/MY_PROJECT/subscriptions/eventarc-us-central1-message-payload-trigger-sub-741'}" ... resource: labels: job_name: message-payload-job location: us-central1 project_id: MY_PROJECT type: cloud_run_job textPayload: Processing message payload gs://message-payload-MY_PROJECT/8254002311197919.data.json
Anda dapat mengonfirmasi bahwa hasilnya sesuai yang diharapkan dengan melihat data peristiwa di objek bucket Cloud Storage.
Ambil nama bucket Anda:
gcloud storage ls
Outputnya mirip dengan hal berikut ini:
gs://message-payload-PROJECT_ID/
Mencantumkan objek di bucket Anda:
gcloud storage ls gs://message-payload-PROJECT_ID/** --recursive
Outputnya akan mirip dengan berikut ini:
gs://message-payload-PROJECT_ID/OBJECT_ID.data.json
Catat
OBJECT_ID
untuk digunakan di langkah berikutnya.Download objek di bucket Anda sebagai file:
gcloud storage cp gs://message-payload-PROJECT_ID/OBJECT_ID.data.json message-event.txt
Ganti
OBJECT_ID
dengan ID yang ditampilkan pada langkah sebelumnya.Di editor teks, buka file
message-event.txt
. Isi peristiwa yang ditulis ke file akan terlihat seperti berikut:{ "message": { "data": "SGVsbG8gV29ybGQ=", "messageId": "8254002311197919", "publishTime": "2023-09-20T16:54:29.312Z" }, "subscription": "projects/MY_PROJECT/subscriptions/eventarc-us-central1-message-payload-trigger-sub-741" }
Perhatikan bahwa jika Anda mendekode nilai data
SGVsbG8gV29ybGQ=
dari format Base64-nya, "Hello World" akan ditampilkan.