本指南提供函式範例,說明在指定集合中變更文件時,如何觸發函式。
事前準備
執行本指南中的程式碼範例前,請先完成下列操作:
範例
下列範例說明如何編寫函式,回應 Firestore 觸發條件。
範例 1:Hello Firestore 函式
以下範例會輸出觸發 Firestore 事件的欄位:
Node.js
Python
Go
Java
C#
部署 Hello Firestore 函式
如果尚未設定,請先設定 Firestore 資料庫。
按一下分頁標籤,瞭解如何使用自選工具。
主控台
使用 Google Cloud 控制台建立函式時,也可以為函式新增觸發條件。請按照下列步驟為函式建立觸發條件:
前往 Google Cloud 控制台的 Cloud Run:
按一下「編寫函式」,然後輸入函式詳細資料。如要進一步瞭解如何在部署期間設定函式,請參閱「部署函式」。
在「觸發條件」部分中,按一下「新增觸發條件」。
選取「Firestore 觸發條件」。
在「Eventarc trigger」(Eventarc 觸發條件) 窗格中,按照下列步驟修改觸發條件詳細資料:
在「觸發條件名稱」欄位中輸入觸發條件名稱,或使用預設名稱。
從清單中選取「觸發條件類型」:
Google 來源:指定 Pub/Sub、Cloud Storage、Firestore 和其他 Google 事件供應商的觸發條件。
第三方:與提供 Eventarc 來源的非 Google 提供者整合。詳情請參閱「Eventarc 中的第三方事件」。
從「Event provider」(事件提供者) 清單中選取「Firestore」Firestore,即可選取提供事件類型的產品,觸發函式。如需事件提供者清單,請參閱事件提供者和目的地。
從「事件類型」清單中選取「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 區域。
將 PROJECT_NUMBER 改成您的 Google Cloud 專案編號。Eventarc 觸發程序會連結至服務帳戶,在叫用函式時做為身分。Eventarc 觸發程序的服務帳戶必須具備叫用函式的權限。根據預設,Cloud Run 會使用預設的 Compute 服務帳戶。
每個
event-filters
標記都會指定事件類型,且只有在事件符合event-filters
標記中指定的所有條件時,函式才會觸發。每個觸發條件都必須有event-filters
標記,指定支援的事件類型,例如寫入 Firestore 的新文件,或是上傳至 Cloud Storage 的檔案。建立事件篩選器後,就無法變更類型。 如要變更事件篩選器類型,請建立新觸發條件並刪除舊觸發條件。視需要重複使用--event-filters
旗標,並以ATTRIBUTE=VALUE
形式新增更多支援的篩選器。
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」。
為文件新增至少一個欄位,並指定名稱和值。 舉例來說,在「Field name」(欄位名稱) 中輸入
username
,在「Field value」(欄位值) 中輸入rowan
。完成時,請按一下 [Save] (儲存)。
這項操作會建立新文件,進而觸發函式。
如要確認函式已觸發,請在 Google Cloud 控制台的「Cloud Run Overview」(Cloud Run 總覽) 頁面中,按一下函式的連結名稱,開啟「Service details」(服務詳細資料) 頁面。
選取「記錄」分頁標籤,然後尋找以下字串:
Function triggered by change to: //firestore.googleapis.com/projects/your-project-id/databases/(default)'
範例 2:轉換為大寫函式
以下範例會擷取使用者新增的值、將該位置的字串轉換為大寫,並以大寫字串取代該值:
部署「Convert to Uppercase」函式
如果尚未設定,請先設定 Firestore 資料庫。
按一下分頁標籤,瞭解如何使用自選工具。
主控台
使用 Google Cloud 控制台建立函式時,也可以為函式新增觸發條件。請按照下列步驟為函式建立觸發條件:
前往 Google Cloud 控制台的 Cloud Run:
按一下「編寫函式」,然後輸入函式詳細資料。如要進一步瞭解如何在部署期間設定函式,請參閱「部署函式」。
在「觸發條件」部分中,按一下「新增觸發條件」。
選取「Firestore 觸發條件」。
在「Eventarc trigger」(Eventarc 觸發條件) 窗格中,按照下列步驟修改觸發條件詳細資料:
在「觸發條件名稱」欄位中輸入觸發條件名稱,或使用預設名稱。
從清單中選取「觸發條件類型」:
Google 來源:指定 Pub/Sub、Cloud Storage、Firestore 和其他 Google 事件供應商的觸發條件。
第三方:與提供 Eventarc 來源的非 Google 提供者整合。詳情請參閱「Eventarc 中的第三方事件」。
從「Event provider」(事件提供者) 清單中選取「Firestore」Firestore,即可選取提供事件類型的產品,觸發函式。如需事件提供者清單,請參閱事件提供者和目的地。
從「事件類型」清單中選取「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 區域。
將 PROJECT_NUMBER 改成您的 Google Cloud 專案編號。Eventarc 觸發程序會連結至服務帳戶,在叫用函式時做為身分。Eventarc 觸發程序的服務帳戶必須具備叫用函式的權限。根據預設,Cloud Run 會使用預設的 Compute 服務帳戶。
每個
event-filters
標記都會指定事件類型,且只有在事件符合event-filters
標記中指定的所有條件時,函式才會觸發。每個觸發條件都必須有event-filters
標記,指定支援的事件類型,例如寫入 Firestore 的新文件,或是上傳至 Cloud Storage 的檔案。建立事件篩選器後,就無法變更類型。 如要變更事件篩選器類型,請建立新觸發條件並刪除舊觸發條件。視需要重複使用--event-filters
旗標,並以ATTRIBUTE=VALUE
形式新增更多支援的篩選器。
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」函式,請在 Firestore 資料庫中設定名為 messages
的集合:
在 Google Cloud 控制台中,前往 Firestore 資料庫頁面:
按一下「啟動集合」。
將
messages
指定為集合 ID。如要開始新增集合的第一份文件,請在「新增第一份文件」下方,接受系統自動產生的「文件 ID」。
如要觸發已部署的函式,請新增文件,其中「欄位名稱」為
original
,「欄位值」為minka
。儲存文件時,您會發現值欄位中的小寫字會轉換為大寫。
如果後續編輯欄位值,使其包含小寫字母,系統會再次觸發函式,將所有小寫字母轉換為大寫。
函式限制
- 我們不保證排序。快速變更可能會以非預期的順序觸發函式呼叫。
- 系統至少會傳送一次事件,但單一事件可能會導致多次函式叫用。請避免依附於「只執行一次」機制,並編寫等冪函式。
- 觸發條件會與單一資料庫建立關聯。您無法建立與多個資料庫相符的觸發條件。
- 刪除資料庫時,系統不會自動刪除該資料庫的任何觸發程序。觸發程序會停止傳送事件,但會繼續存在,直到您刪除觸發程序為止。