Memicu Workflows menggunakan pesan Pub/Sub (gcloud CLI)

Panduan memulai ini menunjukkan cara menjalankan alur kerja menggunakan pemicu Eventarc yang menerima peristiwa menggunakan Pub/Sub. Pemicu menjalankan alur kerja dengan meneruskan peristiwa yang dikirim melalui Pub/Sub sebagai argumen runtime ke alur kerja tujuan.

Dalam panduan memulai ini, Anda akan:

  1. Gunakan Alur Kerja untuk membuat dan men-deploy alur kerja yang mendekode dan menampilkan pesan Pub/Sub.
  2. Buat pemicu Eventarc yang menghubungkan topik Pub/Sub ke penerima peristiwa Workflows.
  3. Publikasikan pesan ke topik Pub/Sub untuk membuat peristiwa. Peristiwa ini diteruskan sebagai argumen runtime ke alur kerja tujuan.
  4. Lihat pesan Pub/Sub sebagai hasil dari eksekusi alur kerja.

Sebelum memulai

Pastikan Anda memiliki akses ke fitur ini dengan meminta project Anda ditambahkan ke pratinjau pribadi untuk Google Cloud Alur Kerja.

  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. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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.

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

  6. Install the Google Cloud CLI.
  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. 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.

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

  10. Perbarui komponen gcloud:
    gcloud components update
  11. Aktifkan Compute Engine, Eventarc, Pub/Sub, dan Workflows API.
    gcloud services enable \
    compute.googleapis.com \
    eventarc.googleapis.com \
    pubsub.googleapis.com \
    workflows.googleapis.com \
    workflowexecutions.googleapis.com
  12. Tetapkan variabel konfigurasi yang digunakan dalam tutorial ini:
    export WORKFLOW_LOCATION=us-central1
    export TRIGGER_LOCATION=us-central1
    export PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    gcloud config set workflows/location ${WORKFLOW_LOCATION}
    gcloud config set eventarc/location ${TRIGGER_LOCATION}
  13. Jika Anda adalah project creator, Anda diberi peran Pemilik dasar (roles/owner). Secara default, peran Identity and Access Management (IAM) ini mencakup izin yang diperlukan untuk akses penuh ke sebagian besar resource Google Cloud dan Anda dapat melewati langkah ini.

    Jika Anda bukan project creator, izin yang diperlukan harus diberikan pada project kepada akun utama yang sesuai. Misalnya, akun utama dapat berupa Akun Google (untuk pengguna akhir) atau akun layanan (untuk aplikasi dan workload komputasi). Untuk mengetahui informasi selengkapnya, lihat halaman eran dan izin untuk tujuan peristiwa Anda.

    Izin yang diperlukan

    Untuk mendapatkan izin yang Anda perlukan untuk menyelesaikan panduan memulai ini, minta administrator untuk memberi Anda peran IAM berikut di project Anda:

    Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

    Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

  14. Catat akun layanan default Compute Engine karena Anda akan melampirkan akun tersebut ke pemicu Eventarc untuk merepresentasikan identitas pemicu untuk tujuan pengujian. Akun layanan ini dibuat secara otomatis setelah mengaktifkan atau menggunakan Google Cloud layanan yang menggunakan Compute Engine, dan dengan format email berikut:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Ganti PROJECT_NUMBER dengan Google Cloudnomor project 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)'

    Untuk lingkungan produksi, sebaiknya buat akun layanan baru dan berikan satu atau beberapa peran IAM yang berisi izin minimum yang diperlukan dan ikuti prinsip hak istimewa terendah.

  15. Berikan peran Workflows Invoker (roles/workflows.invoker) pada project ke akun layanan default Compute Engine agar akun memiliki izin untuk memicu eksekusi alur kerja Anda.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/workflows.invoker
  16. 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.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

Membuat dan men-deploy alur kerja

Buat dan deploy alur kerja yang dijalankan saat pesan yang dipublikasikan ke topik Pub/Sub memicu alur kerja dengan permintaan HTTP.

  1. Buka terminal atau Cloud Shell.
  2. Di direktori utama, buat file baru bernama myFirstWorkflow.yaml atau myFirstWorkflow.json.
  3. Salin dan tempel kode berikut ke dalam file baru, lalu simpan:

    YAML

    main:
      params: [event]
      steps:
        - decode_pubsub_message:
            assign:
               - base64: ${base64.decode(event.data.message.data)}
               - message: ${text.decode(base64)}
        - return_pubsub_message:
            return: ${message}

    JSON

    {
      "main": {
        "params": [
          "event"
        ],
        "steps": [
          {
            "decode_pubsub_message": {
              "assign": [
                {
                  "base64": "${base64.decode(event.data.message.data)}"
                },
                {
                  "message": "${text.decode(base64)}"
                }
              ]
            }
          },
          {
            "return_pubsub_message": {
              "return": "${message}"
            }
          }
        ]
      }
    }
  4. Deploy alur kerja:
    export MY_WORKFLOW=myFirstWorkflow
    gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml
    Ganti .yaml dengan .json jika Anda menyalin versi JSON dari contoh alur kerja.

Membuat pemicu Eventarc

Saat pesan dipublikasikan ke topik Pub/Sub, peristiwa tersebut akan memicu alur kerja.

  1. Buat pemicu untuk memproses pesan Pub/Sub:

    Topik pub/sub baru

    gcloud eventarc triggers create events-pubsub-trigger \
        --destination-workflow=${MY_WORKFLOW} \
        --destination-workflow-location=${WORKFLOW_LOCATION} \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"

    Tindakan ini akan membuat topik Pub/Sub baru dan pemicu untuk topik tersebut yang disebut events-pubsub-trigger.

    Topik Pub/Sub yang ada

    gcloud eventarc triggers create events-pubsub-trigger \
        --destination-workflow=${MY_WORKFLOW} \
        --destination-workflow-location=${WORKFLOW_LOCATION} \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --transport-topic=TOPIC_ID

    Ganti TOPIC_ID dengan ID topik Pub/Sub yang ada.

    Tindakan ini akan membuat pemicu yang disebut events-pubsub-trigger untuk topik Pub/Sub yang ada.

    Perhatikan bahwa saat membuat pemicu Eventarc untuk pertama kalinya dalam project Google Cloud , mungkin akan ada penundaan dalam penyediaan agen layanan Eventarc. Masalah ini biasanya dapat diatasi dengan mencoba membuat ulang pemicu. Untuk informasi selengkapnya, lihat Error izin ditolak.

  2. Konfirmasi bahwa pemicu berhasil dibuat:
    gcloud eventarc triggers describe events-pubsub-trigger --location=${TRIGGER_LOCATION}

    Outputnya akan mirip dengan berikut ini yang mencantumkan waktu pembuatan dan lokasi pemicu:

    createTime: '2021-10-14T15:15:43.872360951Z'
    [...]
    name: projects/PROJECT_ID/locations/us-central1/triggers/events-pubsub-trigger

Membuat dan melihat peristiwa

Publikasikan pesan ke topik Pub/Sub untuk membuat peristiwa dan memicu alur kerja. Peristiwa yang dihasilkan diteruskan sebagai argumen runtime ke alur kerja yang menampilkan pesan Pub/Sub sebagai hasil dari eksekusi alur kerja. Pastikan ukuran peristiwa yang Anda teruskan ke alur kerja tidak melebihi 512 KB.

  1. Jika Anda membuat pemicu untuk topik Pub/Sub baru, cari dan tetapkan topik Pub/Sub yang dibuat, sebagai variabel lingkungan:

    export TOPIC_ID=$(basename $(gcloud eventarc triggers describe events-pubsub-trigger --format='value(transport.pubsub.topic)'))
  2. Untuk memicu alur kerja, kirim pesan ke topik Pub/Sub:

    gcloud pubsub topics publish $TOPIC_ID --message "Hello there"

    Peristiwa yang dihasilkan diteruskan sebagai argumen runtime ke alur kerja yang menampilkan pesan "Halo".

  3. Untuk memverifikasi bahwa eksekusi alur kerja telah dipicu, cantumkan lima eksekusi terakhir:

    gcloud workflows executions list ${MY_WORKFLOW} --limit=5

    Outputnya akan mirip dengan berikut ini, yang mencantumkan NAME dan STATE yang sama dengan SUCCEEDED untuk setiap eksekusi alur kerja:

    NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/8c02b8f1-8836-4a6d-99d9-fc321eb9668f
    STATE: SUCCEEDED
    START_TIME: 2021-09-13T19:15:10.275677049Z
    END_TIME: 2021-09-13T19:15:10.963136883Z
    NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/a6319d9d-36a6-4117-904e-3d1118bdc90a
    STATE: SUCCEEDED
    START_TIME: 2021-09-13T17:28:51.492864252Z
    END_TIME: 2021-09-13T17:28:52.227212414Z
    

    Perhatikan bahwa di kolom NAME dalam contoh sebelumnya, a6319d9d-36a6-4117-904e-3d1118bdc90a adalah ID eksekusi alur kerja. Salin ID eksekusi untuk digunakan di langkah berikutnya.

  4. Untuk melihat status eksekusi, jalankan perintah berikut:

    gcloud workflows executions describe WORKFLOW_EXECUTION_ID --workflow=${MY_WORKFLOW}

    Ganti WORKFLOW_EXECUTION_ID dengan ID eksekusi alur kerja yang sesuai dengan waktu publikasi topik Pub/Sub. Outputnya mirip dengan hal berikut ini:

    argument: [...]
    endTime: '2021-09-13T17:28:47.301012152Z'
    name: projects/1234567/locations/us-central1/workflows/myFirstWorkflow/executions/f72bc6d4-5ea0-4dfb-bb14-2dae82303120
    result: 'Hello there'
    startTime: '2021-09-13T17:28:51.492864252Z'
    state: SUCCEEDED
  5. Pastikan publish_time tempat pesan Pub/Sub dipublikasikan dan startTime eksekusi alur kerja sesuai satu sama lain.

Selamat, Anda telah berhasil membuat peristiwa menggunakan topik Pub/Sub yang telah memicu penerima peristiwa Alur Kerja menggunakan Eventarc.

Pembersihan

  1. Hapus alur kerja yang Anda buat:
    gcloud workflows delete ${MY_WORKFLOW}
    Saat ditanya apakah Anda ingin melanjutkan, masukkan y.
  2. Hapus pemicu yang Anda buat:
    gcloud eventarc triggers delete events-pubsub-trigger
  3. Atau, Anda dapat menghapus project Google Cloud untuk menghindari tagihan. Menghapus project Google Cloud akan menghentikan penagihan untuk semua resource yang digunakan dalam project tersebut.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Langkah berikutnya