發布 Google 來源的事件

您可以啟用 Google 來源事件收集和發布功能。詳情請參閱「從 Google 來源發布活動」。

本快速入門導覽課程說明如何透過在 Google Cloud專案中建立 Eventarc Advanced 匯流排和註冊項目,發布及接收事件訊息。

  • 匯流排可做為中央路由器,接收來自事件來源的訊息,或由提供者發布的訊息。

  • 註冊會透過處理管道,將匯流排收到的訊息轉送至一或多個目的地。

在本快速入門導覽課程中,您將:

  1. 將事件接收器服務部署至 Cloud Run。

  2. 建立 Eventarc Advanced 匯流排。

  3. 啟用 Google 來源事件。

  4. 建立 Eventarc Advanced 註冊項目。

  5. 建立工作流程,將事件訊息發布至匯流排。

  6. 在 Cloud Run 記錄檔中查看事件資料。

您可以使用 gcloud CLI 完成這項快速入門導覽課程。

事前準備

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

  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、Eventarc 和 Workflows API:

    啟用 API 時所需的角色

    如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com workflows.googleapis.com
  8. 安裝 Google Cloud CLI。

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

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

    gcloud init
  11. 建立或選取 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 專案名稱。

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

  13. 啟用 Artifact Registry、Cloud Build、Cloud Run、Eventarc 和 Workflows API:

    啟用 API 時所需的角色

    如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (roles/serviceusage.serviceUsageAdmin),其中包含 serviceusage.services.enable 權限。瞭解如何授予角色

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com workflows.googleapis.com
  14. 更新 gcloud 元件:
    gcloud components update
  15. 登入帳戶:
    gcloud auth login
  16. 設定本快速入門導覽課程中使用的設定變數:
    REGION=REGION

    REGION 替換為公車的支援位置,例如 us-central1

  17. 如果您是專案建立者,系統會授予基本「擁有者」角色 (roles/owner)。根據預設,這個身分與存取權管理 (IAM) 角色包含完全存取大多數 Google Cloud資源所需的權限,因此您可以略過這個步驟。

    如果您不是專案建立者,必須在專案中將必要權限授予適當的主體。舉例來說,主體可以是 Google 帳戶 (適用於使用者),也可以是服務帳戶 (適用於應用程式和運算工作負載)。

    請注意,根據預設,Cloud Build 權限包含上傳及下載 Artifact Registry 構件的權限

    所需權限

    如要取得完成本快速入門導覽課程所需的權限,請要求管理員在專案中授予您下列 IAM 角色:

    如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

    您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

  18. 為進行測試,請建立服務帳戶,並授予完成本快速入門導覽課程所需的角色。
    1. 建立服務帳戶:
      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      SERVICE_ACCOUNT_NAME 替換為服務帳戶的名稱。
    2. 授予建構及部署容器映像檔,以及代表 Eventarc Advanced 管道身分所需的角色:
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
          --role=roles/artifactregistry.writer
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
          --role=roles/logging.logWriter
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
          --role=roles/storage.admin
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" \
          --role=roles/run.invoker

    請注意,您可以透過下列任一方式,設定哪些使用者可以存取 Cloud Run 服務:

    • 授予權限給特定服務帳戶或群組,允許他們存取服務。所有要求都必須包含 HTTP 授權標頭,其中含有 Google 為其中一個授權服務帳戶簽署的 OpenID Connect 權杖。本快速入門導覽課程就是採用這種方式設定存取權。
    • 授予權限 allUsers,允許未經驗證的存取要求。

    詳情請參閱「Cloud Run 的存取控管」。

將事件接收器服務部署至 Cloud Run

部署 Cloud Run 服務做為事件目的地,記錄事件內容。系統也支援其他事件目的地,例如 Pub/Sub 主題、工作流程或 HTTP 端點。詳情請參閱「事件供應商和目的地」。

  1. 建立 Artifact Registry 標準存放區,用於儲存容器映像檔。

    gcloud artifacts repositories create REPOSITORY \
        --repository-format=docker \
        --location=$REGION

    REPOSITORY 替換為 Artifact Registry 存放區的專屬名稱,例如 my-repo

  2. 複製 GitHub 存放區:

    git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git
  3. 變更為包含 Cloud Run 範例程式碼的目錄:

    cd eventarc-samples/eventarc-advanced-quickstart/
  4. 建構 Docker 容器映像檔,並將映像檔推送至存放區:

    gcloud builds submit \
        --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/log-events:v1 \
        --service-account=projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --default-buckets-behavior=regional-user-owned-bucket
  5. 將容器映像檔部署至 Cloud Run:

    gcloud run deploy SERVICE_NAME \
        --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/log-events:v1 \
        --platform managed \
        --ingress all \
        --no-allow-unauthenticated \
        --region=$REGION

    SERVICE_NAME 替換為您的服務名稱,例如 my-service

    注意事項:

    • --platform 旗標會設定目標平台,在本例中為 Cloud Run 的全代管版本。

    • all 的 Ingress 設定允許所有要求,包括從網際網路直接傳送至 run.app 網址的要求。詳情請參閱「限制 Cloud Run 的網路輸入流量」。

    • --no-allow-unauthenticated 標記會將服務設為僅允許經過驗證的叫用。

    • 看到 Cloud Run 服務網址時,表示部署作業已完成。

  6. 複製並儲存 Cloud Run 服務網址,以供後續步驟使用。

建立 Eventarc Advanced 匯流排

匯流排會接收來自訊息來源或供應商發布的事件訊息,並做為訊息路由器。

詳情請參閱「建立訊息路由匯流排」。

使用 gcloud eventarc message-buses create 指令,在專案中建立 Eventarc Advanced 匯流排:

gcloud eventarc message-buses create BUS_NAME \
    --location=$REGION

BUS_NAME 替換為匯流排的 ID 或完整名稱,例如 my-bus

啟用 Google 來源事件

如要發布 Google 來源的事件,您必須建立 GoogleApiSource 資源。這項資源代表特定專案和區域中,特定 Eventarc Advanced 匯流排的 Google API 事件訂閱項目。 Google Cloud

使用 gcloud eventarc google-api-sources create 指令啟用 Google 來源的事件:

gcloud eventarc google-api-sources create GOOGLE_API_SOURCE_NAME \
    --destination-message-bus=BUS_NAME \
    --destination-message-bus-project=PROJECT_ID \
    --location=$REGION

GOOGLE_API_SOURCE_NAME 替換為 GoogleApiSource 資源的 ID 或完整名稱,例如 my-google-api-source

系統現在會收集並發布直接從 Google 來源傳送至匯流排的所有支援 Google 的事件類型

建立 Eventarc Advanced 註冊項目

註冊項目會決定要將哪些訊息轉送至目的地,並指定用於為事件訊息設定目的地的管道。

詳情請參閱「建立註冊項目以接收事件」。

使用 gcloud CLI 時,您會先建立管道,然後建立註冊:

  1. 使用 gcloud eventarc pipelines create 指令建立管道:

    gcloud eventarc pipelines create PIPELINE_NAME \
        --destinations=http_endpoint_uri='CLOUD_RUN_SERVICE_URL',google_oidc_authentication_service_account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --location=$REGION

    更改下列內容:

    • PIPELINE_NAME:管道的 ID 或完整名稱,例如 my-pipeline
    • CLOUD_RUN_SERVICE_URL:Cloud Run 服務的完整網址,例如 https://SERVICE_NAME-abcdef-uc.a.run.app。這是活動訊息的目的地。

    請注意,google_oidc_authentication_service_account 鍵會指定服務帳戶電子郵件,用於產生 OIDC 權杖

  2. 使用 gcloud eventarc enrollments create 指令建立註冊:

    gcloud eventarc enrollments create ENROLLMENT_NAME \
        --cel-match=MATCH_EXPRESSION \
        --destination-pipeline=PIPELINE_NAME \
        --message-bus=BUS_NAME \
        --message-bus-project=PROJECT_ID \
        --location=$REGION

    更改下列內容:

    • ENROLLMENT_NAME:註冊 ID 或完整名稱,例如 my-enrollment
    • MATCH_EXPRESSION:這個註冊項目的比對運算式 (使用 CEL)。舉例來說,如要在建立 Workflows 工作流程時發布事件訊息,請使用下列運算式:

      "message.type == 'google.cloud.workflows.workflow.v1.created'"
      

建立工作流程,將事件訊息發布至匯流排

Workflows 是全代管的自動化調度管理平台,可按照您定義的順序執行服務,也就是工作流程。建立工作流程,從 Google 來源產生支援的事件類型

  1. 在主目錄中,建立名為 myWorkflow.yaml 的新檔案。

  2. 複製以下工作流程並貼到新檔案中,然後儲存檔案:

    - getCurrentTime:
        call: http.get
        args:
          url: https://timeapi.io/api/Time/current/zone?timeZone=Europe/Amsterdam
        result: currentTime
    - readWikipedia:
        call: http.get
        args:
          url: https://en.wikipedia.org/w/api.php
          query:
            action: opensearch
            search: ${currentTime.body.dayOfWeek}
        result: wikiResult
    - returnResult:
        return: ${wikiResult.body[1]}
    

    這個工作流程會將當天星期幾的資訊做為搜尋字詞,傳遞至 Wikipedia API。系統會傳回相關的維基百科文章清單。

  3. 使用 gcloud workflows deploy 指令部署工作流程,並將其與指定的服務帳戶建立關聯:

    gcloud workflows deploy myWorkflow --source=myWorkflow.yaml \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --location=$REGION

在 Cloud Run 記錄中查看事件資料

將事件發布至 Eventarc Advanced 匯流排後,您可以查看 Cloud Run 服務的記錄,確認事件是否如預期收到。

  1. 使用 gcloud logging read 指令篩選記錄項目並傳回輸出內容:

    gcloud logging read 'textPayload: "google.cloud.workflows.workflow.v1.created"'
    
  2. 尋找類似下列內容的記錄項目:

    insertId: 689644c30004cde066603b3a
    labels:
      instanceId: 0069c7a98846e3b870396a63478212b9642512ef362b67c33090846e10498949c671ccfefbc66f4f093796406e9a714bebc6fbb82f321578134ef95e56f9e9986c3265d2820b56f7994617ba7172ab
    logName: projects/PROJECT_ID/logs/run.googleapis.com%2Fstderr
    receiveTimestamp: '2025-08-08T18:41:07.632226222Z'
    resource:
      labels:
      ...
      type: cloud_run_revision
    textPayload: 'Ce-Type: google.cloud.workflows.workflow.v1.created'
    timestamp: '2025-08-08T18:41:07.314848Z'
    

您已成功建立 Eventarc Advanced 匯流排和註冊項目、啟用從 Google 來源發布事件、建立工作流程以從 Google 供應商產生支援的事件類型,然後在事件接收器服務的記錄中驗證預期結果。

清除所用資源

完成本快速入門導覽課程所述工作後,您可以刪除建立的資源,避免繼續計費:

  1. 刪除 Artifact Registry 存放區

  2. 刪除 Cloud Run 服務

  3. 刪除 Workflows 工作流程

  4. 刪除 Eventarc Advanced 資源:

    1. 刪除註冊項目

    2. 刪除管道

    3. 刪除匯流排

或者,您也可以刪除 Google Cloud 專案,以免產生費用。刪除 Google Cloud 專案後,系統就會停止對專案使用的所有資源收取費用。

刪除 Google Cloud 專案:

gcloud projects delete PROJECT_ID

後續步驟