Menjalankan tugas Cloud Run menggunakan Workflows


Dengan alur kerja, Anda dapat menjalankan tugas Cloud Run sebagai bagian dari alur kerja untuk melakukan pemrosesan data yang lebih kompleks atau mengorkestrasi sistem tugas yang ada.

Tutorial ini menunjukkan cara menggunakan Workflows untuk menjalankan tugas Cloud Run yang memproses data yang diteruskan sebagai variabel lingkungan ke tugas, sebagai respons terhadap peristiwa dari Cloud Storage.

Perlu diperhatikan bahwa Anda juga dapat menyimpan data peristiwa di bucket Cloud Storage, sehingga Anda dapat mengenkripsi data menggunakan kunci enkripsi yang dikelola pelanggan. Untuk mengetahui informasi selengkapnya, lihat Menjalankan tugas Cloud Run yang memproses data peristiwa yang disimpan di Cloud Storage.

Tujuan

Dalam tutorial ini, Anda akan:

  1. Buat tugas Cloud Run yang memproses file data di bucket Cloud Storage.
  2. Deploy alur kerja yang melakukan hal berikut:
    1. Menerima peristiwa Cloud Storage sebagai argumen.
    2. Memeriksa apakah bucket Cloud Storage yang ditentukan dalam peristiwa adalah bucket yang sama dengan yang digunakan oleh tugas Cloud Run.
    3. Jika ya, gunakan konektor Cloud Run Admin API untuk menjalankan tugas Cloud Run.
  3. Buat pemicu Eventarc yang menjalankan alur kerja sebagai respons terhadap peristiwa yang memengaruhi bucket Cloud Storage.
  4. Picu alur kerja dengan memperbarui file data input di bucket Cloud Storage.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

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.

Konsol

  1. 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.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Aktifkan API Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Eventarc, dan Workflows.

    Mengaktifkan API

  5. Buat akun layanan:

    1. Di konsol Google Cloud, buka halaman Buat akun layanan.

      Buka Create service account
    2. Pilih project Anda.
    3. 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.

    4. Klik Buat dan lanjutkan.
    5. Berikan peran berikut ke akun layanan: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, 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.

    6. Klik Lanjutkan.
    7. Klik Selesai untuk menyelesaikan pembuatan akun layanan.

  6. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  7. Make sure that billing is enabled for your Google Cloud project.

  8. Aktifkan API Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Eventarc, dan Workflows.

    Mengaktifkan API

  9. Buat akun layanan:

    1. Di konsol Google Cloud, buka halaman Buat akun layanan.

      Buka Create service account
    2. Pilih project Anda.
    3. 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.

    4. Klik Buat dan lanjutkan.
    5. Berikan peran berikut ke akun layanan: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, 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.

    6. Klik Lanjutkan.
    7. Klik Selesai untuk menyelesaikan pembuatan akun layanan.

  10. Sebelum membuat pemicu untuk peristiwa langsung dari Cloud Storage, berikan peran Pub/Sub Publisher (roles/pubsub.publisher) ke agen layanan Cloud Storage, yaitu akun layanan yang dikelola Google:
    1. Di Konsol Google Cloud, buka halaman IAM.

      Buka IAM

    2. Centang kotak Sertakan pemberian peran yang disediakan Google.
    3. Di kolom Principal, cari Agen Layanan Cloud Storage dengan formulir service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com, lalu klik Editprincipal di baris yang sesuai.
    4. Klik Tambahkan peran atau Tambahkan peran lain.
    5. Dalam daftar Select a role, filter untuk Pub/Sub Publisher, lalu pilih peran.
    6. Klik Save.
  11. 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:
    1. Di Konsol Google Cloud, buka halaman IAM.

      Buka IAM

    2. Centang kotak Sertakan pemberian peran yang disediakan Google.
    3. Di kolom Name, cari Akun Layanan Cloud Pub/Sub, lalu klik Edit entity utama di baris yang sesuai.
    4. Klik Tambahkan peran atau Tambahkan peran lain.
    5. Pada daftar Select a role, filter untuk Service Account Token Creator, lalu pilih peran.
    6. Klik Save.
  12. Di konsol Google Cloud, aktifkan Cloud Shell.

    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.

  13. Cloud Shell mendukung perintah /dev/urandom dalam tutorial ini yang menghasilkan angka pseudorandom.

gcloud

  1. Untuk menggunakan terminal online dengan gcloud CLI yang sudah disiapkan, aktifkan Cloud Shell:

    Di bagian bawah halaman ini, sesi Cloud Shell dimulai dan menampilkan perintah command line. Perlu waktu beberapa detik hingga sesi diinisialisasi.

    Cloud Shell mendukung perintah /dev/urandom dalam tutorial ini yang menghasilkan angka pseudorandom.

  2. Membuat atau memilih project Google Cloud.
    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID
    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID
  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
  4. Aktifkan Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Eventarc, dan Workflows API:
    gcloud services enable artifactregistry.googleapis.com \
        cloudbuild.googleapis.com \
        eventarc.googleapis.com \
        run.googleapis.com \
        storage.googleapis.com \
        workflows.googleapis.com
  5. Buat akun layanan untuk alur kerja Anda yang akan digunakan untuk autentikasi dengan layanan Google Cloud lainnya dan berikan peran yang sesuai.
    1. Buat akun layanan:
      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      

      Ganti SERVICE_ACCOUNT_NAME dengan nama untuk akun layanan.

    2. Berikan peran ke akun layanan yang dikelola pengguna yang Anda buat di langkah sebelumnya. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut atau Anda dapat menggunakan flag --role beberapa kali dalam satu perintah:
      • roles/eventarc.eventReceiver: untuk menerima peristiwa
      • roles/logging.logWriter: untuk menulis log
      • roles/run.admin: untuk menjalankan tugas Cloud Run
      • roles/workflows.invoker: untuk memanggil alur kerja
      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 layanan
      • ROLE: peran yang akan diberikan ke akun layanan yang dikelola pengguna
  6. Sebelum membuat pemicu untuk peristiwa langsung dari Cloud Storage, berikan peran Pub/Sub Publisher (roles/pubsub.publisher) ke agen layanan Cloud Storage, yaitu akun layanan yang dikelola Google:

    SERVICE_ACCOUNT="$(gsutil kms serviceaccount -p PROJECT_ID)"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:${SERVICE_ACCOUNT}" \
        --role='roles/pubsub.publisher'
    
  7. 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
  8. 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)'

Terraform

  1. Untuk menggunakan terminal online dengan gcloud CLI yang sudah disiapkan, aktifkan Cloud Shell:

    Di bagian bawah halaman ini, sesi Cloud Shell dimulai dan menampilkan perintah command line. Perlu waktu beberapa detik hingga sesi diinisialisasi.

    Cloud Shell mendukung perintah /dev/urandom dalam tutorial ini yang menghasilkan angka pseudorandom.

  2. Membuat atau memilih project Google Cloud.
    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID
    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID
  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
  4. Aktifkan Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Eventarc, dan Workflows API:
    gcloud services enable artifactregistry.googleapis.com \
        cloudbuild.googleapis.com \
        eventarc.googleapis.com \
        run.googleapis.com \
        storage.googleapis.com \
        workflows.googleapis.com
  5. Buat akun layanan untuk alur kerja Anda yang akan digunakan untuk autentikasi dengan layanan Google Cloud lainnya dan berikan peran yang sesuai. Selain itu, untuk mendukung peristiwa langsung dari Cloud Storage, berikan peran Pub/Sub Publisher (roles/pubsub.publisher) ke agen layanan Cloud Storage, yaitu akun layanan yang dikelola Google.

    Ubah file main.tf Anda seperti yang ditunjukkan pada contoh berikut. Untuk mengetahui informasi lebih lanjut, baca dokumentasi Penyedia Google untuk Terraform.

    Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

    Perlu diperhatikan bahwa pada alur kerja Terraform biasa, Anda menerapkan seluruh rencana sekaligus. Namun, untuk tujuan tutorial ini, Anda dapat menargetkan resource tertentu. Contoh:

    terraform apply -target="google_service_account.workflows"

    # Used to retrieve project information later
    data "google_project" "project" {}
    
    # Create a dedicated service account
    resource "google_service_account" "workflows" {
      account_id   = "workflows-run-job-sa"
      display_name = "Workflows Cloud Run Job Service Account"
    }
    
    # Grant permission to receive Eventarc events
    resource "google_project_iam_member" "eventreceiver" {
      project = data.google_project.project.id
      role    = "roles/eventarc.eventReceiver"
      member  = "serviceAccount:${google_service_account.workflows.email}"
    }
    
    # Grant permission to write logs
    resource "google_project_iam_member" "logwriter" {
      project = data.google_project.project.id
      role    = "roles/logging.logWriter"
      member  = "serviceAccount:${google_service_account.workflows.email}"
    }
    
    # Grant permission to execute Cloud Run jobs
    resource "google_project_iam_member" "runadmin" {
      project = data.google_project.project.id
      role    = "roles/run.admin"
      member  = "serviceAccount:${google_service_account.workflows.email}"
    }
    
    # Grant permission to invoke workflows
    resource "google_project_iam_member" "workflowsinvoker" {
      project = data.google_project.project.id
      role    = "roles/workflows.invoker"
      member  = "serviceAccount:${google_service_account.workflows.email}"
    }
    
    # Grant the Cloud Storage service agent permission to publish Pub/Sub topics
    data "google_storage_project_service_account" "gcs_account" {}
    resource "google_project_iam_member" "pubsubpublisher" {
      project = data.google_project.project.id
      role    = "roles/pubsub.publisher"
      member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"
    }
    
  6. 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
  7. 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 contoh tugas Cloud Run dari GitHub. Tugas tersebut membaca data dari file input di Cloud Storage, dan melakukan beberapa pemrosesan arbitrer untuk setiap baris dalam file.

  1. Dapatkan kode contoh dengan meng-clone repositori aplikasi contoh ke mesin lokal Anda:

    git clone https://github.com/GoogleCloudPlatform/jobs-demos.git
    

    Atau, Anda dapat mendownload contoh sebagai file ZIP dan mengekstraknya.

  2. Ubah ke direktori yang berisi kode contoh:

    cd jobs-demos/parallel-processing
    
  3. Buat bucket Cloud Storage untuk menyimpan file input yang dapat digunakan untuk menulis dan memicu peristiwa:

    Konsol

    1. Di Konsol Google Cloud, buka halaman Bucket Cloud Storage.

      Buka Buckets

    2. Klik add Create.
    3. Di halaman Create a bucket, masukkan nama untuk bucket Anda:
      input-PROJECT_ID
      Ganti PROJECT_ID dengan ID project Google Cloud Anda.
    4. Pertahankan nilai default lainnya.
    5. Klik Create.

    gcloud

    Jalankan perintah gcloud storage buckets create:

    gcloud storage buckets create gs://input-PROJECT_ID

    Jika permintaan berhasil, perintah akan menampilkan pesan berikut ini:

    Creating gs://input-PROJECT_ID/...

    Terraform

    Untuk membuat bucket Cloud Storage, gunakan resource google_storage_bucket dan ubah file main.tf seperti ditunjukkan dalam contoh berikut.

    Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, baca Perintah Terraform dasar.

    Perhatikan bahwa pada alur kerja Terraform biasa, Anda menerapkan seluruh rencana sekaligus. Namun, untuk tujuan tutorial ini, Anda dapat menargetkan resource tertentu. Contoh:

    terraform apply -target="random_id.bucket_name_suffix"
    dan
    terraform apply -target="google_storage_bucket.default"

    # Cloud Storage bucket names must be globally unique
    resource "random_id" "bucket_name_suffix" {
      byte_length = 4
    }
    
    # Create a Cloud Storage bucket
    resource "google_storage_bucket" "default" {
      name                        = "input-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
      location                    = "us-central1"
      storage_class               = "STANDARD"
      force_destroy               = false
      uniform_bucket_level_access = true
    }
  4. Buat repositori standar Artifact Registry tempat Anda dapat menyimpan image container:

    Konsol

    1. Di konsol Google Cloud, buka halaman Repositories Artifact Registry:

      Buka Repositori

    2. Klik Create repository.

    3. Masukkan nama untuk repositori—misalnya, my-repo. Untuk setiap lokasi repositori dalam sebuah project, nama repositori harus unik.

    4. Pertahankan format default yang seharusnya Docker.

    5. Pertahankan mode default yang seharusnya Standar.

    6. Untuk region, pilih us-central1 (Iowa).

    7. Pertahankan semua nilai default lainnya.

    8. Klik Create.

    gcloud

    Jalankan perintah:

    gcloud artifacts repositories create REPOSITORY \
        --repository-format=docker \
        --location=us-central1

    Ganti REPOSITORY dengan nama unik untuk repositori—misalnya, my-repo. Untuk setiap lokasi repositori dalam project, nama repositori harus unik.

    Terraform

    Untuk membuat repositori Artifact Registry, gunakan resource google_artifact_registry_repository dan ubah file main.tf Anda seperti ditunjukkan dalam contoh berikut.

    Perlu diperhatikan bahwa pada alur kerja Terraform biasa, Anda menerapkan seluruh rencana sekaligus. Namun, untuk tujuan tutorial ini, Anda dapat menargetkan resource tertentu. Contoh:

    terraform apply -target="google_artifact_registry_repository.default"

    # Create an Artifact Registry repository
    resource "google_artifact_registry_repository" "default" {
      location      = "us-central1"
      repository_id = "my-repo"
      format        = "docker"
    }
  5. Bangun image container menggunakan buildpack Google Cloud default:

    export SERVICE_NAME=parallel-job
    gcloud builds submit \
        --pack image=us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/${SERVICE_NAME}
    

    Ganti REPOSITORY dengan nama repositori Artifact Registry Anda.

    Diperlukan waktu beberapa menit untuk menyelesaikan build.

  6. Buat tugas Cloud Run yang men-deploy image container:

    Konsol

    1. Di konsol Google Cloud, buka halaman Cloud Run:

      Buka Cloud Run

    2. Klik Buat tugas untuk menampilkan formulir Buat tugas.

      1. Dalam formulir, pilih us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/parallel-job:latest sebagai URL image container Artifact Registry.
      2. Opsional: Untuk nama lowongan, masukkan parallel-job.
      3. Opsional: Untuk region, pilih us-central1 (Iowa).
      4. Untuk jumlah tugas yang ingin Anda jalankan dalam tugas, masukkan 10. Semua tugas harus berhasil agar pekerjaan berhasil. Secara default, tugas dijalankan secara paralel.
    3. Luaskan bagian Container, Variables & Secrets, Connections, Security dan pertahankan semua setelan default, kecuali setelan berikut:

      1. Klik tab General.

        1. Untuk perintah container, masukkan python.
        2. Untuk argumen container, masukkan process.py.
      2. Klik tab Variabel & Secret.

        1. Klik Tambahkan variabel, dan masukkan INPUT_BUCKET untuk nama dan input-PROJECT_ID untuk nilai.
        2. Klik Tambahkan variabel, dan masukkan INPUT_FILE untuk nama dan input_file.txt untuk nilai.
    4. Untuk membuat tugas, klik Buat.

    gcloud

    1. Jalankan perintah:

      gcloud run jobs create parallel-job \
          --image us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/parallel-job \
          --command python \
          --args process.py \
          --tasks 10 \
          --set-env-vars=INPUT_BUCKET=input-PROJECT_ID,INPUT_FILE=input_file.txt

      Untuk daftar lengkap opsi yang tersedia saat membuat tugas, lihat dokumentasi command line buat tugas gcloud run.

    2. Setelah tugas dibuat, Anda akan melihat pesan yang menunjukkan berhasil.

    Terraform

    Untuk membuat tugas Cloud Run, gunakan resource google_cloud_run_v2_job dan ubah file main.tf Anda seperti ditunjukkan dalam contoh berikut.

    Perlu diperhatikan bahwa pada alur kerja Terraform biasa, Anda menerapkan seluruh rencana sekaligus. Namun, untuk tujuan tutorial ini, Anda dapat menargetkan resource tertentu. Contoh:

    terraform apply -target="google_cloud_run_v2_job.default"

    # Create a Cloud Run job
    resource "google_cloud_run_v2_job" "default" {
      name     = "parallel-job"
      location = "us-central1"
    
      template {
        task_count = 10
        template {
          containers {
            image   = "us-central1-docker.pkg.dev/${data.google_project.project.name}/${google_artifact_registry_repository.default.repository_id}/parallel-job:latest"
            command = ["python"]
            args    = ["process.py"]
            env {
              name  = "INPUT_BUCKET"
              value = google_storage_bucket.default.name
            }
            env {
              name  = "INPUT_FILE"
              value = "input_file.txt"
            }
          }
        }
      }
    }

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.

Konsol

  1. Di konsol Google Cloud, buka halaman Workflows:

    Buka Workflows

  2. Klik Buat.

  3. Masukkan nama untuk alur kerja baru, seperti cloud-run-job-workflow.

  4. Untuk region, pilih us-central1 (Iowa).

  5. Di kolom Service account, pilih akun layanan yang Anda buat sebelumnya.

    Akun layanan berfungsi sebagai identitas alur kerja. Anda seharusnya sudah memberikan peran Cloud Run Admin ke akun layanan agar alur kerja dapat menjalankan tugas Cloud Run.

  6. Klik Next.

  7. Di editor alur kerja, masukkan definisi berikut untuk alur kerja Anda:

    main:
        params: [event]
        steps:
            - init:
                assign:
                    - project_id: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                    - event_bucket: ${event.data.bucket}
                    - event_file: ${event.data.name}
                    - target_bucket: ${"input-" + project_id}
                    - job_name: parallel-job
                    - job_location: us-central1
            - check_input_file:
                switch:
                    - condition: ${event_bucket == target_bucket}
                      next: run_job
                    - condition: true
                      next: end
            - run_job:
                call: googleapis.run.v1.namespaces.jobs.run
                args:
                    name: ${"namespaces/" + project_id + "/jobs/" + job_name}
                    location: ${job_location}
                    body:
                        overrides:
                            containerOverrides:
                                env:
                                    - name: INPUT_BUCKET
                                      value: ${event_bucket}
                                    - name: INPUT_FILE
                                      value: ${event_file}
                result: job_execution
            - finish:
                return: ${job_execution}
  8. Klik Deploy.

gcloud

  1. Buat file kode sumber untuk alur kerja Anda:

    touch cloud-run-job-workflow.yaml
    
  2. Salin definisi alur kerja berikut ke file kode sumber Anda:

    main:
        params: [event]
        steps:
            - init:
                assign:
                    - project_id: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                    - event_bucket: ${event.data.bucket}
                    - event_file: ${event.data.name}
                    - target_bucket: ${"input-" + project_id}
                    - job_name: parallel-job
                    - job_location: us-central1
            - check_input_file:
                switch:
                    - condition: ${event_bucket == target_bucket}
                      next: run_job
                    - condition: true
                      next: end
            - run_job:
                call: googleapis.run.v1.namespaces.jobs.run
                args:
                    name: ${"namespaces/" + project_id + "/jobs/" + job_name}
                    location: ${job_location}
                    body:
                        overrides:
                            containerOverrides:
                                env:
                                    - name: INPUT_BUCKET
                                      value: ${event_bucket}
                                    - name: INPUT_FILE
                                      value: ${event_file}
                result: job_execution
            - finish:
                return: ${job_execution}
  3. Deploy alur kerja dengan memasukkan perintah berikut:

    gcloud workflows deploy cloud-run-job-workflow \
        --location=us-central1 \
        --source=cloud-run-job-workflow.yaml \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    

    Ganti kode berikut:

    • SERVICE_ACCOUNT_NAME: nama akun layanan yang Anda buat sebelumnya
    • PROJECT_ID: ID project Google Cloud Anda

    Akun layanan berfungsi sebagai identitas alur kerja. Anda seharusnya sudah memberikan peran roles/run.admin ke akun layanan agar alur kerja dapat menjalankan tugas Cloud Run.

Terraform

Untuk membuat alur kerja, gunakan resource google_workflows_workflow dan ubah file main.tf Anda seperti ditunjukkan dalam contoh berikut.

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Perhatikan bahwa dalam alur kerja Terraform pada umumnya, Anda menerapkan seluruh rencana sekaligus. Namun, untuk tujuan tutorial ini, Anda dapat menargetkan resource tertentu. Contoh:

terraform apply -target="google_workflows_workflow.default"

# Create a workflow
resource "google_workflows_workflow" "default" {
  name        = "cloud-run-job-workflow"
  region      = "us-central1"
  description = "Workflow that routes a Cloud Storage event and executes a Cloud Run job"

  # Note that $$ is needed for Terraform
  source_contents = <<EOF
  main:
      params: [event]
      steps:
          - init:
              assign:
                  - project_id: $${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                  - event_bucket: $${event.data.bucket}
                  - event_file: $${event.data.name}
                  - target_bucket: "${google_storage_bucket.default.name}"
                  - job_name: parallel-job
                  - job_location: us-central1
          - check_input_file:
              switch:
                  - condition: $${event_bucket == target_bucket}
                    next: run_job
                  - condition: true
                    next: end
          - run_job:
              call: googleapis.run.v1.namespaces.jobs.run
              args:
                  name: $${"namespaces/" + project_id + "/jobs/" + job_name}
                  location: $${job_location}
                  body:
                      overrides:
                          containerOverrides:
                              env:
                                  - name: INPUT_BUCKET
                                    value: $${event_bucket}
                                  - name: INPUT_FILE
                                    value: $${event_file}
              result: job_execution
          - finish:
              return: $${job_execution}
  EOF
}

Alur kerja melakukan hal berikut:

  1. Langkah init—Menerima peristiwa Cloud Storage sebagai argumen, lalu menetapkan variabel yang diperlukan.

  2. check_input_file langkah—Memeriksa apakah bucket Cloud Storage yang ditentukan dalam peristiwa adalah bucket yang digunakan oleh tugas Cloud Run.

    • Jika ya, alur kerja akan melanjutkan ke langkah run_job.
    • Jika tidak, alur kerja akan dihentikan, sehingga pemrosesan lebih lanjut dihentikan.
  3. Langkah run_job—Menggunakan metode googleapis.run.v1.namespaces.jobs.run konektor Cloud Run Admin API untuk menjalankan tugas. Bucket Cloud Storage dan nama file data diteruskan sebagai variabel pengganti dari alur kerja ke tugas.

  4. Langkah finish—Menampilkan informasi tentang eksekusi tugas sebagai hasil dari alur kerja.

Membuat pemicu Eventarc untuk alur kerja

Untuk otomatis menjalankan alur kerja dan berganti tugas Cloud Run setiap kali file data input diperbarui, buat pemicu Eventarc yang merespons peristiwa Cloud Storage di bucket yang berisi file data input.

Konsol

  1. Di konsol Google Cloud, buka halaman Workflows:

    Buka Workflows

  2. Klik nama alur kerja Anda, seperti cloud-run-job-workflow.

  3. Di halaman Workflow details, klik Edit.

  4. Di halaman Edit Workflow, di bagian Triggers, klik Add new trigger > Eventarc.

    Panel Pemicu Eventarc akan terbuka.

  5. Di kolom Nama pemicu, masukkan nama untuk pemicu tersebut, seperti cloud-run-job-workflow-trigger.

  6. Dari daftar Event provider, pilih Cloud Storage.

  7. Dari daftar Event, pilih google.cloud.storage.object.v1.finalized.

  8. Di kolom Bucket, pilih bucket yang berisi file data input. Nama bucket memiliki format input-PROJECT_ID.

  9. 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
  10. Klik Save trigger.

    Pemicu Eventarc sekarang muncul di bagian Pemicu pada halaman Edit alur kerja.

  11. Klik Next.

  12. Klik Deploy.

gcloud

Buat pemicu Eventarc dengan menjalankan perintah berikut:

gcloud eventarc triggers create cloud-run-job-workflow-trigger \
    --location=us \
    --destination-workflow=cloud-run-job-workflow  \
    --destination-workflow-location=us-central1 \
    --event-filters="type=google.cloud.storage.object.v1.finalized" \
    --event-filters="bucket=input-PROJECT_ID" \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Ganti kode berikut:

  • PROJECT_ID: ID project Google Cloud Anda
  • SERVICE_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 peristiwa
  • roles/workflows.invoker: untuk menjalankan alur kerja

Terraform

Untuk membuat pemicu, gunakan resource google_eventarc_trigger dan ubah file main.tf Anda seperti yang ditunjukkan pada contoh berikut.

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Perhatikan bahwa dalam alur kerja Terraform pada umumnya, Anda menerapkan seluruh rencana sekaligus. Namun, untuk tujuan tutorial ini, Anda dapat menargetkan resource tertentu. Contoh:

terraform apply -target="google_eventarc_trigger.default"

# Create an Eventarc trigger that routes Cloud Storage events to Workflows
resource "google_eventarc_trigger" "default" {
  name     = "cloud-run-job-trigger"
  location = google_workflows_workflow.default.region

  # Capture objects changed in the bucket
  matching_criteria {
    attribute = "type"
    value     = "google.cloud.storage.object.v1.finalized"
  }
  matching_criteria {
    attribute = "bucket"
    value     = google_storage_bucket.default.name
  }

  # Send events to Workflows
  destination {
    workflow = google_workflows_workflow.default.id
  }

  service_account = google_service_account.workflows.email

}

Setiap kali file diupload atau ditimpa di bucket Cloud Storage yang berisi file data input, alur kerja akan dijalankan dengan peristiwa Cloud Storage yang sesuai sebagai argumen.

Memicu alur kerja

Uji sistem menyeluruh dengan memperbarui file data input di Cloud Storage.

  1. Buat data baru untuk file input, lalu upload ke Cloud Storage di lokasi yang diharapkan oleh tugas Cloud Run:

    base64 /dev/urandom | head -c 100000 >input_file.txt
    gsutil cp input_file.txt gs://BUCKET_NAME/input_file.txt
    

    Ganti BUCKET_NAME dengan nama bucket Cloud Storage Anda.

    Jika membuat bucket Cloud Storage menggunakan Terraform, Anda dapat mengambil nama bucket dengan menjalankan perintah berikut:

    gcloud storage buckets list gs://input*
    

    Tugas Cloud Run dapat memerlukan waktu beberapa menit untuk dijalankan.

  2. Pastikan tugas Cloud Run berjalan seperti yang diharapkan dengan melihat eksekusi tugas:

    gcloud config set run/region us-central1
    gcloud run jobs executions list --job=parallel-job
    

    Anda akan melihat eksekusi tugas yang berhasil di output yang menunjukkan bahwa tugas 10/10 telah selesai.

Pelajari lebih lanjut cara memicu alur kerja dengan peristiwa atau pesan Pub/Sub.

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:

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus resource tutorial

Hapus resource yang Anda buat dalam tutorial ini:

  1. Hapus pemicu Eventarc:

    gcloud eventarc triggers delete cloud-run-job-workflow-trigger --location=us
    
  2. Hapus alur kerja:

    gcloud workflows delete cloud-run-job-workflow --location=us-central1
    
  3. Hapus tugas Cloud Run:

    gcloud run jobs delete parallel-job
    
  4. Hapus bucket Cloud Storage yang dibuat untuk data input:

    gcloud storage rm --recursive gs://input-PROJECT_ID/
    
  5. Hapus repositori Artifact Registry:

    gcloud artifacts repositories delete REPOSITORY --location=us-central1
    

Langkah selanjutnya