使用 Pub/Sub 訊息接收事件 (gcloud CLI)

本快速入門導覽課程說明如何部署未經驗證的 Cloud Run 服務,並使用 Pub/Sub 接收事件。

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

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

  2. 建立 Eventarc 觸發條件。

  3. 將訊息發布至 Pub/Sub 主題以產生事件,並在 Cloud Run 記錄檔中查看該事件。

事前準備

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

    啟用 API 時所需的角色

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

    gcloud services enable run.googleapis.com logging.googleapis.com pubsub.googleapis.com eventarc.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. 啟用 Cloud Run、Cloud Logging、Pub/Sub 和 Eventarc API:

    啟用 API 時所需的角色

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

    gcloud services enable run.googleapis.com logging.googleapis.com pubsub.googleapis.com eventarc.googleapis.com
  14. 更新 Google Cloud CLI 元件:
    gcloud components update
  15. 登入帳戶:
    gcloud auth login
  16. 設定本快速入門導覽課程中使用的設定變數:
    gcloud config set run/region us-central1
    gcloud config set run/platform managed
    gcloud config set eventarc/location us-central1
  17. 如果您是專案建立者,系統會授予基本「擁有者」角色 (roles/owner)。根據預設,這個身分與存取權管理 (IAM) 角色包含完全存取大多數 Google Cloud資源所需的權限,因此您可以略過這個步驟。

    如果您不是專案建立者,必須在專案中將必要權限授予適當的主體。舉例來說,主體可以是 Google 帳戶 (適用於使用者),也可以是服務帳戶 (適用於應用程式和運算工作負載)。詳情請參閱活動目的地的「角色和權限」頁面。

    所需權限

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

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

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

  18. 如果您是在 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
  19. PROJECT_NUMBER 替換為 Google Cloud專案編號。您可以在 Google Cloud 控制台的「歡迎」頁面找到專案編號,也可以執行下列指令:

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

將事件接收器部署至 Cloud Run

使用預先建構的映像檔部署 Cloud Run 服務,接收並記錄事件:us-docker.pkg.dev/cloudrun/container/hello

gcloud run deploy helloworld-events-pubsub-quickstart \
    --image=us-docker.pkg.dev/cloudrun/container/hello \
    --allow-unauthenticated

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

建立 Eventarc 觸發條件

當訊息發布至 Pub/Sub 主題時,事件觸發條件會將訊息傳送至部署在 Cloud Run 上的事件接收器服務。

  1. 建立觸發條件,監聽 Pub/Sub 訊息:

    新增 Pub/Sub 主題

    gcloud eventarc triggers create events-pubsub-trigger \
        --destination-run-service=helloworld-events-pubsub-quickstart \
        --destination-run-region=us-central1 \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"
    

    這會建立新的 Pub/Sub 主題,以及名為 events-pubsub-trigger 的觸發條件。

    現有 Pub/Sub 主題

    gcloud eventarc triggers create events-pubsub-trigger \
        --destination-run-service=helloworld-events-pubsub-quickstart \
        --destination-run-region=us-central1 \
        --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
        --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID
    

    更改下列內容:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • TOPIC_ID:現有 Pub/Sub 主題的 ID

    這會為現有的 Pub/Sub 主題建立名為 events-pubsub-trigger 的觸發條件。

    請注意,在 Google Cloud 專案中首次建立 Eventarc 觸發條件時,Eventarc 服務代理程式的佈建作業可能會延遲。通常只要再次嘗試建立觸發條件,就能解決這個問題。詳情請參閱「權限遭拒錯誤」。

  2. 確認觸發條件已成功建立:

    gcloud eventarc triggers list --location=us-central1
    

    events-pubsub-trigger 會列出 Cloud Run 服務 (helloworld-events-pubsub-quickstart) 做為目的地。

產生及查看 Pub/Sub 主題事件

您可以將訊息發布至 Pub/Sub 主題,產生 Eventarc 事件。

  1. 找出 Pub/Sub 主題並設為環境變數:

    export RUN_TOPIC=$(gcloud eventarc triggers describe events-pubsub-trigger \
        --format='value(transport.pubsub.topic)')
    
  2. 將訊息發布至 Pub/Sub 主題,產生事件:

    gcloud pubsub topics publish $RUN_TOPIC --message "Hello World!"
    

    事件會轉送至 Cloud Run 服務,該服務會記錄事件訊息。

  3. 如要查看服務建立的事件相關記錄項目,請執行下列指令:

    gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.pubsub.topic.v1.messagePublished"'
    
  4. 尋找類似下列內容的記錄項目:

    jsonPayload:
    ...
    message: 'Received event of type google.cloud.pubsub.topic.v1.messagePublished.
        Event data: Hello World!'
    

恭喜!您已成功將事件接收器服務部署至 Cloud Run、建立 Eventarc 觸發條件、從 Pub/Sub 產生事件,並在 Cloud Run 記錄中查看該事件。

清除所用資源

完成本文所述工作後,您可以刪除建立的資源,避免繼續計費。

您可以:

  1. 刪除 Cloud Run 服務

  2. 刪除 Eventarc 觸發條件

    這也會刪除相關聯的 Pub/Sub 主題。

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

刪除 Google Cloud 專案:

gcloud projects delete PROJECT_ID

如果打算進行多個教學課程及快速入門導覽課程,重複使用專案有助於避免超出專案配額限制。

後續步驟