在 Cloud Run 中,您可以使用 Eventarc,回應 Pub/Sub 訊息並觸發服務。為服務指定 Pub/Sub 觸發條件時,需同時指定 Pub/Sub 主題。觸發程序完成後,每當您將訊息發布至指定主題,系統就會呼叫服務。
Google Events 存放區包含其他資源,可與事件資料搭配使用。
事前準備
請確認您已按照設定頁面的說明,為 Cloud Run 設定新專案。
啟用 Artifact Registry、Cloud Build、Cloud Run Admin API、Eventarc、Cloud Logging 和 Pub/Sub API:
部署者帳戶的必要角色
如要取得透過 Pub/Sub 事件觸發函式所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
- Cloud Run 來源開發人員 (
roles/run.sourceDeveloper) - 記錄檔檢視存取者 (
roles/logging.viewAccessor) - 專案 IAM 管理員 (
roles/resourcemanager.projectIamAdmin) - 服務帳戶管理員 (
roles/iam.serviceAccountAdmin) - 服務帳戶使用者 (
roles/iam.serviceAccountUser) - 服務使用情形管理員 (
roles/serviceusage.serviceUsageAdmin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
建立服務的觸發條件
部署服務後,您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 設定觸發條件。
控制台
前往 Google Cloud 控制台的「Cloud Run」:
在服務清單中,點選現有服務。
在「Service details」(服務詳細資料) 頁面中,前往「Triggers」(觸發條件) 分頁標籤。
按一下「新增觸發條件」 ,然後選取「Pub/Sub 觸發條件」。
在「Eventarc trigger」(Eventarc 觸發條件) 窗格中,按照下列步驟修改觸發條件詳細資料:
在「觸發條件名稱」欄位中,輸入觸發條件名稱或使用預設名稱。
從清單中選取「觸發條件類型」,指定下列其中一種觸發條件類型:
Google 來源:指定 Pub/Sub、Cloud Storage、Firestore 和其他 Google 事件供應商的觸發條件。
第三方:與提供 Eventarc 來源的非 Google 供應商整合。詳情請參閱「Eventarc 中的第三方事件」。
從「事件供應商」清單中選取「Pub/Sub」,然後選取提供事件類型的產品,用來觸發服務。如需事件提供者清單,請參閱「事件提供者和目的地」。
從「事件類型」清單中選取「google.cloud.pubsub.topic.v1.messagePublished」google.cloud.pubsub.topic.v1.messagePublished。觸發條件設定會因支援的事件類型而異。詳情請參閱「事件類型」。
在「Select a Cloud Pub/Sub topic」(選取 Cloud Pub/Sub 主題) 欄位中,選擇觸發條件要監控的主題。發布至這個主題的訊息會觸發函式呼叫。
如果「區域」欄位已啟用,請選取 Eventarc 觸發程序的位置。一般來說,Eventarc 觸發條件的位置應與要監控事件的 Google Cloud 資源位置一致。在大多數情況下,您也應在相同區域部署服務。如要進一步瞭解 Eventarc 觸發條件的所在位置,請參閱「瞭解 Eventarc 位置」。
在「服務帳戶」欄位中,選取服務帳戶。 Eventarc 觸發程序會連結至服務帳戶,在叫用服務時做為身分使用。Eventarc 觸發條件的服務帳戶必須具備叫用服務的權限。根據預設,Cloud Run 會使用 Compute Engine 預設服務帳戶。
如有需要,請指定服務網址路徑,將傳入的要求傳送至該路徑。這是目的地服務上的相對路徑,觸發條件的事件應傳送至該路徑。例如:
/、/route、route和route/subroute。如要啟用重試功能 (如果傳送嘗試失敗),請選取「Enable retry on failure」(失敗時啟用重試) 核取方塊;否則,預設行為是嘗試傳送一次,不會重試。詳情請參閱「重試事件」。
填妥必填欄位後,按一下「儲存觸發條件」。
建立觸發程序後,請確認「觸發程序」分頁上顯示勾號 check_circle,驗證觸發程序是否正常運作。
gcloud
執行下列指令,建立用於篩選及轉送事件的觸發條件:
gcloud eventarc triggers create TRIGGER_NAME \ --location=LOCATION \ --destination-run-service=DESTINATION_RUN_SERVICE \ --destination-run-region=DESTINATION_RUN_REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com更改下列內容:
TRIGGER_NAME:觸發條件的 ID 或完整 ID。LOCATION:Eventarc 觸發條件的位置。或者,您也可以設定eventarc/location屬性,例如gcloud config set eventarc/location us-central1。為避免效能和資料落地問題,位置必須與產生事件的 Google Cloud 服務位置一致。詳情請參閱「Eventarc 區域」。
-
DESTINATION_RUN_SERVICE:接收觸發條件事件的 Cloud Run 服務名稱。服務可以位於 Cloud Run 支援的任何位置,不一定要與觸發條件位於相同位置。不過,服務必須與觸發程序位於同一專案,且每當產生事件時,服務都會收到以 HTTP POST 要求傳送至根網址路徑 (/) 的事件。 -
DESTINATION_RUN_REGION:(選用) 目的地 Cloud Run 服務所在的 Cloud Run 位置。如未指定,系統會假設服務與觸發程序位於相同區域。 --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"旗標為必填欄位,不得留空。如要使用其他事件類型,請務必建立新的觸發條件。TOPIC_ID:現有 Pub/Sub 主題的 ID。主題必須與觸發程序位於相同專案。SERVICE_ACCOUNT_NAME:使用者管理的服務帳戶名稱。PROJECT_ID:您的 Google Cloud 專案 ID。
注意:
- 如要指定單一事件傳送嘗試,且不重試,請使用
--max-retry-attempts旗標。唯一有效值為1。如果省略旗標,系統會套用標準重試行為。詳情請參閱「重試事件」。 - 其他旗標包括:詳情請參閱「
gcloud eventarc triggers create」。
Terraform
如要為 Cloud Run 服務建立 Eventarc 觸發條件,請參閱「使用 Terraform 建立觸發條件」。
建立函式的觸發條件
部署函式後,您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 設定觸發條件。
控制台
使用 Google Cloud 控制台建立函式時,也可以為函式新增觸發條件。請按照下列步驟為函式建立觸發條件:
前往 Google Cloud 控制台的 Cloud Run:
按一下「編寫函式」,然後輸入函式詳細資料。如要進一步瞭解如何在部署期間設定函式,請參閱「部署函式」。
在「觸發條件」部分中,按一下「新增觸發條件」。
選取「Pub/Sub trigger」(Pub/Sub 觸發條件)。
在「Eventarc trigger」(Eventarc 觸發條件) 窗格中,按照下列步驟修改觸發條件詳細資料:
在「觸發條件名稱」欄位中輸入觸發條件名稱,或使用預設名稱。
從清單中選取「觸發條件類型」:
Google 來源:指定 Pub/Sub、Cloud Storage、Firestore 和其他 Google 事件供應商的觸發條件。
第三方:與提供 Eventarc 來源的非 Google 供應商整合。詳情請參閱「Eventarc 中的第三方事件」。
從「Event provider」(事件供應商) 清單中選取「Pub/Sub」,選取提供事件類型的產品,用來觸發函式。如需事件提供者清單,請參閱「事件提供者和目的地」。
從「事件類型」清單中選取「google.cloud.pubsub.topic.v1.messagePublished」google.cloud.pubsub.topic.v1.messagePublished。觸發條件設定會因支援的事件類型而異。詳情請參閱「事件類型」。
在「Select a Cloud Pub/Sub topic」(選取 Cloud Pub/Sub 主題) 欄位中,選擇觸發條件要監控的主題。發布至這個主題的訊息會觸發函式呼叫。
如果「區域」欄位已啟用,請選取 Eventarc 觸發程序的位置。一般來說,Eventarc 觸發條件的位置應與要監控事件的Google Cloud 資源位置相符。在多數情況下,您也應該在相同區域中部署函式。如要進一步瞭解 Eventarc 觸發條件的所在位置,請參閱「瞭解 Eventarc 位置」。
在「服務帳戶」欄位中,選取服務帳戶。 Eventarc 觸發程序會連結至服務帳戶,在叫用函式時做為身分。Eventarc 觸發程序的服務帳戶必須具備叫用函式的權限。根據預設,Cloud Run 會使用 Compute Engine 預設服務帳戶。
如有需要,請指定服務網址路徑,將傳入的要求傳送至該路徑。這是目的地服務上的相對路徑,觸發條件的事件應傳送至該路徑。例如:
/、/route、route和route/subroute。如要啟用重試功能 (如果傳送嘗試失敗),請選取「Enable retry on failure」(失敗時啟用重試) 核取方塊;否則,預設行為是嘗試傳送一次,不會重試。詳情請參閱「重試事件」。
填妥必填欄位後,按一下「儲存觸發條件」。
點選「建立」。
在「來源」分頁中,視需要編輯原始碼,然後選取「儲存並重新部署」。
gcloud
使用 gcloud CLI 建立函式時,您必須先部署函式,然後建立觸發條件。請按照下列步驟為函式建立觸發條件:
在包含程式碼範例的目錄中執行下列指令,即可部署函式:
gcloud run deploy FUNCTION \ --source . \ --function FUNCTION_ENTRYPOINT \ --base-image BASE_IMAGE_ID \ --region REGION更改下列內容:
執行下列指令,建立用於篩選及轉送事件的觸發條件:
gcloud eventarc triggers create TRIGGER_NAME \ --location=LOCATION \ --destination-run-service=FUNCTION \ --destination-run-region=DESTINATION_RUN_REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_ID/topics/TOPIC_ID \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com更改下列內容:
TRIGGER_NAME:觸發條件的 ID 或完整 ID。LOCATION:Eventarc 觸發條件的位置。或者,您也可以設定eventarc/location屬性,例如gcloud config set eventarc/location us-central1。為避免效能和資料落地問題,位置必須與產生事件的 Google Cloud 服務位置一致。詳情請參閱「Eventarc 區域」。
-
FUNCTION:已部署的 Cloud Run 函式名稱,用於接收觸發條件的事件。 -
DESTINATION_RUN_REGION:(選用) 目的地 Cloud Run 函式所在的Cloud Run 位置。如未指定,系統會假設函式與觸發程序位於相同區域。 --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"旗標為必填欄位,不得留空。如要使用其他事件類型,請務必建立新的觸發條件。TOPIC_ID:現有 Pub/Sub 主題的 ID。主題必須與觸發程序位於相同專案。SERVICE_ACCOUNT_NAME:使用者管理的服務帳戶名稱。PROJECT_ID:您的 Google Cloud 專案 ID。
注意:
- 如要指定單一事件傳送嘗試,且不重試,請使用
--max-retry-attempts旗標。唯一有效值為1。如果省略旗標,系統會套用標準重試行為。詳情請參閱「重試事件」。 - 其他旗標包括:詳情請參閱「
gcloud eventarc triggers create」。
Terraform
如要為 Cloud Run 函式建立 Eventarc 觸發條件,請參閱「使用 Terraform 建立觸發條件」。
後續步驟
- 瞭解如何透過事件觸發。
- 瞭解如何從 Pub/Sub 觸發服務。
- 瞭解如何設定重試。