發布 Google 來源的事件

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

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

  • 匯流排可集中管理系統中的訊息流程,並做為路由器。接收來自訊息來源或提供者發布的事件訊息,並根據註冊條件評估訊息。

  • 註冊項目可用於識別特定匯流排的訂閱項目,並定義訊息的比對條件,以便將訊息轉送至一或多個目的地。

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

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

  2. 建立 Eventarc Advanced 匯流排。

  3. 啟用 Google 來源事件。

  4. 建立 Eventarc Advanced 註冊。

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

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

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

事前準備

貴機構定義的安全性限制,可能會導致您無法完成下列步驟。如需疑難排解資訊,請參閱「在受限的 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. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

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

    gcloud init
    <x0A> <x0A>
  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. Enable the Artifact Registry, Cloud Build, Cloud Run, Eventarc, and Workflows APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com workflows.googleapis.com
  8. Install the Google Cloud CLI.

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

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

    gcloud init
    <x0A> <x0A>
  11. 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.

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

  13. Enable the Artifact Registry, Cloud Build, Cloud Run, Eventarc, and Workflows APIs:

    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. 將專案的下列角色授予 Compute Engine 預設服務帳戶。建構及部署容器映像檔時,需要下列角色:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/artifactregistry.writer
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/logging.logWriter
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/storage.objectUser

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

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  19. 根據預設,只有專案擁有者、專案編輯者和 Cloud Run 管理員與叫用者可以呼叫 Cloud Run 服務。如要設定驗證,請在 Google Cloud 專案中將 Cloud Run 叫用者角色 (run.invoker) 授予服務帳戶:
    1. 建立服務帳戶。為進行測試,您會將這個服務帳戶附加至 Eventarc Advanced 管道,代表管道的身分。
      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      SERVICE_ACCOUNT_NAME 替換為服務帳戶的名稱。
    2. roles/run.invoker 身分與存取權管理角色授予服務帳戶:
      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 Authorization 標頭,其中包含 Google 為其中一個授權服務帳戶簽署的 OpenID Connect 權杖。本快速入門導覽課程就是採用這種方式設定存取權。
    • 授予權限給 allUsers,允許未經驗證的存取權。

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

  20. 將事件接收器服務部署至 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
    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 資源。這項資源代表特定 Google Cloud 專案和區域中,特定 Eventarc Advanced 匯流排的 Google API 事件訂閱項目。

    使用 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

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

    後續步驟