建立匯流排和註冊項目,發布及接收事件 (gcloud CLI)
本快速入門導覽課程說明如何在專案中建立 Eventarc Advanced 匯流排和註冊項目,藉此發布及接收事件訊息。 Google Cloud
- 匯流排可讓您集中管理系統中的訊息流程,並做為路由器。接收來自訊息來源或供應商發布的事件訊息,並根據註冊條件評估訊息。 
- 註冊項目可用於識別特定匯流排的訂閱項目,並定義訊息的比對條件,以便將訊息轉送至一或多個目的地。 
在本快速入門導覽課程中,您將:
- 建立 Artifact Registry 標準存放區。 
- 將事件接收器服務部署至 Cloud Run。 
- 建立 Eventarc Advanced 匯流排。 
- 建立 Eventarc Advanced 註冊。 
- 將事件訊息發布至匯流排。 
- 在 Cloud Run 記錄檔中查看事件資料。 
您可以使用 gcloud CLI 完成本快速入門導覽課程。如要使用 Google Cloud 控制台完成這些步驟,請參閱「建立匯流排和註冊項目,發布及接收事件 (控制台)」。
事前準備
貴機構定義的安全性限制,可能會導致您無法完成下列步驟。如需疑難排解資訊,請參閱「在受限的 Google Cloud 環境中開發應用程式」。
- 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.
- 
      Install the Google Cloud CLI. 
- 
          如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。 
- 
        如要初始化 gcloud CLI,請執行下列指令: gcloud init
- 
  
  
    Create or select 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
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 - 
        Create a Google Cloud project: gcloud projects create PROJECT_ID Replace PROJECT_IDwith 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_IDwith your Google Cloud project name.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
  
  
    
      Enable the Artifact Registry, Cloud Build, Cloud Run, Compute Engine, and Eventarc APIs: Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com compute.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com 
- 
      Install the Google Cloud CLI. 
- 
          如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。 
- 
        如要初始化 gcloud CLI,請執行下列指令: gcloud init
- 
  
  
    Create or select 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
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 - 
        Create a Google Cloud project: gcloud projects create PROJECT_ID Replace PROJECT_IDwith 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_IDwith your Google Cloud project name.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
  
  
    
      Enable the Artifact Registry, Cloud Build, Cloud Run, Compute Engine, and Eventarc APIs: Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com compute.googleapis.com eventarc.googleapis.com eventarcpublishing.googleapis.com run.googleapis.com 
- 更新 gcloud元件:gcloud components update 
- 登入帳戶:
gcloud auth login 
- 設定本快速入門導覽課程中使用的設定變數:
REGION=REGION 將 REGION替換為公車的支援位置。
- 
如果您是專案建立者,系統會授予基本「擁有者」角色 ( roles/owner)。根據預設,這個身分與存取權管理 (IAM) 角色包含完全存取大多數 Google Cloud資源所需的權限,因此您可以略過這個步驟。如果您不是專案建立者,必須在專案中將必要權限授予適當的主體。舉例來說,主體可以是 Google 帳戶 (適用於使用者) 或服務帳戶 (適用於應用程式和運算工作負載)。 請注意,根據預設,Cloud Build 權限包含上傳及下載 Artifact Registry 構件的權限。 所需權限如要取得完成本快速入門所需的權限,請要求管理員為您授予專案的下列 IAM 角色: - 
  
  
    
      Cloud Build 編輯器  (roles/cloudbuild.builds.editor)
- 
  
  
    
      Cloud Run Admin  (roles/run.admin)
- 
  
  
    
      Eventarc 開發人員  (roles/eventarc.developer)
- 
  
  
    
      Eventarc 訊息匯流排管理員  (roles/eventarc.messageBusAdmin)
- 
  
  
    
      記錄檢視存取者  (roles/logging.viewAccessor)
- 
  
  
    
      專案 IAM 管理員  (roles/resourcemanager.projectIamAdmin)
- 
  
  
    
      服務帳戶管理員  (roles/iam.serviceAccountAdmin)
- 
  
  
    
      服務帳戶使用者  (roles/iam.serviceAccountUser)
- 
  
  
    
      服務使用情形管理員  (roles/serviceusage.serviceUsageAdmin)
 如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。 
- 
  
  
    
      Cloud Build 編輯器  (
- 將專案的下列角色授予 Compute Engine 預設服務帳戶。建構及部署容器映像檔時,需要下列角色:- Artifact Registry Writer:上傳 Artifact Registry 構件
- 記錄寫入者: 將記錄寫入 Cloud Logging
- 儲存空間物件使用者:存取 Cloud Storage 物件
 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)' 
- 根據預設,只有專案擁有者、專案編輯者和 Cloud Run 管理員與叫用者可以呼叫 Cloud Run 服務。如要設定驗證,請在 Google Cloud 專案中將 Cloud Run 叫用者角色 (run.invoker) 授予服務帳戶:- 建立服務帳戶。為進行測試,您會將這個服務帳戶附加至 Eventarc Advanced 管道,代表管道的身分。gcloud iam service-accounts create SERVICE_ACCOUNT_NAME SERVICE_ACCOUNT_NAME替換為服務帳戶的名稱。
- 將 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 的存取權控管」。 
- 建立服務帳戶。為進行測試,您會將這個服務帳戶附加至 Eventarc Advanced 管道,代表管道的身分。
- 複製 GitHub 存放區: - git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git 
- 變更為包含 Cloud Run 程式碼範例的目錄: - cd eventarc-samples/eventarc-advanced-quickstart/ 
- 建構 Docker 容器映像檔,並將映像檔推送至存放區: - gcloud builds submit \ --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/log-events:v1 
- 將容器映像檔部署至 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.appURL 的要求。詳情請參閱「限制 Cloud Run 的網路輸入」。- --no-allow-unauthenticated標記會將服務設為僅允許經過驗證的叫用。
- 使用 - 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 權杖。
- 使用 - 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 - 更改下列內容: 
- 使用 - gcloud logging read指令篩選記錄項目並傳回輸出內容:- gcloud logging read 'textPayload: "hello-world-data"' 
- 尋找類似下列內容的記錄項目: - 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 資源: 
建立 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 端點。詳情請參閱「事件供應商和目的地」。
看到 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 時,您會先建立管道,然後建立註冊:
將事件訊息發布至匯流排
如要直接將訊息發布至匯流排,可以使用 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 服務的記錄,確認事件是否如預期收到。
您已成功建立 Eventarc Advanced 匯流排和註冊項目、將事件訊息發布至匯流排,並在事件接收者服務的記錄檔中驗證預期結果。
清除所用資源
完成本快速入門導覽課程所述工作後,您可以刪除已建立的資源,避免系統繼續計費:
或者,您也可以刪除 Google Cloud 專案,以免產生費用。 刪除 Google Cloud 專案後,系統就會停止對專案使用的所有資源收取費用。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID