Firestore-Trigger
Sie können Ihre Cloud Run-Funktionen so konfigurieren, dass sie durch Ereignisse in einer Firestore-Datenbank ausgelöst werden. Nach der Auslösung kann Ihre Funktion Als Reaktion auf diese Ereignisse eine Firestore-Datenbank lesen und aktualisieren und zwar durch die Firestore APIs und client-Bibliotheken.
Der typische Lebenszyklus einer Cloud Firestore-Funktion sieht so aus:
Sie wartet auf Änderungen an einem bestimmten Dokument.
Sie wird ausgelöst, wenn ein Ereignis eintritt, und führt dessen Aufgaben aus.
Sie empfängt ein Datenobjekt mit einem Snapshot des betreffenden Dokuments. Für
write
- oderupdate
-Ereignisse enthält das Datenobjekt Snapshots, die den Dokumentstatus vor und nach dem auslösenden Ereignis darstellen.
Ereignistypen
Firestore unterstützt Ereignisse vom Typ create
, update
, delete
und write
. Das write
-Ereignis umfasst alle Änderungen eines Dokuments.
Ereignistyp | Trigger |
---|---|
google.cloud.firestore.document.v1.created (Standard) |
Wird ausgelöst, wenn ein Dokument zum ersten Mal beschrieben wird. |
google.cloud.firestore.document.v1.updated |
Wird ausgelöst, wenn ein Dokument bereits existiert und sich ein Wert geändert hat. |
google.cloud.firestore.document.v1.deleted |
Wird ausgelöst, wenn ein Dokument mit Daten gelöscht wird. |
google.cloud.firestore.document.v1.written |
Wird ausgelöst, wenn ein Dokument erstellt, aktualisiert oder gelöscht wird. |
Platzhalter werden in Triggern in geschweiften Klammern dargestellt: "projects/YOUR_PROJECT_ID/databases/(default)/documents/collection/{document_wildcard}"
.
Dokumentpfad angeben
Wenn Sie eine Funktion auslösen möchten, müssen Sie den Dokumentpfad angeben, der überwacht werden soll. Der Dokumentpfad muss sich im selben Google Cloud-Projekt wie die Funktion befinden.
Hier sehen Sie ein paar Beispiele gültiger Dokumentpfade:
users/marie
: Gültiger Trigger. Überwacht ein einzelnes Dokument,/users/marie
.users/{username}
: Gültiger Trigger. Überwacht alle Nutzerdokumente. Bei Angabe von Platzhaltern werden alle Dokumente in der Sammlung überwacht.users/{username}/addresses
: Ungültiger Trigger. Bezieht sich auf die untergeordnete Sammlungaddresses
und nicht auf ein Dokument.users/{username}/addresses/home
: Gültiger Trigger. Überwacht das Privatadressdokument für alle Nutzer.users/{username}/addresses/{addressId}
: Gültiger Trigger. Überwacht alle Adressdokumente.users/{user=**}
: Gültiger Trigger. Überwacht alle Nutzerdokumente und alle Dokumente in untergeordneten Sammlungen unter jedem Nutzerdokument, z. B./users/userID/address/home
oder/users/userID/phone/work
.
Platzhalter und Parameter
Wenn Sie das Dokument, das überwacht werden soll, nicht kennen, verwenden Sie {wildcard}
anstelle der Dokument-ID:
users/{username}
wartet auf Änderungen für alle Nutzerdokumente.
Wenn in diesem Beispiel ein Feld in einem Dokument im Verzeichnis users
geändert wird, entspricht es einem Platzhalter namens {username}
.
Wenn ein Dokument in users
untergeordnete Sammlungen enthält und ein Feld in einem Dokument dieser Sammlungen geändert wird, wird der Platzhalter {username}
nicht ausgelöst. Wenn Sie auf Ereignisse in Untersammlungen reagieren möchten, verwenden Sie den Multi-Segment-Platzhalter {username=**}
.
Platzhalterübereinstimmungen werden aus Dokumentpfaden extrahiert. Sie können beliebig viele Platzhalter für explizite Sammlungs- oder Dokument-IDs festlegen. Sie können bis zu einen Platzhalter mit mehreren Segmenten wie {username=**}
verwenden.
Ereignisstrukturen
Dieser Trigger löst die Funktion mit einem Ereignis wie etwa dem folgenden aus:
{ "oldValue": { // Update and Delete operations only A Document object containing a pre-operation document snapshot }, "updateMask": { // Update operations only A DocumentMask object that lists changed fields. }, "value": { // A Document object containing a post-operation document snapshot } }
Jedes Document
-Objekt enthält ein oder mehrere Value
-Objekte. Informationen zu Typreferenzen finden Sie in der Dokumentation zu Value
. Diese sind besonders hilfreich, wenn Sie eine Programmiersprache wie Go zum Schreiben Ihrer Funktionen verwenden.
Beispiele
In den folgenden Beispielen wird gezeigt, wie Sie Funktionen schreiben, die auf einen Firestore-Trigger reagieren.
Hinweise
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Artifact Registry, Eventarc, Logging, Pub/Sub, and Cloud Run APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Functions, Cloud Build, Artifact Registry, Eventarc, Logging, Pub/Sub, and Cloud Run APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Bereiten Sie die Entwicklungsumgebung vor.
Node.js
Python
Go
Java
C#
Ruby
PHP
Wenn Sie die gcloud CLI bereits installiert haben, aktualisieren Sie sie mit dem folgenden Befehl:
gcloud components update
Firestore-Datenbank einrichten
Sie benötigen eine Cloud Firestore-Datenbank, um die Beispiele in diesem Dokument zu testen. Sie muss vorhanden sein, bevor Sie die Funktionen bereitstellen. Wenn Sie noch keine Firestore-Datenbank haben, erstellen Sie so eine:
Klicken Sie auf Nativen Modus auswählen.
Wählen Sie die Region (Standort) aus, in der sich die Datenbank befinden soll. Diese Entscheidung ist endgültig.
Klicken Sie auf Create database (Datenbank erstellen).
Das Firestore-Datenmodell besteht aus Sammlungen, die Dokumente enthalten. Jedes Dokument enthält eine Reihe von Schlüssel/Wert-Paaren.
Die in dieser Anleitung erstellten Funktionen werden ausgelöst, wenn Sie Änderungen an einem Dokument innerhalb einer angegebenen Sammlung vornehmen.
Beispiel 1: Hello Firestore-Funktion
Die folgende beispielhafte Cloud Run-Funktion gibt die Felder eines auslösenden Cloud Firestore-Ereignisses aus:
Node.js
Decodieren Sie die Ereignisdaten mit protobufjs. Fügen Sie google.events.cloud.firestore.v1
data.proto
in Ihre Quelle ein.
Python
Go
Java
C#
Funktion "Hello Firestore" bereitstellen
Richten Sie Ihre Firestore-Datenbank ein, falls noch nicht geschehen.
Führen Sie den folgenden Befehl in dem Verzeichnis aus, das den Beispielcode (oder im Fall von Java die Datei
pom.xml
) enthält, um die Hello Firestore-Funktion mit einem Firestore-Trigger bereitzustellen:gcloud functions deploy FUNCTION_NAME \ --gen2 \ --runtime=RUNTIME \ --region=REGION \ --trigger-location=TRIGGER REGION \ --source=. \ --entry-point=ENTRY_POINT \ --trigger-event-filters=type=google.cloud.firestore.document.v1.written \ --trigger-event-filters=database='(default)' \ --trigger-event-filters-path-pattern=document='users/{username}'
Ersetzen Sie Folgendes:
FUNCTION_NAME
: Ein Name für die bereitgestellte Funktion.RUNTIME
: Die Sprachlaufzeit, die Ihre Funktion verwendet.REGION
: Die Region, in der die Funktion bereitgestellt werden soll.TRIGGER_REGION
: Der Speicherort des Triggers, der der Region der Firestore-Datenbank entsprechen muss.ENTRY_POINT
: Der Einstiegspunkt zur Funktion in Ihrem Quellcode. Dies ist der Code, der beim Ausführen der Funktion ausgeführt wird.
Die anderen Felder unverändert verwenden:
--trigger-event-filters=type=google.cloud.firestore.document.v1.written
gibt an, dass die Funktion ausgelöst wird, wenn ein Dokument gemäß dem Ereignistypgoogle.cloud.firestore.document.v1.written
erstellt, aktualisiert oder gelöscht wird.--trigger-event-filters=database='(default)'
gibt die Firebase-Datenbank an. Verwenden Sie für den Standarddatenbanknamen(default)
.--trigger-event-filters-path-pattern=document='users/{username}'
enthält das Pfadmuster der Dokumente, die auf relevante Änderungen überwacht werden sollen. Dieses Pfadmuster gibt an, dass alle Dokumente in der Sammlungusers
überwacht werden sollen. Weitere Informationen finden Sie unter Informationen zu Pfadmustern.
Funktion "Hello Firestore" testen
Zum Testen der Funktion Hello Firestore richten Sie eine Sammlung mit dem Namen users
in Ihrer Firestore-Datenbank ein:
Klicken Sie auf der Firestore-Datenseite auf Sammlung starten.
Geben Sie
users
als Sammlungs-ID an.Um das erste Dokument der Sammlung hinzuzufügen, akzeptieren Sie unter Erstes Dokument hinzufügen die automatisch generierte Dokument-ID.
Fügen Sie mindestens ein Feld für das Dokument hinzu und geben Sie einen Namen und einen Wert an. In diesem Beispiel lautet der Name „username“ und der Wert „rowan:“
Wenn Sie fertig sind, klicken Sie auf Speichern.
Dadurch wird ein neues Dokument erstellt und die Funktion wird ausgelöst.
Klicken Sie auf der Übersichtsseite "Cloud Run Functions" in der Google Cloud Console auf den verknüpften Namen der Funktion, um Funktionsdetails zu öffnen und zu prüfen, ob die Funktion ausgelöst wurde.
Öffnen Sie den Tab Protokolle und suchen Sie nach diesem String:
Function triggered by change to: //firestore.googleapis.com/projects/your-project-id/databases/(default)'
Beispiel 2: In Großbuchstaben konvertieren-Funktion
In diesem Beispiel wird der vom Nutzer hinzugefügte Wert abgerufen, der String an dieser Stelle in Großbuchstaben umgewandelt und der Wert durch den String in Großbuchstaben ersetzt:
Node.js
Decodieren Sie die Ereignisdaten mit protobufjs. Fügen Sie google.events.cloud.firestore.v1
data.proto
in Ihre Quelle ein.
Python
Go
Java
C#
Funktion "In Großbuchstaben umwandeln" bereitstellen
Richten Sie Ihre Firestore-Datenbank ein, falls noch nicht geschehen.
Verwenden Sie den folgenden Befehl, um eine Funktion bereitzustellen, die durch Schreibereignisse im Dokument
companies/{CompanyId}
ausgelöst wird:gcloud functions deploy FUNCTION_NAME \ --gen2 \ --runtime=RUNTIME \ --trigger-location=TRIGGER REGION \ --region=REGION \ --source=. \ --entry-point=ENTRY_POINT \ --set-env-vars GOOGLE_CLOUD_PROJECT=PROJECT_ID \ --trigger-event-filters=type=google.cloud.firestore.document.v1.written \ --trigger-event-filters=database='(default)' \ --trigger-event-filters-path-pattern=document='messages/{pushId}'
Ersetzen Sie Folgendes:
FUNCTION_NAME
: Ein Name für die bereitgestellte Funktion.RUNTIME
: Die Sprachlaufzeit, die Ihre Funktion verwendet.REGION
: Die Region, in der die Funktion bereitgestellt werden soll.TRIGGER_REGION
: Der Speicherort des Triggers, der der Region der Firestore-Datenbank entsprechen muss.ENTRY_POINT
: Der Einstiegspunkt zur Funktion in Ihrem Quellcode. Dies ist der Code, der beim Ausführen der Funktion ausgeführt wird.PROJECT_ID
: Die eindeutige Kennung des Projekts.
Verwenden Sie die anderen Felder unverändert:
--trigger-event-filters=type=google.cloud.firestore.document.v1.written
gibt an, dass die Funktion ausgelöst wird, wenn ein Dokument gemäß dem Ereignistypgoogle.cloud.firestore.document.v1.written
erstellt, aktualisiert oder gelöscht wird.--trigger-event-filters=database='(default)'
gibt die Firestore-Datenbank an. Verwenden Sie für den Standarddatenbanknamen(default)
.--trigger-event-filters-path-pattern=document='messages/{pushId}'
enthält das Pfadmuster der Dokumente, die auf relevante Änderungen überwacht werden sollen. Dieses Pfadmuster gibt an, dass alle Dokumente in der Sammlungmessages
überwacht werden sollen. Weitere Informationen finden Sie unter Informationen zu Pfadmustern.
Funktion "In Großbuchstaben umwandeln" testen
Richten Sie eine Sammlung mit dem Namen messages
in Ihrer Firestore-Datenbank ein, um die gerade bereitgestellte Funktion In Großbuchstaben umwandeln zu testen:
Klicken Sie auf Sammlung starten.
Geben Sie
messages
als Sammlungs-ID an.Um das erste Dokument der Sammlung hinzuzufügen, akzeptieren Sie unter Erstes Dokument hinzufügen die automatisch generierte Dokument-ID.
Um die bereitgestellte Funktion auszulösen, fügen Sie ein Dokument mit dem Namen "Original" und einem Feldwert in Kleinbuchstaben hinzu. Beispiel:
Beim Speichern des Dokuments wird das Wort in Kleinbuchstaben im Wertfeld in ein Wort in Großbuchstaben umgewandelt.
Wenn Sie den Feldwert anschließend so bearbeiten, dass er Kleinbuchstaben enthält, wird die Funktion noch einmal ausgelöst. Dadurch werden alle Kleinbuchstaben in Großbuchstaben umgewandelt.
Beschränkungen
- Die Reihenfolge ist nicht garantiert. Schnelle Änderungen können Funktionsaufrufe in einer unvorhergesehenen Reihenfolge auslösen.
- Ereignisse werden mindestens einmal übergeben. Ein einzelnes Ereignis kann aber zu mehreren Funktionsaufrufen führen. Vermeiden Sie die Abhängigkeit von genau einmal vorkommenden Verfahren und schreiben Sie idempotente Funktionen.
- Ein Trigger ist mit einer einzelnen Datenbank verknüpft. Sie können keinen Trigger erstellen, der mit mehreren Datenbanken übereinstimmt.
- Durch das Löschen einer Datenbank werden Trigger für diese Datenbank nicht automatisch gelöscht. Der Trigger sendet keine Ereignisse mehr, bleibt aber bestehen, bis Sie ihn löschen.