Memicu Workflows dengan peristiwa langsung dari Cloud Storage (gcloud CLI)

Panduan memulai ini menunjukkan cara menjalankan alur kerja menggunakan pemicu Eventarc yang menerima peristiwa dari Cloud Storage.

Pemicu menjalankan alur kerja dengan memproses peristiwa pembuatan objek di bucket Cloud Storage dan meneruskan peristiwa sebagai argumen runtime ke alur kerja tujuan.

Dalam panduan memulai ini, Anda akan:

  1. Buat bucket Cloud Storage sebagai sumber peristiwa.

  2. Gunakan Workflows untuk membuat dan men-deploy alur kerja yang mengekstrak dan menampilkan nama bucket penyimpanan dan nama file yang diupload.

  3. Buat pemicu Eventarc yang menghubungkan bucket Cloud Storage ke penerima peristiwa Workflows.

  4. Buat peristiwa dengan mengupload file teks ke bucket Cloud Storage. Peristiwa ini diteruskan sebagai argumen runtime ke alur kerja tujuan.

  5. Lihat nama bucket dan nama file teks sebagai hasil eksekusi alur kerja.


Untuk mengikuti panduan langkah demi langkah tugas ini langsung di Google Cloud konsol, klik Pandu saya:

Pandu saya


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 yang terbatas Google Cloud .

  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. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  4. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

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

  6. Verify that billing is enabled for your Google Cloud project.

  7. Install the Google Cloud CLI.

  8. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  9. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

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

  11. Verify that billing is enabled for your Google Cloud project.

  12. 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

  13. Perbarui komponen gcloud:
    gcloud components update
  14. Login menggunakan akun Anda:
    gcloud auth login
  15. Menetapkan variabel lingkungan

    Tetapkan variabel lingkungan yang digunakan dalam panduan memulai cepat ini.

    export PROJECT_ID=PROJECT_ID
    export WORKFLOW_LOCATION=us-central1
    export TRIGGER_LOCATION=us-central1
    gcloud config set project ${PROJECT_ID}
    gcloud config set workflows/location ${WORKFLOW_LOCATION}
    gcloud config set eventarc/location ${TRIGGER_LOCATION}
    

    Anda dapat menemukan project ID di halaman Selamat Datang di konsol Google Cloud .

    Menyiapkan akun layanan

    Beri akun layanan yang digunakan dalam panduan memulai ini izin yang diperlukan.

    1. 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 Anda 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 kustom atau peran yang telah ditentukan lainnya.

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

      PROJECT_NUMBER-compute@

      Ganti PROJECT_NUMBER dengan Google Cloud nomor project Anda. Anda dapat menemukan nomor project di halaman Selamat Datang di 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.

    3. Berikan Peran Eventarc Event Receiver (roles/eventarc.eventReceiver) pada project ke akun layanan default Compute Engine agar pemicu Eventarc dapat menerima peristiwa dari penyedia peristiwa.
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:PROJECT_NUMBER-compute@ \
          --role=roles/eventarc.eventReceiver
    4. Berikan peran Workflows Invoker (roles/workflows.invoker) di project ke akun layanan default Compute Engine agar akun tersebut memiliki izin untuk memicu eksekusi alur kerja Anda.
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:PROJECT_NUMBER-compute@ \
          --role=roles/workflows.invoker
    5. Berikan peran Logging Logs Writer (roles/logging.logWriter) di project ke akun layanan default Compute Engine agar alur kerja dapat mengirim log ke Cloud Logging.
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:PROJECT_NUMBER-compute@ \
          --role=roles/logging.logWriter
    6. Sebelum membuat pemicu untuk peristiwa langsung dari Cloud Storage, berikan peran Pub/Sub Publisher (roles/pubsub.publisher) kepada 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) kepada 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

    Membuat bucket Cloud Storage

    Membuat bucket Cloud Storage untuk digunakan sebagai sumber peristiwa:

      gcloud storage buckets create gs://${PROJECT_ID}-bucket --location=us-central1
    

    Membuat dan men-deploy alur kerja

    Buat dan deploy alur kerja yang dijalankan saat objek yang dibuat di bucket Cloud Storage memicu alur kerja dengan permintaan HTTP.

    1. Di direktori beranda Anda, buat file baru bernama myEventWorkflow.yaml atau myEventWorkflow.json.

    2. Salin dan tempel kode berikut ke dalam file baru, lalu simpan:

      YAML

        main:
          params: [event]
          steps:
              - log_event:
                  call: sys.log
                  args:
                      text: ${event}
                      severity: INFO
              - extract_bucket_object:
                  assign:
                  - bucket: ${event.data.bucket}
                  - object: ${event.data.name}
              - return_bucket_object:
                      return:
                          bucket: ${bucket}
                          object: ${object}
        

      JSON

      {
      "main": {
      "params": [
        "event"
      ],
      "steps": [
        {
          "log_event": {
            "call": "sys.log",
            "args": {
              "text": "${event}",
              "severity": "INFO"
            }
          }
        },
        {
          "extract_bucket_object": {
            "assign": [
              {
                "bucket": "${event.data.bucket}"
              },
              {
                "object": "${event.data.name}"
              }
            ]
          }
        },
        {
          "return_bucket_object": {
            "return": {
              "bucket": "${bucket}",
              "object": "${object}"
            }
          }
        }
      ]
      }
      }
    3. Deploy alur kerja:

      export MY_WORKFLOW=myEventWorkflow
      gcloud workflows deploy ${MY_WORKFLOW} --source=myEventWorkflow.yaml
      

      Ganti .yaml dengan .json jika Anda menyalin alur kerja contoh versi JSON.

    Membuat pemicu Eventarc

    Pemicu Eventarc mengirimkan peristiwa dari bucket Cloud Storage ke tujuan Workflows.

    1. Buat pemicu yang memfilter peristiwa Cloud Storage:

      gcloud eventarc triggers create storage-events-trigger \
          --destination-workflow=${MY_WORKFLOW} \
          --event-filters="type=google.cloud.storage.object.v1.finalized" \
          --event-filters="bucket=${PROJECT_ID}-bucket" \
          --service-account="PROJECT_NUMBER-compute@"
      

      Tindakan ini akan membuat pemicu yang disebut storage-events-trigger.

      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 mengetahui informasi selengkapnya, lihat Error izin ditolak.

    2. Untuk mengonfirmasi bahwa storage-events-trigger berhasil dibuat, jalankan:

      gcloud eventarc triggers describe storage-events-trigger --location=${TRIGGER_LOCATION}
      

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

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

    Membuat dan melihat peristiwa

    1. Untuk membuat peristiwa, upload file teks ke Cloud Storage:

      echo "Hello World" > random.txt
      gcloud storage cp random.txt gs://${PROJECT_ID}-bucket/random.txt
      

      Upload akan menghasilkan peristiwa yang diteruskan sebagai argumen runtime ke alur kerja yang menampilkan nama bucket penyimpanan dan file yang diupload.

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

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

      Output-nya akan mirip dengan berikut, 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-10-13T03:38:03.019148617Z
      END_TIME: 2021-10-13T03:38:03.249705805Z
      NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/a6319d9d-36a6-4117-904e-3d1118bdc90a
      STATE: SUCCEEDED
      START_TIME: 2021-10-13T17:28:51.492864252Z
      END_TIME: 2021-10-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 Anda karena akan digunakan di langkah berikutnya.

    3. 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 saat file diupload ke bucket.

      Outputnya mirip dengan hal berikut ini:

      argument: [...]
      name: projects/218898424763/locations/us-central1/workflows/myEventWorkflow/executions/86d2567b-0f1e-49b3-8b10-cdac5d0f6239
      result: '{"bucket":"PROJECT_ID-bucket","object":"random.txt"}'
      startTime: '2021-10-13T03:38:03.019148617Z'
      state: SUCCEEDED
      
    4. Pastikan waktu,"timeCreated": "2021-10-13T03:38" saat bucket Cloud Storage diperbarui dan startTime eksekusi alur kerja sesuai satu sama lain.

    Selamat, Anda telah berhasil membuat peristiwa Cloud Storage yang telah memicu penerima peristiwa Workflows menggunakan Eventarc.

    Pembersihan

    Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan di halaman ini, hapus project Google Cloud yang berisi resource tersebut.

    1. Hapus alur kerja yang Anda buat:

      gcloud workflows delete ${MY_WORKFLOW}
      

      Ketika ditanya apakah Anda ingin melanjutkan, tekan y.

    2. Hapus bucket penyimpanan Anda:

      gcloud storage rm gs://${PROJECT_ID}-bucket/ --recursive
      
    3. Hapus pemicu yang dibuat dalam tutorial ini:

      gcloud eventarc triggers delete storage-events-trigger
      
    4. Atau, Anda dapat menghapus project Google Cloud untuk menghindari tagihan. Menghapus project akan menghentikan penagihan untuk semua resource yang digunakan dalam project tersebut. Google Cloud

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    Langkah berikutnya