透過 Pub/Sub 事件建立觸發條件

在 Cloud Run 中,您可以使用 Eventarc,回應 Pub/Sub 訊息並觸發服務。為服務指定 Pub/Sub 觸發條件時,需同時指定 Pub/Sub 主題。觸發程序完成後,每當您將訊息發布至指定主題,系統就會呼叫服務。

Google Events 存放區包含其他資源,可與事件資料搭配使用。

事前準備

  1. 請確認您已按照設定頁面的說明,為 Cloud Run 設定新專案。

  2. 啟用 Artifact Registry、Cloud Build、Cloud Run Admin API、Eventarc、Cloud Logging 和 Pub/Sub API:

    啟用 API

  3. 授予必要的 IAM 角色和權限

部署者帳戶的必要角色

如要取得透過 Pub/Sub 事件觸發函式所需的權限,請要求管理員在專案中授予您下列 IAM 角色:

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

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

請注意,根據預設,Cloud Build 權限包含上傳及下載 Artifact Registry 構件的權限

建立服務的觸發條件

部署服務後,您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Terraform 設定觸發條件。

控制台

  1. 使用容器來源部署 Cloud Run 服務。

  2. 前往 Google Cloud 控制台的「Cloud Run」

    前往 Cloud Run

  3. 在服務清單中,點選現有服務。

  4. 在「Service details」(服務詳細資料) 頁面中,前往「Triggers」(觸發條件) 分頁標籤。

  5. 按一下「新增觸發條件」 ,然後選取「Pub/Sub 觸發條件」

  6. 在「Eventarc trigger」(Eventarc 觸發條件) 窗格中,按照下列步驟修改觸發條件詳細資料:

    1. 在「觸發條件名稱」欄位中,輸入觸發條件名稱或使用預設名稱。

    2. 從清單中選取「觸發條件類型」,指定下列其中一種觸發條件類型:

      • Google 來源:指定 Pub/Sub、Cloud Storage、Firestore 和其他 Google 事件供應商的觸發條件。

      • 第三方:與提供 Eventarc 來源的非 Google 供應商整合。詳情請參閱「Eventarc 中的第三方事件」。

    3. 從「事件供應商」清單中選取「Pub/Sub」,然後選取提供事件類型的產品,用來觸發服務。如需事件提供者清單,請參閱「事件提供者和目的地」。

    4. 從「事件類型」清單中選取「google.cloud.pubsub.topic.v1.messagePublished」google.cloud.pubsub.topic.v1.messagePublished。觸發條件設定會因支援的事件類型而異。詳情請參閱「事件類型」。

    5. 在「Select a Cloud Pub/Sub topic」(選取 Cloud Pub/Sub 主題) 欄位中,選擇觸發條件要監控的主題。發布至這個主題的訊息會觸發函式呼叫。

    6. 如果「區域」欄位已啟用,請選取 Eventarc 觸發程序的位置。一般來說,Eventarc 觸發條件的位置應與要監控事件的 Google Cloud 資源位置一致。在大多數情況下,您也應在相同區域部署服務。如要進一步瞭解 Eventarc 觸發條件的所在位置,請參閱「瞭解 Eventarc 位置」。

    7. 在「服務帳戶」欄位中,選取服務帳戶。 Eventarc 觸發程序會連結至服務帳戶,在叫用服務時做為身分使用。Eventarc 觸發條件的服務帳戶必須具備叫用服務的權限。根據預設,Cloud Run 會使用 Compute Engine 預設服務帳戶

    8. 如有需要,請指定服務網址路徑,將傳入的要求傳送至該路徑。這是目的地服務上的相對路徑,觸發條件的事件應傳送至該路徑。例如://routerouteroute/subroute

    9. 如要啟用重試功能 (如果傳送嘗試失敗),請選取「Enable retry on failure」(失敗時啟用重試) 核取方塊;否則,預設行為是嘗試傳送一次,不會重試。詳情請參閱「重試事件」。

    10. 填妥必填欄位後,按一下「儲存觸發條件」

  7. 建立觸發程序後,請確認「觸發程序」分頁上顯示勾號 ,驗證觸發程序是否正常運作。

gcloud

  1. 使用容器來源部署 Cloud Run 服務。

  2. 執行下列指令,建立用於篩選及轉送事件的觸發條件:

    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 控制台建立函式時,也可以為函式新增觸發條件。請按照下列步驟為函式建立觸發條件:

  1. 前往 Google Cloud 控制台的 Cloud Run:

    前往 Cloud Run

  2. 按一下「編寫函式」,然後輸入函式詳細資料。如要進一步瞭解如何在部署期間設定函式,請參閱「部署函式」。

  3. 在「觸發條件」部分中,按一下「新增觸發條件」

  4. 選取「Pub/Sub trigger」(Pub/Sub 觸發條件)

  5. 在「Eventarc trigger」(Eventarc 觸發條件) 窗格中,按照下列步驟修改觸發條件詳細資料:

    1. 在「觸發條件名稱」欄位中輸入觸發條件名稱,或使用預設名稱。

    2. 從清單中選取「觸發條件類型」

      • Google 來源:指定 Pub/Sub、Cloud Storage、Firestore 和其他 Google 事件供應商的觸發條件。

      • 第三方:與提供 Eventarc 來源的非 Google 供應商整合。詳情請參閱「Eventarc 中的第三方事件」。

    3. 從「Event provider」(事件供應商) 清單中選取「Pub/Sub」,選取提供事件類型的產品,用來觸發函式。如需事件提供者清單,請參閱「事件提供者和目的地」。

    4. 從「事件類型」清單中選取「google.cloud.pubsub.topic.v1.messagePublished」google.cloud.pubsub.topic.v1.messagePublished。觸發條件設定會因支援的事件類型而異。詳情請參閱「事件類型」。

    5. 在「Select a Cloud Pub/Sub topic」(選取 Cloud Pub/Sub 主題) 欄位中,選擇觸發條件要監控的主題。發布至這個主題的訊息會觸發函式呼叫。

    6. 如果「區域」欄位已啟用,請選取 Eventarc 觸發程序的位置。一般來說,Eventarc 觸發條件的位置應與要監控事件的Google Cloud 資源位置相符。在多數情況下,您也應該在相同區域中部署函式。如要進一步瞭解 Eventarc 觸發條件的所在位置,請參閱「瞭解 Eventarc 位置」。

    7. 在「服務帳戶」欄位中,選取服務帳戶。 Eventarc 觸發程序會連結至服務帳戶,在叫用函式時做為身分。Eventarc 觸發程序的服務帳戶必須具備叫用函式的權限。根據預設,Cloud Run 會使用 Compute Engine 預設服務帳戶

    8. 如有需要,請指定服務網址路徑,將傳入的要求傳送至該路徑。這是目的地服務上的相對路徑,觸發條件的事件應傳送至該路徑。例如://routerouteroute/subroute

    9. 如要啟用重試功能 (如果傳送嘗試失敗),請選取「Enable retry on failure」(失敗時啟用重試) 核取方塊;否則,預設行為是嘗試傳送一次,不會重試。詳情請參閱「重試事件」。

  6. 填妥必填欄位後,按一下「儲存觸發條件」

  7. 點選「建立」

  8. 在「來源」分頁中,視需要編輯原始碼,然後選取「儲存並重新部署」

gcloud

使用 gcloud CLI 建立函式時,您必須先部署函式,然後建立觸發條件。請按照下列步驟為函式建立觸發條件:

  1. 在包含程式碼範例的目錄中執行下列指令,即可部署函式:

    gcloud run deploy FUNCTION \
        --source . \
        --function FUNCTION_ENTRYPOINT \
        --base-image BASE_IMAGE_ID \
        --region REGION
    

    更改下列內容:

    • FUNCTION:要部署的函式名稱。您可以完全省略這個參數,但這樣系統會提示您輸入名稱。

    • FUNCTION_ENTRYPOINT:原始碼中函式的進入點。這是 Cloud Run 在函式執行時執行的程式碼。此旗標的值必須是原始碼中既有的函式名稱或完整類別名稱。

    • BASE_IMAGE_ID:函式的基礎映像檔環境。如要進一步瞭解基本映像檔,以及每個映像檔中包含的套件,請參閱「執行階段基本映像檔」。

    • REGION:要部署函式的 Google Cloud 區域。例如:europe-west1

  2. 執行下列指令,建立用於篩選及轉送事件的觸發條件:

    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 建立觸發條件」。

後續步驟