使用 Pub/Sub 訊息接收事件 (Terraform)
本快速入門導覽課程說明如何使用 Terraform 建立 Eventarc 觸發條件,接收來自 Pub/Sub 的直接事件,並將事件傳送至 Cloud Run 服務。如要進一步瞭解如何使用 Terraform 建立 Eventarc 觸發條件,請參閱「使用 Terraform 建立觸發條件」。
在本快速入門導覽課程中,您將完成下列事項:
準備部署 Terraform。
定義 Terraform 設定,以執行下列操作:
- 啟用 API。
- 建立服務帳戶。
- 建立 Pub/Sub 主題做為事件供應商。
- 將服務部署至 Cloud Run 做為事件目的地。
- 建立 Eventarc 觸發條件。
套用 Terraform 設定。
這樣一來,您就能將訊息發布至 Pub/Sub 主題,產生事件。Eventarc 觸發條件會將訊息轉送至部署在 Cloud Run 的事件接收器服務,而該服務會記錄事件訊息,為您提供事件導向架構的簡單範例。
事前準備
貴機構定義的安全性限制,可能會導致您無法完成下列步驟。如需疑難排解資訊,請參閱「在受限的 Google Cloud 環境中開發應用程式」。
- 登入 Google Cloud 帳戶。如果您是 Google Cloud新手,歡迎 建立帳戶,親自評估產品在實際工作環境中的成效。新客戶還能獲得價值 $300 美元的免費抵免額,可用於執行、測試及部署工作負載。
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
選取或建立專案所需的角色
- 選取專案:選取專案時,不需要具備特定 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 專案名稱。
啟用 Cloud Resource Manager 和 Identity and Access Management (IAM) API:
啟用 API 時所需的角色
如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (
roles/serviceusage.serviceUsageAdmin),其中包含serviceusage.services.enable權限。瞭解如何授予角色。gcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com -
如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:
gcloud auth application-default login
如果您使用 Cloud Shell,則不需要執行這項操作。
如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI。
-
安裝 Google Cloud CLI。
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
選取或建立專案所需的角色
- 選取專案:選取專案時,不需要具備特定 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 專案名稱。
啟用 Cloud Resource Manager 和 Identity and Access Management (IAM) API:
啟用 API 時所需的角色
如要啟用 API,您需要具備服務使用情形管理員 IAM 角色 (
roles/serviceusage.serviceUsageAdmin),其中包含serviceusage.services.enable權限。瞭解如何授予角色。gcloud services enable cloudresourcemanager.googleapis.com
iam.googleapis.com -
如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:
gcloud auth application-default login
如果您使用 Cloud Shell,則不需要執行這項操作。
如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI。
- 如要使用現有專案進行本指南中的操作,請確認您具有完成本指南所需的權限。如果您建立新專案,則已具備必要權限。
所需權限
如要取得完成本快速入門導覽課程所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
- Cloud Run 管理員 (
roles/run.admin) - Eventarc 管理員 (
roles/eventarc.admin) - 記錄檔檢視存取者 (
roles/logging.viewAccessor) - 專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin) - Pub/Sub Publisher (
roles/pubsub.publisher) - 服務帳戶管理員 (
roles/iam.serviceAccountAdmin) - 服務帳戶使用者 (
roles/iam.serviceAccountUser)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
- Cloud Run 管理員 (
準備部署 Terraform
部署任何 Terraform 資源前,您必須先建立 Terraform 設定檔。您可以使用 Terraform 設定檔,透過 Terraform 語法定義基礎架構的偏好最終狀態。
如果您使用本機殼層,請安裝 Terraform。
Terraform 已整合至 Cloud Shell 環境,您可以使用 Cloud Shell 部署 Terraform 資源,不必安裝 Terraform。
在 Cloud Shell 或本機殼層中,設定要套用 Terraform 設定的預設 Google Cloud 專案。每項專案只需要執行一次這個指令,且可以在任何目錄中執行:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
將
PROJECT_ID替換為 Google Cloud 專案 ID。請注意,如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。
每個 Terraform 設定檔都必須有自己的目錄 (也稱為「根模組」)。建立目錄,並在該目錄中建立新檔案:
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
將
DIRECTORY替換為 Terraform 目錄的名稱。檔案名稱必須有
.tf副檔名,例如在本快速入門中,設定檔為main.tf。
定義 Terraform 設定
將下列 Terraform 程式碼片段複製到 main.tf 檔案中。如要從 GitHub 複製整個程式碼範例,請按一下程式碼片段右上角的 >「前往 GitHub 查看」。
啟用 API
如要啟用套用 Terraform 設定所需的 API,請使用
google_project_service
Terraform 資源:
建立服務帳戶
每個 Eventarc 觸發程序都與 IAM 服務帳戶相關聯。如要建立專屬的服務帳戶以進行測試,請使用 google_service_account Terraform 資源:
如果您是在 2021 年 4 月 8 日當天或之前啟用 Pub/Sub 服務代理,請將服務帳戶憑證建立者角色 (roles/iam.serviceAccountTokenCreator) 授予服務代理。
resource "google_project_iam_member" "tokencreator" { project = data.google_project.project.id role = "roles/iam.serviceAccountTokenCreator" member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" }
建立 Pub/Sub 主題做為事件供應商
如要建立 Pub/Sub 主題,請使用 google_pubsub_topic Terraform 資源。如要在主題層級將 Pub/Sub 發布者角色 (roles/pubsub.publisher) 授予服務帳戶,請使用 google_pubsub_topic_iam_member Terraform 資源:
將事件接收器部署至 Cloud Run
如要建立 Cloud Run 服務做為事件目的地,請使用 google_cloud_run_v2_service Terraform 資源。如要在服務層級將 Cloud Run Invoker 角色 (roles/run.invoker) 授予服務帳戶,請使用 google_cloud_run_v2_service_iam_member Terraform 資源:
建立 Eventarc 觸發條件
如要建立 Eventarc 觸發條件來監聽 Pub/Sub 訊息,請使用 google_eventarc_trigger Terraform 資源:
套用 Terraform 設定
使用 Terraform CLI 根據設定檔佈建基礎架構。詳情請參閱「基本 Terraform 指令」。
初始化 Terraform。每個目錄只需執行一次這項操作。
terraform init
如要使用最新版 Google 供應商,請加入
-upgrade選項 (選用):terraform init -upgrade
檢查設定,確認 Terraform 將建立或更新的資源符合您的預期:
terraform plan
視需要修正設定。
執行下列指令,並在提示中輸入
yes,套用 Terraform 設定:terraform apply
一般來說,您會一次套用所有設定。不過,您也可以指定特定資源。例如:
terraform apply -target="google_eventarc_trigger.default"
啟用 API 後,可能需要幾分鐘的時間,相關動作才會傳播,然後您才能部署任何其他資源。如果遇到問題,請再次嘗試套用 Terraform 設定。
等待 Terraform 顯示「Apply complete!」訊息。
確認資源建立作業
確認 Cloud Run 服務已建立:
gcloud run services list --region us-central1畫面會顯示如下的輸出內容:
SERVICE: hello-events REGION: us-central1 URL: https://hello-events-13335919645.us-central1.run.app LAST DEPLOYED BY: ... LAST DEPLOYED AT: 2024-12-16T15:00:52.606160Z確認已建立 Eventarc 觸發條件:
gcloud eventarc triggers list --location us-central1畫面會顯示如下的輸出內容:
NAME: trigger-pubsub-cloudrun-tf TYPE: google.cloud.pubsub.topic.v1.messagePublished DESTINATION: Cloud Run service: hello-events ACTIVE: Yes LOCATION: us-central1
產生及查看 Pub/Sub 主題事件
將訊息發布至 Pub/Sub 主題,即可產生事件。Eventarc 觸發條件會將訊息轉送至部署在 Cloud Run 的事件接收器服務,而該服務會記錄事件訊息。
找出 Pub/Sub 主題並設為環境變數:
gcloud config set eventarc/location us-central1 export RUN_TOPIC=$(gcloud eventarc triggers describe trigger-pubsub-cloudrun-tf \ --format='value(transport.pubsub.topic)')如要產生事件,請將訊息發布至 Pub/Sub 主題:
gcloud pubsub topics publish $RUN_TOPIC --message "Hello World!"事件會轉送至 Cloud Run 服務,該服務會記錄事件訊息。
篩選服務建立的記錄項目:
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.pubsub.topic.v1.messagePublished"'
尋找類似下列內容的記錄項目:
jsonPayload: ... message: 'Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: Hello World!'
您已成功使用 Terraform 將事件接收器服務部署至 Cloud Run,並建立 Eventarc 觸發條件。從 Pub/Sub 產生事件後,您可以在 Cloud Run 記錄中查看該事件。
清除所用資源
完成本快速入門導覽課程所述工作後,您可以刪除建立的資源,避免繼續計費。
執行下列指令,並在提示中輸入 yes,即可移除先前透過 Terraform 設定套用的資源:
terraform destroy
或者,您也可以刪除 Google Cloud 專案,以免產生費用。 刪除 Google Cloud 專案後,系統就會停止對專案使用的所有資源收取費用。
刪除 Google Cloud 專案:
gcloud projects delete PROJECT_ID
如果打算進行多個教學課程及快速入門導覽課程,重複使用專案有助於避免超出專案配額限制。