本指南展示了当您对指定集合内的文档进行更改时会触发的函数示例。
准备工作
在运行本指南中的示例代码之前,您需要执行以下操作:
示例
以下示例演示了如何编写响应 Firestore 触发器的函数。
示例 1:Hello Firestore 函数
以下示例会输出触发 Firestore 事件的字段:
Node.js
Python
Go
Java
C#
部署 Hello Firestore 函数
设置 Firestore 数据库(如果您尚未这样做)。
点击相应标签页即可获取有关所选工具的使用说明。
控制台
使用 Google Cloud 控制台创建函数时,您还可以为函数添加触发器。请按照以下步骤为函数创建触发器:
在 Google Cloud 控制台中,前往 Cloud Run:
点击编写函数,然后输入函数详细信息。如需详细了解如何在部署期间配置函数,请参阅部署函数。
在触发器部分中,点击添加触发器。
选择 Firestore 触发器。
在 Eventarc 触发器窗格中,修改触发器详细信息,如下所示:
在触发器名称字段中输入触发器的名称,或使用默认名称。
从列表中选择触发器类型以指定以下触发器类型之一:
Google 来源,用于为 Pub/Sub、Cloud Storage、Firestore 和其他 Google 事件提供方指定触发器。
第三方,用于与提供 Eventarc 来源的非 Google 提供方集成。如需了解详情,请参阅 Eventarc 中的第三方事件。
从事件提供方列表中选择 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 创建函数时,您必须先deploy函数,然后再创建触发器。请按照以下步骤为函数创建触发器:
在包含示例代码的目录中运行以下命令,以部署函数:
gcloud beta 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 使用默认计算服务账号。
event-filters
标志用于指定触发器监控的事件过滤条件。与所有event-filters
过滤条件匹配的事件会触发对函数的调用。每个触发器都必须具有受支持的事件类型。创建后,您无法更改事件过滤条件类型。如需更改事件过滤条件类型,您必须创建新的触发器并删除旧触发器。您可以酌情使用格式为ATTRIBUTE=VALUE
的受支持过滤条件重复--event-filters
标志来添加更多过滤条件。
按原样使用其他字段:
--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
。完成之后,点击保存。
此操作会创建一个新文档,从而触发您的函数。
如需确认您的函数已触发,请在 Google Cloud 控制台 Cloud Run 概览页面中点击该函数的链接名称,以打开服务详情页面。
选择日志标签页,然后查找此字符串:
Function triggered by change to: //firestore.googleapis.com/projects/your-project-id/databases/(default)'
示例 2:“转换为大写”函数
以下示例会检索用户添加的值,将该位置的字符串转换为大写,然后将该值替换为该大写字符串:
部署“转换为大写”函数
设置 Firestore 数据库(如果您尚未这样做)。
点击相应标签页即可获取有关所选工具的使用说明。
控制台
使用 Google Cloud 控制台创建函数时,您还可以为函数添加触发器。请按照以下步骤为函数创建触发器:
在 Google Cloud 控制台中,前往 Cloud Run:
点击编写函数,然后输入函数详细信息。如需详细了解如何在部署期间配置函数,请参阅部署函数。
在触发器部分中,点击添加触发器。
选择 Firestore 触发器。
在 Eventarc 触发器窗格中,修改触发器详细信息,如下所示:
在触发器名称字段中输入触发器的名称,或使用默认名称。
从列表中选择触发器类型以指定以下触发器类型之一:
Google 来源,用于为 Pub/Sub、Cloud Storage、Firestore 和其他 Google 事件提供方指定触发器。
第三方,用于与提供 Eventarc 来源的非 Google 提供方集成。如需了解详情,请参阅 Eventarc 中的第三方事件。
从事件提供方列表中选择 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 创建函数时,您必须先deploy函数,然后再创建触发器。请按照以下步骤为函数创建触发器:
在包含示例代码的目录中运行以下命令,以部署函数:
gcloud beta 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 使用默认计算服务账号。
event-filters
标志用于指定触发器监控的事件过滤条件。与所有event-filters
过滤条件匹配的事件会触发对函数的调用。每个触发器都必须具有受支持的事件类型。创建后,您无法更改事件过滤条件类型。如需更改事件过滤条件类型,您必须创建新的触发器并删除旧触发器。您可以酌情使用格式为ATTRIBUTE=VALUE
的受支持过滤条件重复--event-filters
标志来添加更多过滤条件。
按原样使用其他字段:
--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
集合中的所有文档都应被监控。如需了解详情,请参阅了解路径模式。
测试“转换为大写”函数
如需测试刚刚部署的“转换为大写”函数,请在 Firestore 数据库中设置一个名为 messages
的集合:
在 Google Cloud 控制台中,前往 Firestore 数据库页面:
点击开始使用集合。
指定
messages
作为集合 ID。如需开始添加集合的第一个文档,请在为其添加首个文档下接受自动生成的文档 ID。
如需触发已部署的函数,请添加一个文档,其字段名称为
original
,字段值为minka
。保存文档时,您可以看到值字段中的小写字词转换为大写字词。
如果您随后修改字段值以包含小写字母,则会再次触发该函数,并将所有小写字母转换为大写字母。
函数的限制
- 无法保证顺序。快速更改可能会以意想不到的顺序触发函数调用。
- 事件至少会被传送一次,但单个事件可能会导致多次调用函数。应该避免依赖“正好一次”机制,并编写幂等函数。
- 一个触发器与单一数据库相关联。您无法创建与多个数据库匹配的触发器。
- 删除数据库不会自动删除该数据库的任何触发器。触发器会停止传送事件,但会继续存在,直到您删除触发器。