Anda dapat menggunakan Workflows untuk menjalankan 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. Dengan menyimpan payload peristiwa di bucket Cloud Storage, Anda dapat 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 umum:
Tujuan
Dalam tutorial ini, Anda akan:
- Buat tugas Cloud Run yang memproses data peristiwa yang disimpan di bucket Cloud Storage.
- Deploy alur kerja yang melakukan hal berikut:
- Menerima kejadian sebagai argumen.
- Menulis data payload peristiwa ke bucket Cloud Storage.
- Menggunakan konektor Cloud Run Admin API untuk menjalankan tugas Cloud Run.
- Membuat topik Pub/Sub sehingga Anda dapat memublikasikan pesan ke topik tersebut. Tutorial ini menggunakan peristiwa Pub/Sub sebagai contoh cara merutekan peristiwa menggunakan Workflows, yang menyimpan peristiwa ke Cloud Storage sehingga tugas Cloud Run dapat memproses data peristiwa tersebut.
- Buat pemicu Eventarc yang menjalankan alur kerja saat pesan ditulis ke topik Pub/Sub.
- Picu alur kerja dengan menulis pesan ke topik Pub/Sub.
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.
Sebelum memulai tutorial ini, Anda harus mengaktifkan API tertentu dan membuat akun layanan yang dikelola pengguna. Anda harus memberikan peran dan izin yang diperlukan kepada akun layanan agar dapat merutekan peristiwa menggunakan pemicu Eventarc dan menjalankan alur kerja.
Konsol
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows.
-
Buat akun layanan:
-
Di konsol Google Cloud, buka halaman Buat akun layanan.
Buka 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. Sebagai contoh,
Service account for quickstart
. - Klik Buat dan lanjutkan.
-
Berikan peran berikut ke akun layanan: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Storage Object Creator, Workflows Invoker.
Untuk memberikan peran, temukan daftar Pilih peran, lalu pilih peran.
Untuk memberikan peran tambahan, klik
Tambahkan peran lain, lalu tambahkan setiap peran tambahan. - Klik Lanjutkan.
-
Klik Selesai untuk menyelesaikan pembuatan akun layanan.
-
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows.
-
Buat akun layanan:
-
Di konsol Google Cloud, buka halaman Buat akun layanan.
Buka 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. Sebagai contoh,
Service account for quickstart
. - Klik Buat dan lanjutkan.
-
Berikan peran berikut ke akun layanan: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Storage Object Creator, Workflows Invoker.
Untuk memberikan peran, temukan daftar Pilih peran, lalu pilih peran.
Untuk memberikan peran tambahan, klik
Tambahkan peran lain, lalu tambahkan setiap peran tambahan. - Klik Lanjutkan.
-
Klik Selesai untuk menyelesaikan pembuatan akun layanan.
-
- Jika Anda mengaktifkan agen layanan Cloud Pub/Sub pada atau
sebelum 8 April 2021, untuk mendukung permintaan push Pub/Sub
yang diautentikasi, berikan
peran Service
Account Token Creator (
roles/iam.serviceAccountTokenCreator
) ke akun layanan yang dikelola Google. Jika tidak, peran ini diberikan secara default:- Di Konsol Google Cloud, buka halaman IAM.
- Centang kotak Sertakan pemberian peran yang disediakan Google.
- Di kolom Name, cari Akun Layanan Cloud Pub/Sub, lalu klik Edit entity utama di baris yang sesuai.
- Klik Tambahkan peran atau Tambahkan peran lain.
- Pada daftar Select a role, filter untuk Service Account Token Creator, lalu pilih peran.
- Klik Save.
- Di Konsol Google Cloud, buka halaman IAM.
-
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.
Cloud Shell mendukung langkah-langkah command line dalam tutorial ini.
gcloud
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows:
gcloud services enable cloudbuild.googleapis.com
run.googleapis.com storage.googleapis.com eventarc.googleapis.com workflows.googleapis.com -
Menyiapkan autentikasi:
-
Buat akun layanan:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Ganti
SERVICE_ACCOUNT_NAME
dengan nama untuk akun layanan. -
Memberikan peran ke akun layanan. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/eventarc.eventReceiver, roles/logging.logWriter, roles/run.admin, roles/storage.objectCreator, roles/workflows.invoker
:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Ganti kode berikut:
SERVICE_ACCOUNT_NAME
: nama dari akun layanan.PROJECT_ID
: project ID dimana Anda membuat akun layananROLE
: peran yang akan diberikan
-
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows:
gcloud services enable cloudbuild.googleapis.com
run.googleapis.com storage.googleapis.com eventarc.googleapis.com workflows.googleapis.com -
Menyiapkan autentikasi:
-
Buat akun layanan:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Ganti
SERVICE_ACCOUNT_NAME
dengan nama untuk akun layanan. -
Memberikan peran ke akun layanan. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut:
roles/eventarc.eventReceiver, roles/logging.logWriter, roles/run.admin, roles/storage.objectCreator, roles/workflows.invoker
:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Ganti kode berikut:
SERVICE_ACCOUNT_NAME
: nama dari akun layanan.PROJECT_ID
: project ID dimana Anda membuat akun layananROLE
: peran yang akan diberikan
-
- Jika Anda mengaktifkan agen layanan Cloud Pub/Sub pada atau sebelum
8 April 2021, untuk mendukung permintaan push Pub/Sub yang diautentikasi, berikan
peran
Service Account Token Creator (
roles/iam.serviceAccountTokenCreator
) ke akun layanan yang dikelola Google. Jika tidak, peran ini akan diberikan secara default:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Ganti PROJECT_NUMBER
dengan nomor project
Google Cloud Anda. Anda dapat menemukan nomor project di halaman Welcome pada Google Cloud Console atau dengan menjalankan perintah berikut:
gcloud projects describe PROJECT_ID --format='value(projectNumber)'
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 ini juga akan membuat bucket Cloud Storage. Tugas Cloud Run membaca data peristiwa yang tersimpan di bucket Cloud Storage, lalu mencetak data peristiwa.
Dapatkan kode contoh dengan meng-clone repositori aplikasi contoh ke mesin 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
sebagai 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 alur kerja.
Alur kerja ini 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 wilayah 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 sudah memberikan peran berikut ke akun layanan:
- Cloud Run Admin: untuk menjalankan tugas Cloud Run
- Logs Writer: untuk menulis entri log
- Storage Object Creator: untuk membuat objek di Cloud Storage
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 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 sudah 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 melakukan hal berikut:
Langkah
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 permintaanPOST
HTTP 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 menjalankan tugas. Bucket Cloud Storage dan nama file data diteruskan sebagai variabel pengganti dari alur kerja ke tugas.Langkah
finish
—Menampilkan informasi tentang eksekusi tugas sebagai hasil dari alur kerja.
Membuat topik Pub/Sub
Membuat topik Pub/Sub sehingga 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 tersebut.
Konsol
Di konsol Google Cloud, buka halaman Topics.
Klik
CREATE TOPIC.Di kolom Topic ID, masukkan ID untuk topik, seperti
message-payload-topic
.Pertahankan opsi Tambahkan langganan default.
Jangan pilih opsi lain.
Klik Create.
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 otomatis menjalankan alur kerja dan tugas Cloud Run, buat pemicu Eventarc yang merespons peristiwa Pub/Sub, dan yang merutekan peristiwa tersebut ke alur kerja. Setiap kali pesan ditulis ke topik Pub/Sub, peristiwa tersebut akan memicu eksekusi alur kerja.
Konsol
Di konsol Google Cloud, buka halaman Workflows:
Klik nama alur kerja Anda, seperti
message-payload-workflow
.Di halaman Workflow details, klik
Edit.Di halaman Edit Workflow, di bagian Triggers, klik Add new trigger > Eventarc.
Panel Pemicu Eventarc akan terbuka.
Di kolom Nama pemicu, masukkan nama untuk pemicu tersebut, seperti
message-payload-trigger
.Dari daftar Event provider, pilih Cloud Pub/Sub.
Dari daftar Event, 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 sudah memberikan peran berikut ke akun layanan:
- Penerima Peristiwa Eventarc: untuk menerima peristiwa
- Workflows Invoker: untuk menjalankan alur kerja
Klik Save trigger.
Pemicu Eventarc sekarang muncul di bagian Pemicu pada halaman Edit alur kerja.
Klik Next.
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 project Google Cloud AndaSERVICE_ACCOUNT_NAME
: nama akun layanan yang Anda buat sebelumnya.
Akun layanan berfungsi sebagai identitas pemicu. Anda seharusnya sudah memberikan peran berikut ke akun layanan:
roles/eventarc.eventReceiver
: untuk menerima peristiwaroles/workflows.invoker
: untuk menjalankan alur kerja
Memicu alur kerja
Uji sistem menyeluruh 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 ke dalam log, menyimpan data peristiwa ke bucket Cloud Storage, dan menjalankan tugas Cloud Run untuk memproses data yang tersimpan di Cloud Storage. Proses ini mungkin perlu waktu beberapa saat.
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 harapan dengan melihat data peristiwa di objek bucket Cloud Storage.
Ambil nama bucket Anda:
gsutil ls
Outputnya mirip dengan hal berikut ini:
gs://message-payload-PROJECT_ID/
Buat daftar objek dalam bucket:
gsutil ls -r gs://message-payload-PROJECT_ID/**
Outputnya akan mirip dengan berikut ini:
gs://message-payload-PROJECT_ID/OBJECT_ID.data.json
Catat
OBJECT_ID
yang akan digunakan di langkah berikutnya.Download objek dalam bucket sebagai file:
gcloud storage cp gs://message-payload-PROJECT_ID/OBJECT_ID.data.json message-event.txt
Ganti
OBJECT_ID
dengan ID yang ditampilkan di langkah sebelumnya.Di editor teks, buka file
message-event.txt
. Isi peristiwa yang ditulis ke file harus mirip dengan yang 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" }
Perlu diperhatikan bahwa jika Anda mendekode nilai data
SGVsbG8gV29ybGQ=
dari format Base64, "Hello World" akan ditampilkan.
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.
Menghapus resource tutorial
Hapus resource yang Anda buat dalam tutorial ini: