建立匯流排和註冊項目,發布及接收事件 (gcloud CLI)

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

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

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

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

  1. 建立 Artifact Registry 標準存放區。

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

  3. 建立 Eventarc Advanced 匯流排。

  4. 建立 Eventarc Advanced 註冊項目。

  5. 將事件訊息發布至匯流排。

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

您可以使用 gcloud CLI 完成這項快速入門導覽課程。如要使用 Google Cloud 控制台完成這些步驟,請參閱「建立匯流排和註冊項目,發布及接收事件 (控制台)」。

事前準備

貴機構定義的安全性限制,可能會導致您無法完成下列步驟。如需疑難排解資訊,請參閱「在受限的 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、Compute Engine 和 Eventarc API:

    啟用 API 時所需的角色

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

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com compute.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com run.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、Compute Engine 和 Eventarc API:

    啟用 API 時所需的角色

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

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

    REGION 替換為公車的支援位置

  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 的存取控管」。

建立 Artifact Registry 標準存放區

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

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

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

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

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

  1. 複製 GitHub 存放區:

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

    cd eventarc-samples/eventarc-advanced-quickstart/
  3. 建構 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
  4. 將容器映像檔部署至 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

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

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

看到 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

建立 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 或完整名稱。
    • 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 或完整名稱。
    • MATCH_EXPRESSION:使用 CEL 的註冊比對運算式,例如:

      "message.type == 'hello-world-type'"
      

將事件訊息發布至匯流排

如要直接將訊息發布至匯流排,可以使用 gcloud eventarc message-buses publish 指令,或向 Eventarc Publishing REST API 傳送要求。詳情請參閱「直接發布事件」。

訊息必須採用 CloudEvents 格式,這是以通用方式描述事件資料的規格。data 元素是事件的酬載。這個欄位可填入任何格式正確的 JSON。如要進一步瞭解 CloudEvents 內容屬性,請參閱「事件格式」。

以下範例說明如何直接將事件發布至 Eventarc Advanced 匯流排:

範例 1

您可以使用 gcloud CLI 和 --event-data 及其他事件屬性旗標,將事件發布至匯流排:

gcloud eventarc message-buses publish BUS_NAME \
    --event-data='{"key": "hello-world-data"}' \
    --event-id=hello-world-id-1234 \
    --event-source=hello-world-source \
    --event-type=hello-world-type \
    --event-attributes="datacontenttype=application/json" \
    --location=$REGION

範例 2

您可以使用 gcloud CLI 和 --json-message 旗標,以 JSON 訊息的形式將事件發布至匯流排:

gcloud eventarc message-buses publish BUS_NAME \
    --location=$REGION \
    --json-message='{"id": "hello-world-id-1234", "type":
 "hello-world-type", "source":
 "hello-world-source", "specversion": "1.0", "data":
 {"key": "hello-world-data"}}'

發布事件後,您應該會收到「事件發布成功」訊息。

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

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

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

    gcloud logging read 'textPayload: "hello-world-data"'
    
  2. 尋找類似下列內容的記錄項目:

    insertId: 670808e70002b5c6477709ae
    labels:
    instanceId: 007989f2a10a4a33c21024f2c8e06a9de65d9b4fdc2ee27697a50379b3fab2f975b9233dc357d50b06270829b9b479d5a1ee54a10fa2cb2d98c5f77a0895e2be0f9e6e4b20
    logName: projects/PROJECT_ID/logs/run.googleapis.com%2Fstderr
    receiveTimestamp: '2024-10-10T17:03:35.424659450Z'
    resource:
    labels:
    ...
    type: cloud_run_revision
    textPayload: "[2024-10-21 15:33:19,581] INFO in server: Body: b'{\"value\":\"hello-world-data\"\
      }'"
    timestamp: '2024-10-10T17:03:35.177606Z'
    

您已成功建立 Eventarc Advanced 匯流排和註冊項目、將事件訊息發布至匯流排,並在事件接收者服務的記錄檔中驗證預期結果。

清除所用資源

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

  1. 刪除 Artifact Registry 存放區

  2. 刪除 Cloud Run 服務

  3. 刪除 Eventarc Advanced 資源:

    1. 刪除註冊項目

    2. 刪除管道

    3. 刪除匯流排

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

刪除 Google Cloud 專案:

gcloud projects delete PROJECT_ID

後續步驟