Anda dapat menggunakan Alur Kerja untuk menjalankan tugas Cloud Run sebagai bagian dari alur kerja yang melakukan pemrosesan data yang lebih kompleks atau yang mengatur sistem tugas yang ada.
Tutorial ini menunjukkan cara menggunakan Alur Kerja 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 dapat 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 peristiwa sebagai argumen.
- Menulis data payload peristiwa ke bucket Cloud Storage.
- Menggunakan konektor Cloud Run Admin API untuk mengeksekusi tugas Cloud Run.
- Buat topik Pub/Sub agar Anda dapat memublikasikan pesan ke topik tersebut. Tutorial ini menggunakan peristiwa Pub/Sub sebagai contoh cara merutekan peristiwa menggunakan Alur Kerja, menyimpan peristiwa ke Cloud Storage sehingga tugas Cloud Run dapat memproses data peristiwa.
- 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 akan 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.
Perhatikan bahwa jika menggunakan Cloud Shell untuk mencoba tutorial ini, Anda mungkin perlu memberikan peran tambahan ke akun layanan default Compute Engine. Untuk mengetahui detailnya, dalam dokumen ini, lihat bagian Membuat tugas Cloud Run.
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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Compute Engine, Eventarc, and Workflows APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the following roles to the service account: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Storage Object Creator, Workflows Invoker.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click
Add another role and add each additional role. - Click Continue.
-
Click Done to finish creating the service account.
-
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Compute Engine, Eventarc, and Workflows APIs.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the following roles to the service account: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Storage Object Creator, Workflows Invoker.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click
Add another role and add each additional role. - Click Continue.
-
Click Done to finish creating the service account.
-
- 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 agen layanan. Jika tidak, peran ini akan diberikan secara default:- Di konsol Google Cloud, buka halaman IAM.
- Pilih kotak centang Sertakan pemberian peran yang disediakan Google.
- Di kolom Name, temukan Cloud Pub/Sub Service Account, lalu klik Edit principal di baris yang sesuai.
- Klik Tambahkan peran atau Tambahkan peran lain.
- Di daftar Select a role, filter untuk Service Account Token Creator, lalu pilih peran tersebut.
- Klik Simpan.
- Di konsol Google Cloud, buka halaman IAM.
-
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.
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
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Compute Engine, Eventarc, and Workflows APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com compute.googleapis.com run.googleapis.com storage.googleapis.com eventarc.googleapis.com workflows.googleapis.com -
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant roles to the service account. Run the following command once for each of the following IAM roles:
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." --role=ROLE
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
-
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Compute Engine, Eventarc, and Workflows APIs:
gcloud services enable artifactregistry.googleapis.com
cloudbuild.googleapis.com compute.googleapis.com run.googleapis.com storage.googleapis.com eventarc.googleapis.com workflows.googleapis.com -
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant roles to the service account. Run the following command once for each of the following IAM roles:
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." --role=ROLE
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
-
- 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 agen layanan. Jika tidak, peran ini akan diberikan secara default:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub. \ --role=roles/iam.serviceAccountTokenCreator
Ganti PROJECT_NUMBER
dengan nomor project
Google Cloud Anda. Anda dapat menemukan nomor project di halaman
Selamat Datang
pada Konsol Google Cloud 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 membuat bucket Cloud Storage. Tugas Cloud Run membaca data peristiwa yang disimpan di bucket Cloud Storage, lalu mencetak data peristiwa.
Jika Anda menjalankan skrip deployment di Cloud Shell, dan jika akun layanan default Compute Engine tidak memiliki peran Editor, berikan peran berikut pada project ke akun layanan default Compute Engine. (Jika tidak, Anda dapat melewati langkah ini dan melanjutkan dengan meng-clone repositori aplikasi contoh di langkah berikutnya.)
Berikan peran Penulis Artifact Registry (
roles/artifactregistry.writer
):gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@ \ --role=roles/artifactregistry.writer
Ganti
PROJECT_NUMBER
dengan nomor project Google Cloud Anda. Anda dapat menemukan nomor project di halaman Selamat Datang pada 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@ \ --role=roles/storage.objectUser
Berikan peran Logging Logs Writer (
roles/logging.logWriter
):gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@ \ --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 Alur Kerja.
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 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 Berikutnya.
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.
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 ini 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 penggantian dari alur kerja ke tugas.Langkah
finish
—Menampilkan informasi tentang eksekusi tugas sebagai hasil dari alur kerja.
Membuat topik Pub/Sub
Buat topik Pub/Sub agar Anda dapat memublikasikan pesan ke topik tersebut. Peristiwa Pub/Sub digunakan untuk menunjukkan cara merutekan peristiwa menggunakan Alur Kerja 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 Topic ID, masukkan ID untuk topik, seperti
message-payload-topic
.Pertahankan opsi Tambahkan langganan default.
Jangan pilih opsi lainnya.
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 menjalankan alur kerja secara otomatis dan pada akhirnya tugas Cloud Run, buat pemicu Eventarc yang merespons peristiwa Pub/Sub, dan merutekan peristiwa 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 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 Penyedia peristiwa, 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 sebelumnya Anda buat.
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:
- 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.
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, menyimpan data peristiwa ke bucket Cloud Storage, dan menjalankan tugas Cloud Run untuk memproses data yang disimpan di Cloud Storage. Proses ini mungkin memerlukan 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 dengan 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/
Buat daftar 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
yang akan 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 di langkah sebelumnya.Di editor teks, buka file
message-event.txt
. Isi peristiwa yang ditulis ke file harus mirip dengan berikut ini:{ "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.
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.
Menghapus resource tutorial
Hapus resource yang Anda buat dalam tutorial ini: