Menjalankan tugas Cloud Run menggunakan Workflows


Alur kerja memungkinkan Anda menjalankan tugas Cloud Run sebagai bagian dari alur kerja untuk melakukan pemrosesan data yang lebih kompleks atau mengatur sistem tugas yang ada.

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

Perhatikan bahwa Anda juga dapat menyimpan data peristiwa di bucket Cloud Storage yang memungkinkan Anda 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 akan 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  4. Enable the Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows APIs.

    Enable the APIs

  5. Create a service account:

    1. In the Google Cloud console, go to the Create service account page.

      Go to Create service account
    2. Select your project.
    3. 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.

    4. Click Create and continue.
    5. Grant the following roles to the service account: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, 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.

    6. Click Continue.
    7. Click Done to finish creating the service account.

  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  8. Enable the Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows APIs.

    Enable the APIs

  9. Create a service account:

    1. In the Google Cloud console, go to the Create service account page.

      Go to Create service account
    2. Select your project.
    3. 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.

    4. Click Create and continue.
    5. Grant the following roles to the service account: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, 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.

    6. Click Continue.
    7. Click Done to finish creating the service account.

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

      Buka IAM

    2. Pilih kotak centang Sertakan pemberian peran yang disediakan Google.
    3. Di kolom Principal, temukan Agen Layanan Cloud Storage dengan bentuk service-PROJECT_NUMBER@gs-project-accounts., lalu klik Edit principal di baris yang sesuai.
    4. Klik Tambahkan peran atau Tambahkan peran lain.
    5. Di daftar Select a role, filter untuk Pub/Sub Publisher, lalu pilih peran.
    6. Klik Simpan.
  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 agen layanan. Jika tidak, peran ini akan diberikan secara default:
    1. Di konsol Google Cloud, buka halaman IAM.

      Buka IAM

    2. Pilih kotak centang Sertakan pemberian peran yang disediakan Google.
    3. Di kolom Name, temukan Cloud Pub/Sub Service Account, lalu klik Edit principal di baris yang sesuai.
    4. Klik Tambahkan peran atau Tambahkan peran lain.
    5. Di daftar Select a role, filter untuk Service Account Token Creator, lalu pilih peran tersebut.
    6. Klik Simpan.
  12. In the Google Cloud console, activate Cloud Shell.

    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.

  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 akan dimulai dan menampilkan perintah command line. Perlu waktu beberapa detik hingga sesi dimulai.

    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, and 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. \
          --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:

    SERVICE_ACCOUNT="$(gcloud storage service-agent --project=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 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
  8. 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)'

Terraform

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

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

    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, and 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.

    Ubah file main.tf Anda seperti yang ditunjukkan pada contoh berikut. Untuk mengetahui informasi selengkapnya, lihat dokumentasi penyedia Google untuk Terraform.

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

    Perhatikan bahwa dalam alur kerja Terraform standar, 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 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
  7. 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 contoh tugas Cloud Run dari GitHub. Tugas ini 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 komputer 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 ditulis dan memicu peristiwa:

    Konsol

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

      Buka Bucket

    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 setelan 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 Anda seperti yang ditunjukkan dalam contoh berikut.

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

    Perhatikan bahwa dalam alur kerja Terraform standar, 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 Repositori Artifact Registry:

      Buka Repositori

    2. Klik Buat repositori.

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

    4. Pertahankan format default yang seharusnya Docker.

    5. Mempertahankan mode default yang seharusnya Standar.

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

    7. Pertahankan semua setelan 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 yang ditunjukkan dalam contoh berikut.

    Perhatikan bahwa dalam alur kerja Terraform standar, 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. Build 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.

    Mungkin perlu waktu beberapa menit hingga build selesai.

  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. Di formulir, pilih us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/parallel-job:latest sebagai URL image container Artifact Registry.
      2. Opsional: Untuk nama tugas, 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 tugas 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 penampung, masukkan python.
        2. Untuk argumen penampung, masukkan process.py.
      2. Klik tab Variabel & Secret.

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

    gcloud

    1. Tetapkan region Cloud Run default:

      gcloud config set run/region us-central1
    2. Buat tugas Cloud Run:

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

      Perhatikan bahwa jika Anda tidak menentukan tag gambar, Artifact Registry akan mencari gambar dengan tag latest default.

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

      Setelah tugas dibuat, Anda akan melihat pesan yang menunjukkan keberhasilan.

    Terraform

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

    Perhatikan bahwa dalam alur kerja Terraform standar, 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 telah memberi peran Cloud Run Admin ke akun layanan sehingga alur kerja dapat menjalankan tugas Cloud Run.

  6. Klik Berikutnya.

  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.

    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 telah memberikan peran roles/run.admin ke akun layanan sehingga alur kerja dapat menjalankan tugas Cloud Run.

Terraform

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

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

Perhatikan bahwa dalam alur kerja Terraform standar, Anda menerapkan seluruh rencana sekaligus. Namun, untuk tujuan tutorial ini, Anda dapat menarget 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 ini melakukan hal berikut:

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

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

    • Jika ya, alur kerja akan dilanjutkan ke langkah run_job.
    • Jika tidak, alur kerja akan dihentikan, sehingga menghentikan pemrosesan lebih lanjut.
  3. Langkah run_job—Menggunakan metode googleapis.run.v1.namespaces.jobs.run konektor Cloud Run Admin API untuk mengeksekusi tugas. Nama bucket Cloud Storage dan file data diteruskan sebagai variabel penggantian 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 menjalankan alur kerja secara otomatis dan pada akhirnya 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 Detail alur kerja, klik Edit.

  4. Di halaman Edit alur kerja, di bagian Pemicu, klik Tambahkan pemicu baru > Eventarc.

    Panel Pemicu Eventarc akan terbuka.

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

  6. Dari daftar Penyedia peristiwa, pilih Cloud Storage.

  7. Dari daftar Peristiwa, 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:

    • Eventarc Event Receiver: untuk menerima peristiwa
    • Workflows Invoker: untuk menjalankan alur kerja
  10. Klik Save trigger.

    Pemicu Eventarc kini muncul di bagian Pemicu di halaman Edit alur kerja.

  11. Klik Berikutnya.

  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.

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 dalam contoh berikut.

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

Perhatikan bahwa dalam alur kerja Terraform standar, Anda menerapkan seluruh rencana sekaligus. Namun, untuk tujuan tutorial ini, Anda dapat menarget 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 dan upload ke Cloud Storage di lokasi yang diharapkan oleh tugas Cloud Run:

    base64 /dev/urandom | head -c 100000 >input_file.txt
    gcloud storage cp input_file.txt gs://input-PROJECT_ID/input_file.txt

    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 dalam 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. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. 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:

  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