Firebase Realtime Database-Trigger
Mit Cloud Run-Funktionen können Sie Ereignisse in der Firebase Realtime Database im selben Google Cloud-Projekt wie die Funktion verarbeiten. Cloud Run-Funktionen ermöglichen die Ausführung von Datenbankvorgängen mit vollen Administratorberechtigungen und stellen sicher, dass jede Änderung an der Datenbank einzeln verarbeitet wird. Sie können Änderungen an der Firebase Realtime Database über das Firebase Admin SDK vornehmen.
In einem typischen Lebenszyklus führt eine Firebase Realtime Database-Funktion folgende Vorgänge aus:
Sie wartet auf Änderungen an einem bestimmten Datenbankspeicherort.
Sie wird ausgelöst, wenn ein Ereignis eintritt, und führt dessen Aufgaben aus.
Sie erhält ein Datenobjekt, das einen Snapshot der im angegebenen Dokument gespeicherten Daten enthält.
Ereignistypen
Mit Cloud Functions können Sie Datenbankereignisse mit zwei Spezifitätsgraden verarbeiten: Sie können gezielt nur nach Erstellungs-, Aktualisierungs- oder Löschereignissen oder nach beliebigen Änderungen jeglicher Art an einem Pfad Ausschau halten. Cloud Run-Funktionen unterstützen für die Realtime Database die folgenden Ereignistypen:
Ereignistyp | Trigger |
---|---|
providers/google.firebase.database/eventTypes/ref.write |
Wird bei jedem Mutationsereignis ausgelöst: wenn Daten in der Echtzeitdatenbank erstellt, aktualisiert oder gelöscht werden |
providers/google.firebase.database/eventTypes/ref.create (Standard) |
Wird ausgelöst, wenn neue Daten in der Echtzeitdatenbank erstellt werden |
providers/google.firebase.database/eventTypes/ref.update |
Wird ausgelöst, wenn Daten in der Echtzeitdatenbank aktualisiert werden |
providers/google.firebase.database/eventTypes/ref.delete |
Wird ausgelöst, wenn Daten aus der Echtzeitdatenbank gelöscht werden |
Datenbankpfad und -instanz angeben
Wenn Sie festlegen möchten, wann und wo Ihre Funktion ausgelöst werden soll, müssen Sie einen Pfad – und optional eine Datenbankinstanz – angeben.
Pfad
Die Pfadspezifikationen gleichen alle Schreibvorgänge ab, die einen Pfad tangieren, einschließlich Schreibvorgängen, die an einem beliebigen untergeordneten Punkt auftreten. Wenn Sie als Pfad für Ihre Funktion /foo/bar
festlegen, werden die Ereignisse an diesen beiden Speicherorten abgeglichen:
/foo/bar
/foo/bar/baz/really/deep/path
In beiden Fällen geht Firebase davon aus, dass das Ereignis unter /foo/bar
auftritt, und die Ereignisdaten umfassen sowohl die alten als auch die neuen Daten unter /foo/bar
. Wenn die Ereignisdaten sehr umfangreich sein können, sollten Sie erwägen, mehrere Funktionen auf tieferen Pfadebenen anstatt lediglich einer Funktion im Bereich des Datenbankstamms zu verwenden. Für optimale Leistung sollten Sie Daten nur auf der untersten Ebene anfordern.
Sie können eine Pfadkomponente als Platzhalter angeben, indem Sie sie in geschweifte Klammern setzen. foo/{bar}
entspricht allen untergeordneten Elementen von /foo
. Die Werte dieser Platzhalterpfadkomponenten sind innerhalb des event.params
-Objekts Ihrer Funktion verfügbar.
In diesem Beispiel ist der Wert als event.params.bar
verfügbar.
Pfade mit Platzhaltern können mit mehreren Ereignissen aus einem einzigen Schreibvorgang übereinstimmen. Die Verwendung von
{
"foo": {
"hello": "world",
"firebase": "functions"
}
}
ergibt zwei Übereinstimmungen mit dem Pfad /foo/{bar}
: einmal "hello": "world"
und einmal "firebase": "functions"
.
Instanz
Bei Verwendung der Google Cloud Console muss die Datenbankinstanz angegeben werden.
Bei Verwendung des Google Cloud CLI muss die Instanz als Teil des --trigger-resource
-Strings angegeben werden.
In diesem Fall wird beispielsweise Folgendes in Ihrem String --trigger-resource
verwendet:
--trigger-resource projects/_/instances/DATABASE_INSTANCE/refs/PATH
Ereignisstruktur
Bei der Verarbeitung eines Realtime Database-Ereignisses enthält das Objekt data
zwei Attribute, die im JSON-Objektformat bereitgestellt werden:
data
: ein Snapshot der Daten vor dem Ereignis, das die Funktion ausgelöst hat.delta
: ein Snapshot der Daten nach dem Ereignis, das die Funktion ausgelöst hat.
Codebeispiel
Node.js
Python
Go
Java
C#
Ruby
PHP
Funktion bereitstellen
Mit dem folgenden gcloud-Befehl wird eine Funktion bereitgestellt, die durch create
-Ereignisse unter dem Pfad /messages/{pushId}/original
ausgelöst wird:
gcloud functions deploy FUNCTION_NAME \ --no-gen2 \ --entry-point ENTRY_POINT \ --trigger-event providers/google.firebase.database/eventTypes/ref.create \ --trigger-resource projects/_/instances/DATABASE_INSTANCE/refs/messages/{pushId}/original \ --runtime RUNTIME
Argument | Beschreibung |
---|---|
FUNCTION_NAME |
Der registrierte Name der Cloud Run Functions, die Sie bereitstellen.
Dies kann entweder der Name einer Funktion in Ihrem Quellcode oder ein beliebiger String sein. Wenn FUNCTION_NAME ein beliebiger String ist, müssen Sie das Flag --entry-point einfügen.
|
--entry-point ENTRY_POINT |
Der Name einer Funktion oder Klasse in Ihrem Quellcode. Optional, es sei denn, Sie haben FUNCTION_NAME nicht verwendet, um die Funktion in Ihrem Quellcode anzugeben, die während der Bereitstellung ausgeführt werden soll. In diesem Fall müssen Sie mit --entry-point den Namen der ausführbaren Funktion angeben.
|
--trigger-event NAME |
Der Name des Ereignistyps, den die Funktion erhalten möchte. In diesem Fall ist es einer der folgenden Typen: write, create, update oder delete. |
--trigger-resource NAME |
Der voll qualifizierte Datenbankpfad, den die Funktion überwacht.
Er sollte diesem Format entsprechen: projects/_/instances/DATABASE_INSTANCE/refs/PATH .
|
--runtime RUNTIME |
Der Name der Laufzeit, die Sie verwenden. Eine vollständige Liste finden Sie in der gcloud -Referenz.
|