本指南會列舉一些範例,說明在您對特定集合中的文件進行變更時,會觸發哪些函式。
事前準備
在本指南中執行範例程式碼前,您必須先執行下列操作:
範例
以下範例說明如何編寫可回應 Firestore 觸發事件的函式。
範例 1:Hello Firestore 函式
以下範例會列印觸發 Firestore 事件的欄位:
Node.js
Python
Go
Java
C#
部署 Hello Firestore 函式
如果您尚未設定,請先設定 Firestore 資料庫。
按一下分頁標籤,瞭解如何使用自選工具。
主控台
使用 Google Cloud 控制台建立函式時,您也可以為函式新增觸發條件。請按照下列步驟為函式建立觸發條件:
前往 Google Cloud 控制台的 Cloud Run:
按一下「編寫函式」,然後輸入函式詳細資料。如要進一步瞭解如何在部署期間設定函式,請參閱「部署函式」。
在「觸發條件」部分中,按一下「新增觸發條件」。
選取「Firestore 觸發條件」。
在「Eventarc trigger」窗格中,修改觸發條件詳細資料,如下所示:
在「Trigger name」欄位中輸入觸發事件名稱,或使用預設名稱。
從清單中選取「觸發條件類型」,指定下列其中一種觸發條件類型:
Google 來源:指定 Pub/Sub、Cloud Storage、Firestore 和其他 Google 事件供應器的觸發事件。
第三方:整合提供 Eventarc 來源的非 Google 供應商。詳情請參閱「Eventarc 中的第三方事件」。
從「Event provider」清單中選取「Firestore」Firestore,即可選取提供事件類型以觸發函式的產品。如需事件提供者清單,請參閱「事件提供者和目的地」。
在「Event type」清單中,選取「type=google.cloud.firestore.document.v1.written」。觸發條件設定會因支援的事件類型而異。詳情請參閱「事件類型」。
在「篩選器」部分,選取資料庫、運算和屬性值,或使用預設選項。
如果已啟用「區域」欄位,請為 Eventarc 觸發條件選取「位置」。一般來說,Eventarc 觸發條件的位置應與您要監控事件的 Google Cloud 資源位置一致。在大多數情況下,您也應在相同的地區部署函式。如要進一步瞭解 Eventarc 觸發條件的所在位置,請參閱「瞭解 Eventarc 位置」。
在「服務帳戶」欄位中,選取服務帳戶。Eventarc 觸發事件會連結至服務帳戶,以便在叫用函式時做為身分使用。Eventarc 觸發事件的服務帳戶必須具備叫用函式的權限。根據預設,Cloud Run 會使用 Compute Engine 預設服務帳戶。
您可以視需要指定要傳送傳入要求的服務網址路徑。這是目的地服務中的相對路徑,應將觸發事件傳送至此路徑。例如:
/
、/route
、route
和route/subroute
。
填妥必填欄位後,按一下「儲存觸發條件」。
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=EVENTARC_TRIGGER_LOCATION \ --destination-run-service=FUNCTION \ --destination-run-region=REGION \ --event-filters=type=google.cloud.firestore.document.v1.written \ --event-filters=database='(default)' \ --event-data-content-type=application/protobuf \ --event-filters-path-pattern=document='users/{username}' \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
取代:
TRIGGER_NAME 替換為觸發條件的名稱。
EVENTARC_TRIGGER_LOCATION 與 Eventarc 觸發條件的所在位置。一般來說,Eventarc 觸發事件的位置應與您要監控事件的 Google Cloud 資源位置相符。在大多數情況下,您也應在相同的區域中部署函式。詳情請參閱「Eventarc 位置」。
FUNCTION 改為您要部署的函式名稱。
REGION 與函式的 Cloud Run region 搭配使用。
PROJECT_NUMBER 換成您的 Google Cloud 專案編號。Eventarc 觸發事件會連結至服務帳戶,以便在叫用函式時做為身分識別資訊使用。Eventarc 觸發事件的服務帳戶必須具備叫用函式的權限。根據預設,Cloud Run 會使用預設的 Compute 服務帳戶。
event-filters
標記可指定觸發事件監控的事件篩選器。符合所有event-filters
的事件會觸發對函式的呼叫,每個觸發條件都必須有支援的事件類型。建立後即無法變更事件篩選器類型。如要變更事件篩選器類型,您必須建立新的觸發條件,並刪除舊的觸發條件。您可以選擇在ATTRIBUTE=VALUE
表單中重複使用支援的篩選器,藉此新增更多篩選器。--event-filters
Terraform
如要為 Cloud Run 函式建立 Eventarc 觸發條件,請參閱「使用 Terraform 建立觸發條件」一文。
其他欄位則不必修改:
--event-filters=type=google.cloud.firestore.document.v1.written
會指定在建立、更新或刪除文件時,根據google.cloud.firestore.document.v1.written
事件類型觸發函式。--event-filters=database='(default)'
會指定 Firebase 資料庫。如要使用預設資料庫名稱,請使用(default)
。--event-filters-path-pattern=document='users/{username}'
會提供應監控相關變更的文件路徑模式。這個路徑模式表示應監控users
集合中的所有文件。詳情請參閱「瞭解路徑模式」。
測試 Hello Firestore 函式
如要測試 Hello Firestore 函式,請在 Firestore 資料庫中設定名為 users
的集合:
在 Google Cloud 控制台中,前往「Firestore 資料庫」頁面:
按一下「啟動集合」。
將
users
指定為集合 ID。如要開始新增集合的第一份文件,請在「新增第一份文件」下方接受系統自動產生的「文件 ID」。
為文件新增至少一個欄位,並指定名稱和值。例如,在「欄位名稱」中輸入
username
,並在「欄位值」中輸入rowan
。完成時,請按一下 [Save] (儲存)。
這項操作會建立新文件,進而觸發函式。
如要確認函式是否已觸發,請在 Google Cloud 控制台的 Cloud Run 總覽頁面中,按一下函式的連結名稱,開啟「Service details」(服務詳細資料) 頁面。
選取「Logs」分頁標籤,然後尋找以下字串:
Function triggered by change to: //firestore.googleapis.com/projects/your-project-id/databases/(default)'
範例 2:Convert to Uppercase 函式
以下範例會擷取使用者新增的值,將該位置的字串轉換為大寫,並以大寫字串取代該值:
部署 Convert to Uppercase 函式
如果您尚未設定,請先設定 Firestore 資料庫。
按一下分頁標籤,瞭解如何使用自選工具。
主控台
使用 Google Cloud 控制台建立函式時,您也可以為函式新增觸發條件。請按照下列步驟為函式建立觸發條件:
前往 Google Cloud 控制台的 Cloud Run:
按一下「編寫函式」,然後輸入函式詳細資料。如要進一步瞭解如何在部署期間設定函式,請參閱「部署函式」。
在「觸發條件」部分中,按一下「新增觸發條件」。
選取「Firestore 觸發條件」。
在「Eventarc trigger」窗格中,修改觸發條件詳細資料,如下所示:
在「Trigger name」欄位中輸入觸發事件名稱,或使用預設名稱。
從清單中選取「觸發條件類型」,指定下列其中一種觸發條件類型:
Google 來源:指定 Pub/Sub、Cloud Storage、Firestore 和其他 Google 事件供應器的觸發事件。
第三方:整合提供 Eventarc 來源的非 Google 供應商。詳情請參閱「Eventarc 中的第三方事件」。
從「Event provider」清單中選取「Firestore」Firestore,即可選取提供事件類型以觸發函式的產品。如需事件提供者清單,請參閱「事件提供者和目的地」。
在「Event type」清單中,選取「type=google.cloud.firestore.document.v1.written」。觸發條件設定會因支援的事件類型而異。詳情請參閱「事件類型」。
在「篩選器」部分,選取資料庫、運算和屬性值,或使用預設選項。
如果已啟用「區域」欄位,請為 Eventarc 觸發條件選取「位置」。一般來說,Eventarc 觸發條件的位置應與您要監控事件的 Google Cloud 資源位置一致。在大多數情況下,您也應在相同的地區部署函式。如要進一步瞭解 Eventarc 觸發條件的所在位置,請參閱「瞭解 Eventarc 位置」。
在「服務帳戶」欄位中,選取服務帳戶。Eventarc 觸發事件會連結至服務帳戶,以便在叫用函式時做為身分使用。Eventarc 觸發事件的服務帳戶必須具備叫用函式的權限。根據預設,Cloud Run 會使用 Compute Engine 預設服務帳戶。
您可以視需要指定要傳送傳入要求的服務網址路徑。這是目的地服務中的相對路徑,應將觸發事件傳送至此路徑。例如:
/
、/route
、route
和route/subroute
。
填妥必填欄位後,按一下「儲存觸發條件」。
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=EVENTARC_TRIGGER_LOCATION \ --destination-run-service=FUNCTION \ --destination-run-region=REGION \ --event-filters=type=google.cloud.firestore.document.v1.written \ --event-filters=database='(default)' \ --event-data-content-type=application/protobuf \ --event-filters-path-pattern=document='messages/{pushId}' \ --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
取代:
TRIGGER_NAME 替換為觸發條件的名稱。
EVENTARC_TRIGGER_LOCATION 與 Eventarc 觸發條件的所在位置。一般來說,Eventarc 觸發事件的位置應與您要監控事件的 Google Cloud 資源位置相符。在大多數情況下,您也應在相同的區域中部署函式。詳情請參閱「Eventarc 位置」。
FUNCTION 改為您要部署的函式名稱。
REGION 與函式的 Cloud Run region 搭配使用。
PROJECT_NUMBER 換成您的 Google Cloud 專案編號。Eventarc 觸發事件會連結至服務帳戶,以便在叫用函式時做為身分識別資訊使用。Eventarc 觸發事件的服務帳戶必須具備叫用函式的權限。根據預設,Cloud Run 會使用預設的 Compute 服務帳戶。
event-filters
標記可指定觸發事件監控的事件篩選器。符合所有event-filters
的事件會觸發對函式的呼叫,每個觸發條件都必須有支援的事件類型。建立後即無法變更事件篩選器類型。如要變更事件篩選器類型,您必須建立新的觸發條件,並刪除舊的觸發條件。您可以選擇在ATTRIBUTE=VALUE
表單中重複使用支援的篩選器,藉此新增更多篩選器。--event-filters
Terraform
如要為 Cloud Run 函式建立 Eventarc 觸發條件,請參閱「使用 Terraform 建立觸發條件」一文。
其他欄位則不需修改:
--event-filters=type=google.cloud.firestore.document.v1.written
會指定在建立、更新或刪除文件時,根據google.cloud.firestore.document.v1.written
事件類型觸發函式。--event-filters=database='(default)'
會指定 Firestore 資料庫。如要使用預設資料庫名稱,請使用(default)
。--event-filters-path-pattern=document='messages/{pushId}'
會提供應監控的文件路徑模式,以便監控相關變更。這個路徑模式表示應監控messages
集合中的所有文件。詳情請參閱「瞭解路徑模式」。
測試 Convert to Uppercase 函式
如要測試剛部署的 Convert to Uppercase 函式,請在 Firestore 資料庫中設定名為 messages
的集合:
在 Google Cloud 控制台中,前往「Firestore 資料庫」頁面:
按一下「啟動集合」。
將
messages
指定為集合 ID。如要開始新增集合的第一份文件,請在「新增第一份文件」下方接受系統自動產生的「文件 ID」。
如要觸發已部署的函式,請新增一個「欄位名稱」為
original
且「欄位值」為minka
的文件。儲存文件時,您會看到值欄中的小寫字詞轉換為大寫。
如果您之後編輯欄位值,使其包含小寫字母,系統會再次觸發函式,將所有小寫字母轉換為大寫。
函式限制
- 我們不保證排序。快速變更可能會以非預期的順序觸發函式叫用。
- 事件至少會傳送一次,但單一事件可能會導致多次函式叫用。避免依賴「一次一律」機制,並編寫冪等函式。
- 觸發條件會與單一資料庫相關聯。您無法建立符合多個資料庫的觸發條件。
- 刪除資料庫時,系統不會自動刪除該資料庫的任何觸發事件。觸發事件會停止傳送事件,但會持續存在,直到您刪除觸發事件為止。