Wenn Sie mit Cloud Functions beginnen möchten, arbeiten Sie diese Anleitung durch. Sie beginnt mit den erforderlichen Einrichtungsschritten und führt Sie durch das Erstellen, Testen, und Bereitstellen von zwei zugehörigen Funktionen:
- Eine Funktion zum Hinzufügen von Nachrichten, die eine URL bereitstellt, die einen Textwert akzeptiert und ihn in Cloud Firestoreschreibt.
- Eine Funktion zum Umwandeln in Großbuchstaben, die bei einem Cloud Firestore Schreibvorgang ausgelöst wird und den Text in Großbuchstaben umwandelt.
Wir haben Cloud Firestore und HTTP-ausgelöste JavaScript-Funktionen für dieses Beispiel ausgewählt, da diese Hintergrundtrigger mit der Firebase Local Emulator Suite gründlich getestet werden können. Dieses Toolset unterstützt auch Realtime Database, Pub/Sub-, Auth- und HTTP-aufrufbare Trigger. Andere Arten von Hintergrundtriggern wie Remote Config, Test Lab- und Analytics-Trigger können alle interaktiv getestet werden mit Toolsets, die auf dieser Seite nicht beschrieben werden.
In den folgenden Abschnitten dieser Anleitung werden die Schritte beschrieben, die zum Erstellen, Testen und Bereitstellen des Beispiels erforderlich sind. Wenn Sie den Code nur ausführen und prüfen möchten, springen Sie zu Vollständigen Beispielcode ansehen.
Firebase-Projekt erstellen
Neu bei Firebase oder Cloud
Folgen Sie dieser Anleitung, wenn Sie Firebase oder Google Cloud noch nicht kennen.
Sie können diese Schritte auch ausführen, wenn Sie ein völlig neues
Firebase-Projekt (und das zugrunde liegende Google Cloud Projekt) erstellen möchten.
- Melden Sie sich in der Firebase Console an.
- Klicken Sie auf die Schaltfläche, um ein neues Firebase-Projekt zu erstellen.
-
Geben Sie im Textfeld einen Projektnamen ein.
Wenn Sie Teil einer Google Cloud Organisation sind, können Sie optional auswählen, in welchem Ordner Sie Ihr Projekt erstellen.
- Prüfen und akzeptieren Sie gegebenenfalls die Firebase-Nutzungsbedingungen, klicken Sie dann auf Weiter.
- (Optional) Aktivieren Sie die KI-Unterstützung in der Firebase Konsole (Gemini in Firebase genannt). Sie kann Ihnen den Einstieg erleichtern und Ihren Entwicklungsprozess optimieren.
-
(Optional) Richten Sie Google Analytics für Ihr Projekt ein. Dadurch können Sie diese Firebase-Produkte optimal nutzen: Firebase A/B Testing, Cloud Messaging, Crashlytics, In-App Messaging und Remote Config (einschließlich Personalisierung).
Wählen Sie entweder ein vorhandenes Google Analytics Konto aus oder erstellen Sie ein neues Konto. Wenn Sie ein neues Konto erstellen, wählen Sie Ihren Analytics Berichtsstandort, dann akzeptieren Sie die Einstellungen zur Datenfreigabe und die Google Analytics Bedingungen für Ihr Projekt.
- Klicken Sie auf Projekt erstellen.
Firebase erstellt Ihr Projekt, stellt einige erste Ressourcen bereit und aktiviert wichtige APIs. Nach Abschluss des Vorgangs werden Sie zur Übersichtsseite für Ihr Firebase-Projekt in der Firebase Console weitergeleitet.
Vorhandenes Cloud-Projekt
Folgen Sie dieser Anleitung, wenn Sie Firebase mit einem vorhandenen Google Cloud Projekt verwenden möchten. Weitere Informationen und Fehlerbehebung zum Hinzufügen von Firebase zu einem vorhandenen Google Cloud Projekt.
- Melden Sie sich in der Firebase Konsole mit dem Konto an, mit dem Sie auf das vorhandene Google Cloud Projekt zugreifen können.
- Klicken Sie auf die Schaltfläche, um ein neues Firebase-Projekt zu erstellen.
- Klicken Sie unten auf der Seite auf Firebase dem Google Cloud-Projekt hinzufügen.
- Geben Sie im Textfeld den Projektnamen des vorhandenen Projekts ein und wählen Sie das Projekt dann aus der angezeigten Liste aus.
- Klicken Sie auf Projekt öffnen.
- Prüfen und akzeptieren Sie gegebenenfalls die Firebase-Nutzungsbedingungen, klicken Sie dann auf Weiter.
- (Optional) Aktivieren Sie die KI-Unterstützung in der Firebase Konsole (Gemini in Firebase genannt). Sie kann Ihnen den Einstieg erleichtern und Ihren Entwicklungsprozess optimieren.
-
(Optional) Richten Sie Google Analytics für Ihr Projekt ein. Dadurch können Sie diese Firebase-Produkte optimal nutzen: Firebase A/B Testing, Cloud Messaging, Crashlytics, In-App Messaging und Remote Config (einschließlich Personalisierung).
Wählen Sie entweder ein vorhandenes Google Analytics Konto aus oder erstellen Sie ein neues Konto. Wenn Sie ein neues Konto erstellen, wählen Sie Ihren Analytics Berichtsstandort, dann akzeptieren Sie die Einstellungen zur Datenfreigabe und die Google Analytics Bedingungen für Ihr Projekt.
- Klicken Sie auf Firebase hinzufügen.
Firebase fügt Firebase Ihrem vorhandenen Projekt hinzu. Nach Abschluss des Vorgangs werden Sie zur Übersichtsseite für Ihr Firebase-Projekt in der Firebase Console weitergeleitet.
Node.js und die Firebase CLI einrichten
Sie benötigen eine Node.js-Umgebung, um Funktionen zu schreiben, und die Firebase CLI, um Funktionen in der Cloud Functions-Laufzeit bereitzustellen. Für die Installation von Node.js und npm, Node Version Manager wird empfohlen.
Nachdem Sie Node.js und npm installiert haben, installieren Sie die Firebase CLI mit der gewünschten Methode. So installieren Sie die CLI über npm:
npm install -g firebase-tools
Dadurch wird der global verfügbare Befehl `firebase` installiert. Wenn
der Befehl fehlschlägt, müssen Sie möglicherweise die
npm-Berechtigungen ändern.
Wenn Sie auf die neueste Version von firebase-tools aktualisieren möchten, führen Sie denselben Befehl noch einmal aus.
Projekt initialisieren
Wenn Sie das Firebase SDK für Cloud Functions initialisieren, erstellen Sie ein leeres Projekt mit Abhängigkeiten und etwas minimalem Beispielcode. Außerdem wählen Sie entweder TypeScript oder JavaScript zum Erstellen von Funktionen aus. Für diese Anleitung müssen Sie auch Cloud Firestoreinitialisieren.
So initialisieren Sie Ihr Projekt:
Führen Sie
firebase loginaus, um sich über den Browser anzumelden und die Firebase CLI zu authentifizieren.Wechseln Sie zu Ihrem Firebase-Projektverzeichnis.
Führen Sie
firebase init firestoreaus. Für diese Anleitung können Sie die Standardwerte akzeptieren, wenn Sie nach Firestore-Regeln und Indexdateien gefragt werden. Wenn Sie Cloud Firestore in diesem Projekt noch nicht verwendet haben, müssen Sie außerdem einen Startmodus und einen Standort für Firestore auswählen, wie unter Erste Schritte mit Cloud Firestore beschrieben.Führen Sie
firebase init functionsaus. Sie werden aufgefordert, eine vorhandene Codebasis auszuwählen oder eine neue zu initialisieren und zu benennen. Wenn Sie gerade erst anfangen, reicht eine einzelne Codebasis am standardmäßigen Standort aus. Später, wenn Ihre Implementierung größer wird, möchten Sie möglicherweise Funktionen in Codebasen organisieren.Die CLI bietet die folgenden Optionen für die Sprachunterstützung:
- JavaScript
- Python
- TypeScript Weitere Informationen finden Sie unter Funktionen mit TypeScript schreiben.
Wählen Sie für diese Anleitung JavaScript aus.
Die CLI bietet Ihnen die Möglichkeit, Abhängigkeiten mit npm zu installieren. Sie können die Installation ablehnen, wenn Sie Abhängigkeiten auf andere Weise verwalten möchten. Wenn Sie die Installation ablehnen, müssen Sie jedoch
npm installausführen, bevor Sie Ihre Funktionen emulieren oder bereitstellen.
Nachdem diese Befehle erfolgreich ausgeführt wurden, sieht Ihre Projektstruktur so aus:
myproject
+- .firebaserc # Hidden file that helps you quickly switch between
| # projects with `firebase use`
|
+- firebase.json # Describes properties for your project
|
+- functions/ # Directory containing all your functions code
|
+- .eslintrc.json # Optional file containing rules for JavaScript linting.
|
+- package.json # npm package file describing your Cloud Functions code
|
+- index.js # main source file for your Cloud Functions code
|
+- node_modules/ # directory where your dependencies (declared in
# package.json) are installed
Die während der Initialisierung erstellte Datei package.json enthält einen wichtigen
Schlüssel: "engines": {"node": "16"}. Damit wird Ihre Node.js-Version zum Schreiben und Bereitstellen von Funktionen angegeben. Sie können
auch andere unterstützte Versionen auswählen.
Erforderliche Module importieren und eine App initialisieren
Nachdem Sie die Einrichtungsschritte ausgeführt haben, können Sie das Quellverzeichnis öffnen und Code hinzufügen, wie in den folgenden Abschnitten beschrieben. Für dieses Beispiel muss Ihr Projekt die
Cloud Functions und Admin SDK Module mit Node require
Anweisungen importieren. Fügen Sie Ihrer Datei index.js Zeilen wie die folgenden hinzu:
// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers. const functions = require('firebase-functions/v1'); // The Firebase Admin SDK to access Firestore. const admin = require("firebase-admin"); admin.initializeApp();
Diese Zeilen laden die firebase-functions und firebase-admin Module, und
initialisieren eine admin App-Instanz, über die Cloud Firestore Änderungen vorgenommen werden können.
Wo immer die Unterstützung für das Admin SDK verfügbar ist, wie bei
FCM, Authentication und Firebase Realtime Database, bietet es eine
leistungsstarke Möglichkeit, Firebase mit Cloud Functions zu verknüpfen.
Die Firebase CLI installiert automatisch
die Firebase- und Firebase SDK for Cloud Functions Node-Module, wenn Sie Ihr Projekt initialisieren. Wenn Sie Ihrem Projekt Bibliotheken von Drittanbietern hinzufügen möchten, können Sie package.json ändern und npm install ausführen.
Weitere Informationen finden Sie unter
Abhängigkeiten verwalten.
Die Funktion addMessage() hinzufügen
Fügen Sie für die Funktion addMessage() diese Zeilen zu index.js hinzu:
// Take the text parameter passed to this HTTP endpoint and insert it into // Firestore under the path /messages/:documentId/original exports.addMessage = functions.https.onRequest(async (req, res) => { // Grab the text parameter. const original = req.query.text; // Push the new message into Firestore using the Firebase Admin SDK. const writeResult = await admin .firestore() .collection("messages") .add({ original: original }); // Send back a message that we've successfully written the message res.json({ result: `Message with ID: ${writeResult.id} added.` }); });
Die Funktion addMessage() ist ein HTTP-Endpunkt. Jede Anfrage an den Endpunkt
führt dazu, dass Request- und Response-Objekte im ExpressJS-Stil an den
Request und Response
Objekte an den
onRequest() Callback übergeben werden.
HTTP-Funktionen sind synchron (ähnlich wie
aufrufbare Funktionen). Sie sollten daher so schnell wie möglich eine Antwort senden
und die Arbeit mit Cloud Firestore aufschieben. Die HTTP-Funktion addMessage() übergibt einen Textwert an den HTTP-Endpunkt und fügt ihn unter dem Pfad /messages/:documentId/original in die Datenbank ein.
Die Funktion makeUppercase() hinzufügen
Fügen Sie für die Funktion makeUppercase() diese Zeilen zu index.js hinzu:
// Listens for new messages added to /messages/:documentId/original and creates an // uppercase version of the message to /messages/:documentId/uppercase exports.makeUppercase = functions.firestore .document("/messages/{documentId}") .onCreate((snap, context) => { // Grab the current value of what was written to Firestore. const original = snap.data().original; // Access the parameter `{documentId}` with `context.params` functions.logger.log("Uppercasing", context.params.documentId, original); const uppercase = original.toUpperCase(); // You must return a Promise when performing asynchronous tasks inside a Functions such as // writing to Firestore. // Setting an 'uppercase' field in Firestore document returns a Promise. return snap.ref.set({ uppercase }, { merge: true }); });
Die makeUppercase() Funktion wird ausgeführt, wenn in Cloud Firestore geschrieben wird. Die Funktion ref.set definiert das Dokument, das überwacht werden soll. Aus Leistungsgründen sollten Sie so genau wie möglich sein.
Geschweifte Klammern, z. B. {documentId}, umgeben „Parameter“, Platzhalter, die ihre übereinstimmenden Daten im Callback verfügbar machen.
Cloud Firestore löst den
onCreate()
Callback aus, wenn neue Nachrichten hinzugefügt werden.
Ereignisgesteuerte Funktionen wie Cloud Firestore Ereignisse sind
asynchron. Die Callback-Funktion sollte entweder ein null, ein Objekt,
oder ein Promise zurückgeben.
Wenn Sie nichts zurückgeben, tritt für die Funktion ein Zeitlimit auf, was einen Fehler signalisiert, und sie wird noch einmal ausgeführt. Weitere Informationen finden Sie unter Synchron, asynchron und Promises.
Ausführung Ihrer Funktionen emulieren
Die Firebase Local Emulator Suite ermöglicht Ihnen das Erstellen und Testen von Apps auf Ihrem lokalen Computer, anstatt sie in einem Firebase-Projekt bereitzustellen. Lokale Tests während der Entwicklung werden dringend empfohlen, da sie unter anderem das Risiko von Programmierfehlern verringern, die in einer Produktionsumgebung Kosten verursachen könnten (z. B. eine Endlosschleife).
So emulieren Sie Ihre Funktionen:
Führen Sie
firebase emulators:startaus und suchen Sie in der Ausgabe nach der URL der Emulator Suite UI. Standardmäßig ist sie auf „localhost:4000“ festgelegt, kann aber auf einem anderen Port auf Ihrem Computer gehostet werden. Geben Sie diese URL in Ihrem Browser ein, um die Emulator Suite UI zu öffnen.Suchen Sie in der Ausgabe des Befehls
firebase emulators:startnach der URL der HTTP-FunktionaddMessage(). Sie sieht etwa so aus:http://localhost:5001/MY_PROJECT/us-central1/addMessage. Dabei gilt:MY_PROJECTwird durch Ihre Projekt-ID ersetzt.- Der Port kann auf Ihrem lokalen Computer abweichen.
Fügen Sie am Ende der URL der Funktion den Abfragestring
?text=uppercasemehinzu. Sie sollte etwa so aussehen:http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme. Optional können Sie die Nachricht "uppercaseme" in eine benutzerdefinierte Nachricht ändern.Erstellen Sie eine neue Nachricht, indem Sie die URL in einem neuen Tab in Ihrem Browser öffnen.
Sehen Sie sich die Auswirkungen der Funktionen in der Emulator Suite UI an:
Auf dem Tab Logs sollten neue Logs angezeigt werden, die darauf hinweisen, dass die Funktionen
addMessage()undmakeUppercase()ausgeführt wurden:i functions: Beginning execution of "addMessage"i functions: Beginning execution of "makeUppercase"Auf dem Tab Firestore sollte ein Dokument mit Ihrer ursprünglichen Nachricht sowie der in Großbuchstaben umgewandelten Version Ihrer Nachricht angezeigt werden. Wenn die ursprüngliche Nachricht „uppercaseme“ war, sehen Sie „UPPERCASEME“.
Funktionen in einer Produktionsumgebung bereitstellen
Sobald Ihre Funktionen im Emulator wie gewünscht funktionieren, können Sie sie in der Produktionsumgebung bereitstellen, testen und ausführen. Beachten Sie dass Ihr Projekt den Tarif „Blaze-Preismodell“ haben muss, um in der Node.js 14-Laufzeitumgebung bereitgestellt zu werden. Weitere Informationen finden Sie unter Cloud Functions Preise.
Um die Anleitung abzuschließen, stellen Sie Ihre Funktionen bereit und führen Sie dann addMessage() aus, um makeUppercase() auszulösen.
Führen Sie diesen Befehl aus, um Ihre Funktionen bereitzustellen:
firebase deploy --only functions
Nachdem Sie diesen Befehl ausgeführt haben, gibt die Firebase CLI die URL für alle HTTP-Funktions endpunkte aus. In Ihrem Terminal sollte eine Zeile wie die folgende angezeigt werden:
Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessageDie URL enthält Ihre Projekt-ID sowie eine Region für die HTTP Funktion. Obwohl Sie sich jetzt keine Sorgen machen müssen, sollten einige HTTP Funktionen in der Produktion einen Standort angeben, um die Netzwerklatenz zu minimieren.
Wenn Zugriffsfehler wie „Unable to authorize access to project“ auftreten, prüfen Sie die Aliasnamen Ihres Projekts.
Fügen Sie der von der CLI ausgegebenen URL
addMessage()einen Textabfrageparameter hinzu, und öffnen Sie sie in einem Browser:https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetooDie Funktion wird ausgeführt und der Browser wird zum Firebase Konsolenstandort in der Datenbank weitergeleitet, an dem der Textstring gespeichert ist. Dieses Schreibereignis löst
makeUppercase()aus, wodurch eine Version des Strings in Großbuchstaben geschrieben wird.
Nachdem Sie Funktionen bereitgestellt und ausgeführt haben, können Sie Logs in der Google Cloud Console ansehen. Wenn Sie Funktionen löschen in der Entwicklung oder Produktion müssen, verwenden Sie die Firebase CLI.
In der Produktion können Sie die Leistung der Funktion optimieren und die Kosten kontrollieren, indem Sie die Mindest- und Höchstanzahl der auszuführenden Instanzen festlegen. Weitere Informationen zu diesen Laufzeitoptionen finden Sie unter Skalierungsverhalten steuern.
Vollständigen Beispielcode ansehen
Hier ist die vollständige Datei functions/index.js mit den Funktionen addMessage() und makeUppercase(): Mit diesen Funktionen können Sie einen
Parameter an einen HTTP-Endpunkt
übergeben, der einen Wert in Cloud Firestoreschreibt und ihn dann umwandelt, indem alle Zeichen im String in Großbuchstaben umgewandelt werden.
// The Cloud Functions for Firebase SDK to create Cloud Functions and set up triggers. const functions = require('firebase-functions/v1'); // The Firebase Admin SDK to access Firestore. const admin = require("firebase-admin"); admin.initializeApp(); // Take the text parameter passed to this HTTP endpoint and insert it into // Firestore under the path /messages/:documentId/original exports.addMessage = functions.https.onRequest(async (req, res) => { // Grab the text parameter. const original = req.query.text; // Push the new message into Firestore using the Firebase Admin SDK. const writeResult = await admin .firestore() .collection("messages") .add({ original: original }); // Send back a message that we've successfully written the message res.json({ result: `Message with ID: ${writeResult.id} added.` }); }); // Listens for new messages added to /messages/:documentId/original and creates an // uppercase version of the message to /messages/:documentId/uppercase exports.makeUppercase = functions.firestore .document("/messages/{documentId}") .onCreate((snap, context) => { // Grab the current value of what was written to Firestore. const original = snap.data().original; // Access the parameter `{documentId}` with `context.params` functions.logger.log("Uppercasing", context.params.documentId, original); const uppercase = original.toUpperCase(); // You must return a Promise when performing asynchronous tasks inside a Functions such as // writing to Firestore. // Setting an 'uppercase' field in Firestore document returns a Promise. return snap.ref.set({ uppercase }, { merge: true }); });
Nächste Schritte
In dieser Dokumentation erfahren Sie mehr darüber, wie Sie Funktionen verwalten für Cloud Functions und wie Sie alle von Cloud Functions unterstützten Ereignistypen verarbeiten.
Weitere Informationen zu Cloud Functions:
- Anwendungsfälle für Cloud Functions
- Codelab zu Cloud Functions
- Codebeispiele auf GitHub ansehen und ausführen