將 Firebase 警報事件轉送至 Cloud Run

Eventarc 觸發條件會宣告您對特定事件或一組事件感興趣。您可以為觸發條件指定篩選器 (包括事件來源) 和目標 Cloud Run 服務,藉此設定事件路由。

Eventarc 會透過 HTTP 要求,以 CloudEvents 格式將事件傳送至事件接收器。

請參閱下列操作說明,瞭解如何設定事件轉送,將直接Firebase Alerts 事件觸發的事件轉送至 Cloud Run 服務。詳情請參閱支援的直接事件清單。

準備建立觸發條件

建立觸發條件前,請先完成下列先決條件:

主控台

  1. 在 Google Cloud 控制台的專案選擇器頁面中,選取或建立 Google Cloud 專案

    前往專案選取器

  2. 啟用 Cloud Logging、Eventarc 和 Eventarc Publishing API。

    啟用 API

  3. 如有需要,請啟用與直接事件相關的 API。舉例來說,如要使用 Firebase Alerts 活動,請啟用Firebase Alerts API。

  4. 如果沒有,請建立使用者代管的服務帳戶,然後授予必要角色和權限,讓 Eventarc 管理目標服務的事件。

    1. 前往 Google Cloud 控制台的「建立服務帳戶」頁面。

      前往「Create service account」(建立服務帳戶)

    2. 選取專案。

    3. 在「Service account name」(服務帳戶名稱) 欄位中輸入名稱。 Google Cloud 控制台會根據這個名稱填入「服務帳戶 ID」欄位。

      在「服務帳戶說明」欄位中輸入說明。例如:Service account for event trigger

    4. 按一下「建立並繼續」

    5. 如要提供適當的存取權,請在「Select a role」(請選擇角色) 清單中,選取要授予服務帳戶的必要 Identity and Access Management (IAM) 角色,以進行已驗證或未驗證的叫用。詳情請參閱「Cloud Run 目標的角色和權限」。

      如要新增其他角色,請按一下「新增其他角色」,然後新增每個其他角色。

    6. 按一下「繼續」

    7. 按一下「完成」,即可完成帳戶建立程序。

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. 啟用 Cloud Logging、Eventarc 和 Eventarc Publishing API。

    gcloud services enable logging.googleapis.com \
      eventarc.googleapis.com \
      eventarcpublishing.googleapis.com

  3. 如有需要,請啟用與直接事件相關的 API。舉例來說,如要啟用 Firebase Alerts 活動,請啟用firestore.googleapis.com

  4. 如果沒有,請建立使用者代管的服務帳戶,然後授予必要角色和權限,讓 Eventarc 管理目標服務的事件。

    1. 建立服務帳戶:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      SERVICE_ACCOUNT_NAME 替換為服務帳戶名稱。長度必須介於 6 至 30 個字元之間,可以使用小寫英數字元和破折號。建立服務帳戶後,即無法變更名稱。

    2. 針對已驗證或未驗證的呼叫,授予必要的 Identity and Access Management (IAM) 角色或權限。詳情請參閱Cloud Run 目標的角色和權限

建立觸發條件

您可以使用 Google Cloud CLI 建立 Eventarc 觸發條件,或透過 Google Cloud 控制台建立。

主控台

  1. 在 Google Cloud 控制台中,前往 Eventarc「Triggers」(觸發條件) 頁面。

    前往「Triggers」(觸發條件)

  2. 按一下「建立觸發條件」
  3. 輸入觸發條件名稱

    這是觸發條件的 ID,開頭必須是英文字母。最多可包含 63 個小寫英文字母、數字或連字號。

  4. 在「Trigger type」(觸發條件類型) 中,選取「Google sources」(Google 來源)
  5. 在「Event provider」(事件提供者) 清單中,選取「Firebase Alerts」

    請注意,相關Google Cloud 文件中使用的事件提供者名稱可能沒有 CloudGoogle Cloud 前置字元。舉例來說,在控制台中,「Memorystore for Redis」稱為「Memorystore for Redis」Google Cloud

  6. 在「Event type」(事件類型) 清單中,從「Direct」(直接) 事件選取事件類型。
  7. 如要指定事件酬載的編碼,請在「事件資料內容類型」清單中,選取「application/json」或「application/protobuf」

    請注意,以 JSON 格式設定的事件酬載會比以 Protobuf 格式設定的酬載大。視事件目的地和事件大小限制而定,這可能會影響可靠性。詳情請參閱「已知問題」。

  8. 在「Region」(區域) 清單中選取「global (Global)」(全域 (全域))

    詳情請參閱「Eventarc 位置」。

  9. 在「Attribute 1」(屬性 1) 欄位中,alerttype resource ID 會做為事件篩選條件。選取這個篩選器的運算子:
  10. 在「Attribute value 1」(屬性值 1) 欄位中,輸入下列其中一個值:
    • appDistribution.inAppFeedback:測試人員為特定應用程式提交應用程式內意見回饋時,系統會傳送這項事件
    • appDistribution.newTesterIosDevice:當為特定應用程式註冊 iOS 測試人員裝置時,系統會傳送事件
    • billing.planAutomatedUpdate:當 Firebase 專案的帳單方案自動更新時,系統會傳送這項事件;例如,因付款問題而降級方案時
    • billing.planUpdate:使用者修改 Firebase 專案的帳單方案時會傳送這項事件,例如將帳單帳戶附加至專案或從專案中分離
    • crashlytics.missingSymbolFile:當 Firebase Crashlytics 判斷沒有適當的偵錯符號,無法對傳入的當機報告進行符號化時,系統就會傳送這個事件。
    • crashlytics.newAnrIssue:應用程式發生新的應用程式無回應 (ANR) 錯誤時,系統會傳送事件 (不適用於任何後續的相同事件)
    • crashlytics.newFatalIssue:應用程式發生新的嚴重當機事件時會傳送此事件 (不適用於任何後續的相同事件)
    • crashlytics.newNonfatalIssue:應用程式發生新的非致命錯誤時會傳送事件 (不適用於後續的相同事件)
    • crashlytics.regression:當應用程式發生當機情形,且問題已在先前版本中標示為已解決時,系統會傳送這項事件。
    • crashlytics.stabilityDigest:當 Crashlytics 顯示熱門問題的通知時,系統會傳送這項事件
    • crashlytics.velocity:如果單一問題導致大量應用程式工作階段異常終止,系統就會傳送這項事件
    • performance.threshold:當指標成效超過設定的門檻時,系統會傳送事件
  11. 您也可以選擇篩選特定 Firebase 應用程式 ID 的事件。按一下「新增篩選器」,然後指定 appid
  12. 選取要叫用服務或工作流程的服務帳戶

    或者,您也可以建立新的服務帳戶。

    這會指定與觸發程序相關聯的 Identity and Access Management (IAM) 服務帳戶電子郵件,您先前已授予該帳戶 Eventarc 所需的特定角色

  13. 在「Event destination」(事件目的地) 清單中,選取「Cloud Run」
  14. 選取服務。

    這是接收觸發條件事件的服務名稱。 這項服務必須與觸發條件位於同一專案,且每當產生事件時,都會收到以 HTTP POST 要求傳送至根網址路徑 (/) 的事件。

  15. 您可以視需要指定服務網址路徑,將傳入要求傳送至該路徑。

    這是目的地服務上的相對路徑,觸發條件的事件應傳送至該路徑。例如://routerouteroute/subroute

  16. 如要新增標籤,請按一下 「新增標籤」。標籤是鍵/值組合,可協助您整理Google Cloud 資源。詳情請參閱「什麼是標籤?
  17. 點選「建立」
  18. 觸發條件建立後,事件來源篩選器就無法修改。 請改為建立新的觸發條件,並刪除舊的觸發條件。詳情請參閱「管理觸發條件」。

gcloud

您可以執行 gcloud eventarc triggers create 指令,並搭配必要和選用旗標,建立觸發條件。

gcloud eventarc triggers create TRIGGER \
    --location=global \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=google.firebase.firebasealerts.alerts.v1.published" \
    --event-filters="alerttype=ALERT_TYPE" \
    --event-data-content-type="EVENT_DATA_CONTENT_TYPE" \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"

更改下列內容:

  • TRIGGER:觸發條件的 ID 或完整 ID。
  • DESTINATION_RUN_SERVICE:接收觸發事件的 Cloud Run 服務名稱。服務可以位於 Cloud Run 支援的任何位置,不一定要與觸發條件位於相同位置。不過,服務必須與觸發程序位於同一專案,且每當產生事件時,都會收到以 HTTP POST 要求形式傳送至根網址路徑 (/) 的事件。
  • DESTINATION_RUN_REGION:(選用) 目的地 Cloud Run 服務所在的區域。如未指定,系統會假設服務與觸發程序位於同一區域。
  • ALERT_TYPE:Firebase 快訊類型,可以是下列其中一個值:
    • appDistribution.inAppFeedback:測試人員為特定應用程式提交應用程式內意見回饋時,系統會傳送這項事件
    • appDistribution.newTesterIosDevice:當為特定應用程式註冊 iOS 測試人員裝置時,系統會傳送事件
    • billing.planAutomatedUpdate:當 Firebase 專案的帳單方案自動更新時,系統會傳送這項事件;例如,因付款問題而降級方案時
    • billing.planUpdate:使用者修改 Firebase 專案的帳單方案時會傳送這項事件,例如將帳單帳戶附加至專案或從專案中分離
    • crashlytics.missingSymbolFile:當 Firebase Crashlytics 判斷沒有適當的偵錯符號,無法對傳入的當機報告進行符號化時,系統就會傳送這個事件。
    • crashlytics.newAnrIssue:應用程式發生新的應用程式無回應 (ANR) 錯誤時,系統會傳送事件 (不適用於任何後續的相同事件)
    • crashlytics.newFatalIssue:應用程式發生新的嚴重當機事件時會傳送此事件 (不適用於任何後續的相同事件)
    • crashlytics.newNonfatalIssue:應用程式發生新的非致命錯誤時會傳送事件 (不適用於後續的相同事件)
    • crashlytics.regression:當應用程式發生當機情形,且問題已在先前版本中標示為已解決時,系統會傳送這項事件。
    • crashlytics.stabilityDigest:當 Crashlytics 顯示熱門問題的通知時,系統會傳送這項事件
    • crashlytics.velocity:如果單一問題導致大量應用程式工作階段異常終止,系統就會傳送這項事件
    • performance.threshold:當指標成效超過設定的門檻時,系統會傳送事件
    ALERT_TYPE 的運算子必須是下列其中一項:
    • 相等,例如 --event-filters="alerttype=appDistribution.inAppFeedback"
    • 路徑模式,例如 --event-filters-path-pattern="alerttype=appDistribution.*"--event-filters-path-pattern="alerttype=crashlytics.new*"

      詳情請參閱「瞭解路徑模式」。

  • EVENT_DATA_CONTENT_TYPE:(選填) 事件酬載的編碼。 可以是 application/jsonapplication/protobuf。預設編碼為 application/json

    請注意,以 JSON 格式設定的事件酬載會比以 Protobuf 格式設定的酬載大。視事件目的地和事件大小限制而定,這可能會影響可靠性。詳情請參閱「已知問題」。

  • SERVICE_ACCOUNT_NAME:使用者管理的服務帳戶名稱。
  • PROJECT_ID:您的 Google Cloud 專案 ID。

注意:

  • 必須加上以下旗標:

    • --event-filters="type=google.firebase.firebasealerts.alerts.v1.published"
    • --event-filters="alerttype=ALERT_TYPE"--event-filters-path-pattern="alerttype=ALERT_TYPE"
  • 您也可以使用 --event-filters="appid=APP_ID" 標記並指定完全相符的項目,篩選特定 Firebase 應用程式 ID 的事件。

  • 建立觸發條件後,就無法變更事件篩選器類型。如要使用其他事件類型,請建立新的觸發條件。
  • --service-account 旗標用於指定與觸發程序相關聯的身分與存取權管理 (IAM) 服務帳戶電子郵件。
  • (選用) 使用 --destination-run-path 旗標,在目的地 Cloud Run 服務上指定相對路徑,觸發條件的事件應傳送至該路徑。

範例:

gcloud eventarc triggers create helloworld-trigger \
    --location=global \
    --destination-run-service=helloworld-events \
    --destination-run-region=us-central1 \
    --event-filters="type=google.firebase.firebasealerts.alerts.v1.published" \
    --event-filters="alerttype=crashlytics.velocity" \
    --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com

這個指令會為標示為 google.firebase.firebasealerts.alerts.v1.published 的事件和 crashlytics.velocity 警報類型,建立名為 helloworld-trigger 的觸發條件。

Terraform

您可以使用 Terraform 為 Cloud Run 目的地建立觸發程序。詳情請參閱「使用 Terraform 建立觸發條件」。

列出觸發條件

如要確認是否已建立觸發程序,請使用 Google Cloud CLI 或 Google Cloud 控制台列出 Eventarc 觸發程序。

主控台

  1. 在 Google Cloud 控制台中,前往 Eventarc「Triggers」(觸發條件) 頁面。

    前往「Triggers」(觸發條件)

    這個頁面會列出所有位置的觸發條件,並包含名稱、區域、事件供應商、目的地等詳細資料。

  2. 如要篩選觸發條件,請按照下列步驟操作:

    1. 按一下「篩選器」或「篩選器觸發條件」欄位。
    2. 在「屬性」清單中,選取要用來篩選觸發條件的選項。

    您可以選取單一屬性,或使用邏輯運算子 OR 新增更多屬性。

  3. 如要排序觸發條件,請按一下任何支援的欄標題旁的「排序」

gcloud

執行下列指令來列出觸發條件:

gcloud eventarc triggers list --location=-

這個指令會列出所有位置的觸發條件,並包含名稱、類型、目的地和狀態等詳細資料。

後續步驟