執行 Cloud Run 工作,處理儲存在 Cloud Storage 中的事件資料

您可以使用 Workflows 執行 Cloud Run 工作,做為工作流程的一部分,以便進行更複雜的資料處理作業,或以系統化的方式自動調度管理現有工作。

本教學課程示範如何使用 Workflows 執行 Cloud Run 工作,處理儲存在 Cloud Storage bucket 中的事件資料。將事件酬載儲存在 Cloud Storage bucket 中,可使用客戶管理的加密金鑰加密資料,但如果將事件資料做為環境變數傳遞至 Cloud Run 作業,則無法加密資料。

下圖提供概略總覽:

Pub/Sub 事件會由 Eventarc 觸發條件轉送至 Workflows,並儲存在 Cloud Storage bucket。Cloud Run 工作會處理儲存在 bucket 中的事件資料。

目標

教學課程內容:

  1. 建立 Cloud Run 工作,處理儲存在 Cloud Storage bucket 中的事件資料。
  2. 部署可執行下列作業的工作流程:
    1. 以引數形式接收事件。
    2. 將事件酬載資料寫入 Cloud Storage bucket。
    3. 使用 Cloud Run Admin API 連接器執行 Cloud Run 工作。
  3. 建立 Pub/Sub 主題,以便將訊息發布至該主題。 本教學課程以 Pub/Sub 事件為例,說明如何使用 Workflows 路由事件,並將事件儲存至 Cloud Storage,以便 Cloud Run 工作處理事件資料。
  4. 建立 Eventarc 觸發條件,在訊息寫入 Pub/Sub 主題時執行工作流程。
  5. 將訊息寫入 Pub/Sub 主題,即可觸發工作流程。

費用

在本文件中,您會使用下列 Google Cloud計費元件:

如要根據預測用量估算費用,請使用 Pricing Calculator。

初次使用 Google Cloud 的使用者可能符合免費試用期資格。

事前準備

貴機構定義的安全性限制,可能會導致您無法完成下列步驟。如需疑難排解資訊,請參閱「在受限的 Google Cloud 環境中開發應用程式」。

開始本教學課程前,請務必啟用特定 API,並建立使用者管理的服務帳戶。您必須授予服務帳戶必要的角色和權限,才能使用 Eventarc 觸發條件轉送事件,並執行工作流程。

請注意,如果您使用 Cloud Shell 試用本教學課程,可能需要將其他角色授予 Compute Engine 預設服務帳戶。詳情請參閱本文的「建立 Cloud Run 工作」一節。

控制台

  1. 登入 Google Cloud 帳戶。如果您未曾使用過 Google Cloud,歡迎 建立帳戶,親自體驗實際使用我們產品的成效。新客戶還能獲得價值 $300 美元的免費抵免額,用於執行、測試及部署工作負載。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  4. Enable the Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Compute Engine, Eventarc, and Workflows APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. Create a service account:

    1. Ensure that you have the Create Service Accounts IAM role (roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles.
    2. In the Google Cloud console, go to the Create service account page.

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

    5. Click Create and continue.
    6. Grant the following roles to the service account: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Storage Object Creator, Workflows Invoker.

      To grant a role, find the Select a role list, then select the role.

      To grant additional roles, click Add another role and add each additional role.

    7. Click Continue.
    8. 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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  8. Enable the Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Compute Engine, Eventarc, and Workflows APIs, if any are not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  9. Create a service account:

    1. Ensure that you have the Create Service Accounts IAM role (roles/iam.serviceAccountCreator) and the Project IAM Admin role (roles/resourcemanager.projectIamAdmin). Learn how to grant roles.
    2. In the Google Cloud console, go to the Create service account page.

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

    5. Click Create and continue.
    6. Grant the following roles to the service account: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Storage Object Creator, Workflows Invoker.

      To grant a role, find the Select a role list, then select the role.

      To grant additional roles, click Add another role and add each additional role.

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

  10. 如果您是在 2021 年 4 月 8 日當天或之前啟用 Cloud Pub/Sub 服務代理,請將服務帳戶權杖建立者角色 (roles/iam.serviceAccountTokenCreator) 授予服務代理,以支援已通過驗證的 Pub/Sub 推送要求。否則,系統預設會授予以下角色:
    1. 前往 Google Cloud 控制台的「IAM」頁面。

      前往「身分與存取權管理」頁面

    2. 勾選「包含 Google 提供的角色授予項目」核取方塊。
    3. 在「Name」(名稱) 欄中找到「Cloud Pub/Sub Service Account」(Cloud Pub/Sub 服務帳戶),然後按一下對應資料列中的 「Edit principal」(編輯主體)。
    4. 按一下 「新增角色」或 「新增其他角色」。
    5. 在「Select a role」(選取角色) 清單中,篩選「Service Account Token Creator」(服務帳戶權杖建立者),然後選取該角色。
    6. 按一下 [儲存]。
  11. 在 Google Cloud 控制台中啟用 Cloud Shell。

    啟用 Cloud Shell

    Google Cloud 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。

  12. Cloud Shell 支援本教學課程中的指令列步驟。

gcloud

  1. 登入 Google Cloud 帳戶。如果您未曾使用過 Google Cloud,歡迎 建立帳戶,親自體驗實際使用我們產品的成效。新客戶還能獲得價值 $300 美元的免費抵免額,用於執行、測試及部署工作負載。
  2. 安裝 Google Cloud CLI。

  3. 若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

  4. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  5. 建立或選取 Google Cloud 專案。

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您在專案中獲派角色,即可選取該專案。
    • 建立專案:如要建立專案,您需要專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色。
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      將 PROJECT_ID 替換為要建立的專案名稱。 Google Cloud

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      將 PROJECT_ID 替換為 Google Cloud 專案名稱。

  6. 確認 Google Cloud 專案已啟用計費功能。

  7. 如果尚未啟用,請啟用 Artifact Registry、Cloud Build、Cloud Run、Cloud Storage、Compute Engine、Eventarc 和 Workflows API:

    啟用 API 所需的角色

    如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過擁有者角色 (roles/owner) 取得這項權限。否則,您可以透過服務使用情形管理員角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com compute.googleapis.com run.googleapis.com storage.googleapis.com eventarc.googleapis.com workflows.googleapis.com
  8. 設定驗證方法:

    1. 確認您具備「建立服務帳戶」IAM 角色 (roles/iam.serviceAccountCreator) 和「專案 IAM 管理員」角色 (roles/resourcemanager.projectIamAdmin)。瞭解如何授予角色。
    2. 建立服務帳戶:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      將 SERVICE_ACCOUNT_NAME 替換為服務帳戶的名稱。

    3. 將角色授予服務帳戶。針對下列各個 IAM 角色,執行下列指令一次:roles/eventarc.eventReceiver, roles/logging.logWriter, roles/run.admin, roles/storage.objectCreator, roles/workflows.invoker :

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      請替換下列項目:

      • SERVICE_ACCOUNT_NAME:服務帳戶名稱
      • PROJECT_ID:您建立服務帳戶的專案 ID
      • ROLE:要授予的角色
  9. 安裝 Google Cloud CLI。

  10. 若您採用的是外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

  11. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  12. 建立或選取 Google Cloud 專案。

    選取或建立專案所需的角色

    • 選取專案:選取專案時,不需要具備特定 IAM 角色,只要您在專案中獲派角色,即可選取該專案。
    • 建立專案:如要建立專案,您需要專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色。
    • 建立 Google Cloud 專案:

      gcloud projects create PROJECT_ID

      將 PROJECT_ID 替換為要建立的專案名稱。 Google Cloud

    • 選取您建立的 Google Cloud 專案:

      gcloud config set project PROJECT_ID

      將 PROJECT_ID 替換為 Google Cloud 專案名稱。

  13. 確認 Google Cloud 專案已啟用計費功能。

  14. 如果尚未啟用,請啟用 Artifact Registry、Cloud Build、Cloud Run、Cloud Storage、Compute Engine、Eventarc 和 Workflows API:

    啟用 API 所需的角色

    如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過擁有者角色 (roles/owner) 取得這項權限。否則,您可以透過服務使用情形管理員角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com compute.googleapis.com run.googleapis.com storage.googleapis.com eventarc.googleapis.com workflows.googleapis.com
  15. 設定驗證方法:

    1. 確認您具備「建立服務帳戶」IAM 角色 (roles/iam.serviceAccountCreator) 和「專案 IAM 管理員」角色 (roles/resourcemanager.projectIamAdmin)。瞭解如何授予角色。
    2. 建立服務帳戶:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      將 SERVICE_ACCOUNT_NAME 替換為服務帳戶的名稱。

    3. 將角色授予服務帳戶。針對下列各個 IAM 角色,執行下列指令一次:roles/eventarc.eventReceiver, roles/logging.logWriter, roles/run.admin, roles/storage.objectCreator, roles/workflows.invoker :

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      請替換下列項目:

      • SERVICE_ACCOUNT_NAME:服務帳戶名稱
      • PROJECT_ID:您建立服務帳戶的專案 ID
      • ROLE:要授予的角色
  16. 如果您是在 2021 年 4 月 8 日當天或之前啟用 Cloud Pub/Sub 服務代理,請將服務帳戶權杖建立者角色 (roles/iam.serviceAccountTokenCreator) 授予服務代理,以支援已通過驗證的 Pub/Sub 推送要求。否則,系統會預設授予下列角色:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  17. 將 PROJECT_NUMBER 替換為您的 Google Cloud專案編號。您可以在 Google Cloud 控制台的「Welcome」(歡迎) 頁面找到專案編號,也可以執行下列指令:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

建立 Cloud Run 工作

本教學課程使用 GitHub 上的程式碼範例。部署指令碼會建構容器映像檔,建立名為 message-payload-job 的 Cloud Run 工作。

這個指令碼也會建立 Cloud Storage bucket,並使用 uuidgen (Linux、macOS 和 Windows 通常已安裝的公用程式),為 bucket 名稱產生通用專屬 ID (UUID)。

Cloud Run 工作會讀取儲存在 Cloud Storage bucket 中的任何事件資料,然後輸出事件資料。

  1. 如果您在 Cloud Shell 中執行部署指令碼,且Compute Engine 預設服務帳戶沒有編輯者角色,請將專案的下列角色授予 Compute Engine 預設服務帳戶。(否則,您可以略過這個步驟,並在下一個步驟中複製範例應用程式存放區)。

    1. 授予 Artifact Registry 寫入者角色 (roles/artifactregistry.writer):

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
          --role=roles/artifactregistry.writer

      將 PROJECT_NUMBER 替換為您的 Google Cloud專案編號。您可以在 Google Cloud 控制台的「Welcome」(歡迎)頁面找到專案編號,也可以執行下列指令:

      gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    2. 授予 Storage 物件使用者角色 (roles/storage.objectUser):

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
          --role=roles/storage.objectUser
    3. 授予記錄寫入者角色 (roles/logging.logWriter):

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
          --role=roles/logging.logWriter
  2. 將範例應用程式存放區複製到本機電腦,即可取得程式碼範例:

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

    您也可以下載 ZIP 檔案。

  3. 變更為包含程式碼範例的目錄:

    cd workflows-demos/cloud-run-jobs-payload-gcs/message-payload-job
  4. 執行部署指令碼,建立 Cloud Run 工作:

    ./deploy-job.sh

    畫面會顯示如下的輸出內容:

    STATUS: SUCCESS
    Creating input bucket message-payload-UNIQUE_ID
    ...
    Creating Cloud Run job [message-payload-job] in project [PROJECT_ID] region [us-central1]
    Creating job...
    Done.
    Job [message-payload-job] has successfully been created.
    

    請記下為 Cloud Storage bucket 名稱產生的 UUID。部署工作流程時,您會需要這個 ID。

部署執行 Cloud Run 工作的工作流程

定義及部署工作流程,執行您剛建立的 Cloud Run 工作。工作流程定義是由一系列步驟組成,這些步驟使用 Workflows 語法描述。

工作流程會接收事件、將事件資料儲存至 Cloud Storage bucket,然後執行 Cloud Run 工作來處理事件資料。

控制台

  1. 前往 Google Cloud 控制台的「Workflows」頁面:

    前往「Workflows」頁面

  2. 按一下「建立」。

  3. 輸入新工作流程的名稱,例如 message-payload-workflow。

  4. 選擇適當的區域,例如 us-central1。

  5. 在「服務帳戶」欄位中,選取您先前建立的服務帳戶。

    服務帳戶是工作流程的身分。您應該已將下列角色授予服務帳戶:

    • Cloud Run 管理員:執行 Cloud Run 工作
    • 記錄寫入者:可寫入記錄項目
    • Storage 物件建立者:在 Cloud Storage 中建立物件
  6. 點選「下一步」。

  7. 在工作流程編輯器中,輸入下列工作流程定義:

    main:
        params: [event]
        steps:
            - init:
                assign:
                    - project_id: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                    - event_bucket: message-payload-UNIQUE_ID
                    - event_file: ${event.id + ".data.json"}
                    - job_name: message-payload-job
                    - job_location: us-central1
            - log_event:
                call: sys.log
                args:
                    data: ${event}
            - write_payload_to_gcs:
                call: http.post
                args:
                    url: ${"https://storage.googleapis.com/upload/storage/v1/b/" + event_bucket + "/o"}
                    auth:
                        type: OAuth2
                    query:
                        name: ${event_file}
                    body:
                        ${event.data}
            - run_job_to_process_payload:
                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}

    將 UNIQUE_ID 替換為先前記下的 Cloud Storage bucket 名稱專用 UUID。

  8. 點選「Deploy」(部署)。

gcloud

  1. 為工作流程建立原始碼檔案:

    touch message-payload-workflow.yaml
  2. 將下列工作流程定義複製到 message-payload-workflow.yaml:

    main:
        params: [event]
        steps:
            - init:
                assign:
                    - project_id: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                    - event_bucket: message-payload-UNIQUE_ID
                    - event_file: ${event.id + ".data.json"}
                    - job_name: message-payload-job
                    - job_location: us-central1
            - log_event:
                call: sys.log
                args:
                    data: ${event}
            - write_payload_to_gcs:
                call: http.post
                args:
                    url: ${"https://storage.googleapis.com/upload/storage/v1/b/" + event_bucket + "/o"}
                    auth:
                        type: OAuth2
                    query:
                        name: ${event_file}
                    body:
                        ${event.data}
            - run_job_to_process_payload:
                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}

    將 UNIQUE_ID 替換為您先前記下的 Cloud Storage bucket 名稱 UUID。

  3. 輸入下列指令來部署工作流程:

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

    更改下列內容:

    • SERVICE_ACCOUNT_NAME:您先前建立的服務帳戶名稱
    • PROJECT_ID:Google Cloud 專案的 ID

    服務帳戶是工作流程的身分。您應該已將下列角色授予服務帳戶:

    • roles/logging.logWriter:用於寫入記錄項目
    • roles/run.admin:執行 Cloud Run 工作
    • roles/storage.objectCreator:在 Cloud Storage 中建立物件

工作流程會執行下列作業:

  1. init 步驟:接受事件做為引數,並設定必要變數。

  2. log_event 步驟:使用函式在 Cloud Logging 中建立記錄項目,即 sys.log。

  3. write_payload_to_gcs 步驟:發出 HTTP POST 要求,並將事件酬載資料寫入 Cloud Storage bucket 檔案。

  4. run_job_to_process_payload 步驟:使用 Cloud Run Admin API 連接器方法 googleapis.run.v1.namespaces.jobs.run 執行工作。Cloud Storage bucket 和資料檔案名稱會從工作流程傳遞至工作,做為覆寫變數。

  5. finish 步驟:傳回工作執行作業的相關資訊,做為工作流程的結果。

建立 Pub/Sub 主題

建立 Pub/Sub 主題,以便將訊息發布至該主題。 本範例使用 Pub/Sub 事件,說明如何使用 Workflows 轉送事件,並將事件儲存至 Cloud Storage,以便 Cloud Run 工作處理事件資料。

控制台

  1. 前往 Google Cloud 控制台的「Topics」(主題) 頁面。

    前往「主題」

  2. 按一下 「建立主題」。

  3. 在「Topic ID」(主題 ID) 欄位中,輸入主題 ID,例如 message-payload-topic。

  4. 保留「新增預設訂閱項目」選項。

  5. 請勿選取其他選項。

  6. 點選「建立」。

gcloud

如要建立 ID 為 message-payload-topic 的主題,請執行 gcloud pubsub topics create 指令:

gcloud pubsub topics create message-payload-topic

建立 Eventarc 觸發條件,將事件轉送至工作流程

如要自動執行工作流程和 Cloud Run 作業,請建立 Eventarc 觸發條件,回應 Pub/Sub 事件,並將事件轉送至工作流程。每當訊息寫入 Pub/Sub 主題,事件就會觸發工作流程執行。

控制台

  1. 前往 Google Cloud 控制台的「Workflows」頁面:

    前往「Workflows」頁面

  2. 按一下工作流程名稱,例如 message-payload-workflow。

  3. 在「Workflow details」(工作流程詳細資料) 頁面中,按一下 「Edit」(編輯)。

  4. 在「編輯工作流程」頁面的「觸發條件」部分,依序點選「新增觸發條件」>「Eventarc」。

    「Eventarc trigger」(Eventarc 觸發條件) 窗格隨即開啟。

  5. 在「Trigger name」(觸發條件名稱) 欄位中,輸入觸發條件名稱,例如 message-payload-trigger。

  6. 從「Event provider」(事件提供者) 清單中,選取「Cloud Pub/Sub」。

  7. 從「Event」(事件) 清單中,選取「google.cloud.pubsub.topic.v1.messagePublished」。

  8. 從「Select a Cloud Pub/Sub topic」(選取 Cloud Pub/Sub 主題) 清單中,選取您先前建立的 Pub/Sub 主題。

  9. 在「Service account」(服務帳戶) 欄位中,選取您先前建立的服務帳戶。

    服務帳戶會做為觸發程序的 ID。您應該已將下列角色授予服務帳戶:

    • Eventarc 事件接收者:接收事件
    • 工作流程叫用者:執行工作流程
  10. 按一下「儲存觸發條件」。

    Eventarc 觸發條件現在會顯示在「編輯工作流程」頁面的「觸發條件」部分。

  11. 點選「下一步」。

  12. 點選「Deploy」(部署)。

gcloud

執行下列指令來建立 Eventarc 觸發條件:

gcloud eventarc triggers create message-payload-trigger \
    --location=us-central1 \
    --destination-workflow=message-payload-workflow \
    --destination-workflow-location=us-central1 \
    --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
    --transport-topic=projects/PROJECT_ID/topics/message-payload-topic \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

更改下列內容:

  • PROJECT_ID: Google Cloud 專案的 ID
  • SERVICE_ACCOUNT_NAME:先前建立的服務帳戶名稱。

服務帳戶會做為觸發程序的 ID。您應該已將下列角色授予服務帳戶:

  • roles/eventarc.eventReceiver:接收事件
  • roles/workflows.invoker:執行工作流程

觸發工作流程

將訊息發布至 Pub/Sub 主題並產生事件,測試端對端系統。詳情請參閱「使用事件或 Pub/Sub 訊息觸發工作流程」。

  1. 將訊息發布至 Pub/Sub 主題,產生事件:

    gcloud pubsub topics publish message-payload-topic --message="Hello World"
    

    事件會轉送至工作流程,工作流程會記錄事件訊息、將事件資料儲存至 Cloud Storage bucket,並執行 Cloud Run 工作,處理儲存在 Cloud Storage 的資料。這可能需要幾分鐘的時間。

  2. 查看工作執行作業,確認 Cloud Run 工作是否如預期執行:

    gcloud run jobs executions list --job=message-payload-job

    輸出內容中應會顯示新的工作執行作業。

  3. 您可以在 Cloud Storage bucket 物件中查看事件資料,確認結果是否符合預期。

    1. 擷取 bucket 名稱:

      gcloud storage ls

      輸出結果大致如下:

      gs://message-payload-UNIQUE_ID/

    2. 列出值區中的物件:

      gcloud storage ls gs://message-payload-UNIQUE_ID/** --recursive

      畫面會顯示如下的輸出內容:

      gs://message-payload-UNIQUE_ID/OBJECT_ID.data.json

      記下 OBJECT_ID,以備下一步使用。

    3. 將 bucket 中的物件下載為檔案:

      gcloud storage cp gs://message-payload-UNIQUE_ID/OBJECT_ID.data.json message-event.txt

      將 OBJECT_ID 替換為上一個步驟傳回的 ID。

    4. 在文字編輯器中開啟 message-event.txt 檔案,寫入檔案的事件主體應類似下列內容:

      {
        "message": {
          "data": "SGVsbG8gV29ybGQ=",
          "messageId": "8254002311197919",
          "publishTime": "2023-09-20T16:54:29.312Z"
        },
        "subscription": "projects/MY_PROJECT/subscriptions/eventarc-us-central1-message-payload-trigger-sub-741"
      }
      

      請注意,如果您從 Base64 格式解碼 SGVsbG8gV29ybGQ= 的資料值,系統會傳回「Hello World」。

清除所用資源

如果您是為了這個教學課程建立新專案,請刪除專案。如果您使用現有專案,並想保留專案,但不要本教學課程新增的變更,請刪除為本教學課程建立的資源。

刪除專案

如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。

刪除專案的方法如下:

  1. 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源)

  2. 在專案清單中選取要刪除的專案,然後點選「Delete」(刪除)。
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

刪除教學課程資源

刪除您在本教學課程中建立的資源:

  1. 刪除 Pub/Sub 主題。

  2. 刪除 Eventarc 觸發條件。

  3. 刪除 Workflows 工作流程。

  4. 刪除 Cloud Run 工作。

  5. 刪除 Cloud Storage bucket。

後續步驟