Erste Schritte: Erste Funktionen schreiben, testen und bereitstellen


Arbeiten Sie diese Anleitung durch, um mit Cloud Functions loszulegen. die mit den erforderlichen Einrichtungsaufgaben beginnt und zwei verwandte Funktionen bereitstellen:

  • Eine Funktion „add message“, die eine URL bereitstellt, die einen Textwert akzeptiert und in Cloud Firestore schreibt.
  • „Großschreibung verwenden“ Funktion, die bei einem Cloud Firestore-Schreibvorgang ausgelöst und transformiert wird den Text in Großbuchstaben.

Wir haben für dieses Beispiel Cloud Firestore und HTTP-ausgelöste JavaScript-Funktionen ausgewählt, unter anderem weil diese Hintergrundtrigger über die 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-, TestLab- und Analytics-Trigger können mithilfe von Tools, die auf dieser Seite nicht beschrieben werden, interaktiv getestet werden.

In den folgenden Abschnitten dieser Anleitung werden die Schritte zum Erstellen, Testen und Bereitstellen des Beispiels beschrieben. Wenn Sie den Code lieber einfach ausführen und überprüfen möchten, mit dem Abschnitt Vollständigen Beispielcode ansehen fortfahren.

Firebase-Projekt erstellen

  1. Klicken Sie in der Firebase-Konsole auf Projekt hinzufügen.

    • Wenn Sie einem vorhandenen Google Cloud-Projekt Firebase-Ressourcen hinzufügen möchten, geben Sie dessen Projektnamen ein oder wählen Sie es aus dem Drop-down-Menü aus.

    • Geben Sie den gewünschten Projektnamen ein, um ein neues Projekt zu erstellen. Sie können auch optional bearbeiten Sie die Projekt-ID, die unter dem Projektnamen angezeigt wird.

  2. Lesen Sie sich die Firebase-Nutzungsbedingungen durch und akzeptieren Sie sie.

  3. Klicken Sie auf Weiter.

  4. Optional: Richten Sie Google Analytics für Ihr Projekt ein, um die folgenden Firebase-Produkte optimal nutzen zu können:

    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 AnalyticsSpeicherort für Berichte aus und akzeptieren Sie dann die Datenfreigabeeinstellungen und Google Analytics-Nutzungsbedingungen für Ihr Projekt.

  5. Klicken Sie auf Projekt erstellen (oder auf Firebase hinzufügen, wenn Sie ein vorhandenes Google Cloud-Projekt verwenden).

Firebase stellt automatisch Ressourcen für Ihr Firebase-Projekt bereit. Wann? wird die Übersichtsseite für Ihre Firebase-App in der Firebase-Konsole.

Node.js und die Firebase CLI einrichten

Zum Schreiben von Funktionen benötigen Sie eine Node.js-Umgebung. und Sie benötigen die Firebase-Befehlszeile, um Funktionen in Cloud Functions-Laufzeit. Für die Installation von Node.js und npm wird der Node Version Manager empfohlen.

Nachdem Sie Node.js und npm installiert haben, installieren Sie die Firebase-Befehlszeile mit der gewünschten Methode. Verwenden Sie Folgendes, um die Befehlszeile über npm zu installieren:

npm install -g firebase-tools

Dadurch wird der global verfügbare Firebase-Befehl installiert. Wenn wenn der Befehl fehlschlägt, npm-Berechtigungen ändern. Führen Sie denselben Befehl noch einmal aus, um auf die neueste Version von firebase-tools zu aktualisieren.

Projekt initialisieren

Wenn Sie das Firebase SDK für Cloud Functions initialisieren, wird ein leeres Projekt erstellt mit einigen Abhängigkeiten und minimalem Beispielcode. Sie wählen entweder TypeScript oder JavaScript zum Erstellen von Funktionen verwenden Für diese Anleitung müssen Sie auch Cloud Firestore initialisieren.

So initialisieren Sie Ihr Projekt:

  1. Führen Sie firebase login aus, um sich über den Browser anzumelden und die Firebase-Befehlszeile.
  2. Rufen Sie das Verzeichnis Ihres Firebase-Projekts auf.
  3. Führen Sie firebase init firestore aus. 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 auch einen Startmodus und einen Speicherort für Firestore auswählen, wie unter Erste Schritte mit Cloud Firestore beschrieben.
  4. Führen Sie firebase init functions aus. Sie werden von der Befehlszeile aufgefordert, ein vorhandenes Codebasis eingeben oder initialisieren und eine neue benennen. Wenn Sie gerade erst anfangen, reicht eine einzelne Codebasis am Standardspeicherort aus. Wenn Sie Ihre Implementierung später erweitern, können Sie Funktionen in Codebases organisieren.
  5. Die Befehlszeile bietet zwei Optionen für die Sprachunterstützung:

    Wählen Sie für diese Anleitung JavaScript aus.

  6. Über die Befehlszeile können Sie Abhängigkeiten mit npm installieren. Es ist sicher wenn Sie Abhängigkeiten anders verwalten möchten. Wenn Sie dies jedoch ablehnen, müssen Sie vor der Emulation npm install ausführen oder Bereitstellung Ihrer Funktionen.

Nachdem diese Befehle erfolgreich ausgeführt wurden, sieht Ihre Projektstruktur so aus: dies:

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 eine wichtige Schlüssel: "engines": {"node": "16"}. Hier wird die Node.js-Version für das Schreiben und Bereitstellen von Funktionen angegeben. Sie können andere unterstützte Versionen auswählen.

Erforderliche Module importieren und App initialisieren

Nachdem Sie die Einrichtungsaufgaben abgeschlossen haben, können Sie das Quellverzeichnis öffnen und wie in den folgenden Abschnitten beschrieben Code hinzufügen. Für dieses Beispiel müssen die Cloud Functions- und Admin SDK-Module mithilfe von Node require-Anweisungen in Ihr Projekt importiert werden. Linien hinzufügen wie Folgendes in Ihre index.js-Datei einfügen:

// 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();

Mit diesen Zeilen werden die Module firebase-functions und firebase-admin geladen. Initialisieren einer admin-Anwendungsinstanz, über die Cloud Firestore-Änderungen vorgenommen werden können. Überall dort, wo Unterstützung für das Admin SDK verfügbar ist (derzeit nur in englischer Sprache verfügbar) Für FCM, Authentication und Firebase Realtime Database ist ein leistungsstarke Möglichkeit, Firebase mithilfe von Cloud Functions zu integrieren.

Die Firebase-Befehlszeile installiert automatisch das Firebase- und Firebase-SDK für 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 verarbeiten.

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 Ergebnisse in ExpressJS-Stil Anfrage und Antwort -Objekt, das an die onRequest()-Callback.

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 verschieben. 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.

makeUppercase()-Funktion 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 Funktion makeUppercase() wird ausgeführt, wenn in Cloud Firestore geschrieben wird. Mit der Funktion ref.set wird das Dokument definiert, das überwacht werden soll. Aus Leistungsgründen sollten Sie möglichst genau sein.

In geschweiften Klammern, z. B. {documentId}, umschließen Sie „parameters“. Platzhalter die ihre übereinstimmenden Daten im Callback bereitstellen.

Cloud Firestore löst den Rückruf onCreate() aus, sobald neue Nachrichten hinzugefügt werden.

Ereignisgesteuerte Funktionen wie Cloud Firestore-Ereignisse sind asynchron. Die Callback-Funktion sollte entweder eine null, ein Objekt oder ein Versprechen zurückgeben. Wenn Sie nichts zurückgeben, läuft die Funktion ab, es wird ein Fehler ausgegeben und der Vorgang wird wiederholt. Weitere Informationen finden Sie unter Synchronisieren, asynchron und verspricht.

Ausführung von Funktionen emulieren

Die Firebase Local Emulator Suite ermöglicht es Ihnen, Anwendungen auf Ihrem lokalen Computer zu erstellen und zu testen, anstatt sie auf ein Firebase-Projekt. Lokale Tests während der Entwicklung werden dringend empfohlen, zum Teil, weil dadurch das Risiko von Programmierfehlern verringert wird, die in einer Produktionsumgebung möglicherweise Kosten verursachen (z. B. ein Endlos-Loop).

So emulieren Sie Ihre Funktionen:

  1. Führen Sie firebase emulators:start aus und prüfen Sie in der Ausgabe, ob die URL des Emulator Suite UI enthalten ist. Standardmäßig ist localhost:4000 festgelegt, es kann aber auch auf einem anderen Port auf Ihrem Computer gehostet werden. Geben Sie diese URL in Ihren Browser ein, um die Emulator Suite UI zu öffnen.

  2. Prüfen Sie in der Ausgabe des Befehls firebase emulators:start, ob die URL der HTTP-Funktion addMessage() enthalten ist. Sie sieht in etwa so aus wie http://localhost:5001/MY_PROJECT/us-central1/addMessage, mit folgenden Unterschieden:

    1. MY_PROJECT wird durch Ihre Projekt-ID ersetzt.
    2. Der Port kann auf Ihrem lokalen Computer anders sein.
  3. Fügen Sie den Suchstring ?text=uppercaseme an das Ende der URL der Funktion hinzu. Er sollte in etwa so aussehen: http://localhost:5001/MY_PROJECT/us-central1/addMessage?text=uppercaseme. Optional können Sie die Nachricht „uppercaseme“ durch eine benutzerdefinierte Nachricht ersetzen.

  4. Öffnen Sie die URL in einem neuen Tab in Ihrem Browser, um eine neue Nachricht zu erstellen.

  5. Sehen Sie sich die Auswirkungen der Funktionen in Emulator Suite UI an:

    1. Auf dem Tab Protokolle sollten neue Protokolle angezeigt werden, die darauf hinweisen, dass die Funktionen addMessage() und makeUppercase() ausgeführt wurden:

      i functions: Beginning execution of "addMessage"

      i functions: Beginning execution of "makeUppercase"

    2. Auf dem Tab Firestore sollte ein Dokument mit Ihrer ursprünglichen Nachricht und der Großbuchstabenversion Ihrer Nachricht angezeigt werden. Wenn die ursprüngliche Nachricht „uppercaseme“ lautete, wird „UPPERCASEME“ angezeigt.

Funktionen in einer Produktionsumgebung bereitstellen

Sobald Ihre Funktionen im Emulator wie gewünscht funktionieren, können Sie mit der Bereitstellung, dem Testen und dem Ausführen in der Produktionsumgebung fortfahren. Beachten Sie, dass Ihr Projekt für die Bereitstellung in der empfohlenen Node.js 14-Laufzeitumgebung den Blaze-Tarif haben muss. Weitere Informationen finden Sie unter Cloud Functions-Preise.

Stellen Sie zum Abschließen der Anleitung die Funktionen bereit und führen Sie dann den folgenden Befehl aus: addMessage(), um makeUppercase() auszulösen.

  1. Führen Sie den folgenden Befehl aus, um die Funktionen bereitzustellen:

     firebase deploy --only functions
     

    Nachdem Sie diesen Befehl ausgeführt haben, gibt die Firebase-Befehlszeile die URL für alle Endpunkte der HTTP-Funktion aus. Im Terminal sollte eine Zeile wie die folgende angezeigt werden:

    Function URL (addMessage): https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage
    

    Die URL enthält Ihre Projekt-ID und eine Region für die HTTP- . Sie müssen sich jetzt noch keine Gedanken darüber machen, aber für einige Produktions-HTTP-Funktionen sollte ein Speicherort angegeben werden, um die Netzwerklatenz zu minimieren.

    Wenn Zugriffsfehler wie „Zugriff auf Projekt kann nicht autorisiert werden“ auftreten, prüfen Sie den Alias Ihres Projekts.

  2. Fügen Sie mithilfe der von der Befehlszeile ausgegebenen addMessage()-URL einen Textabfrageparameter hinzu. und in einem Browser öffnen:

    https://us-central1-MY_PROJECT.cloudfunctions.net/addMessage?text=uppercasemetoo
    

    Die Funktion wird ausgeführt und leitet den Browser an den Firebase-Konsole am Datenbankspeicherort wo die Textzeichenfolge gespeichert wird. Dieses Schreibereignis löst makeUppercase() aus, wodurch ein Großbuchstaben geschrieben wird Version des Strings.

Nach der Bereitstellung und Ausführung von Funktionen können Sie sich die Logs in der Google Cloud-Konsole ansehen. Wenn Sie Funktionen löschen müssen in der Entwicklung oder Produktion verwenden, verwenden Sie die Firebase-Befehlszeile.

In der Produktionsumgebung möchten Sie vielleicht die Funktionsleistung und -steuerung optimieren. die Mindest- und Höchstanzahl der auszuführenden Instanzen festzulegen. Weitere Informationen finden Sie unter Skalierungsverhalten steuern finden Sie weitere Informationen zu den Laufzeitoptionen.

Vollständigen Beispielcode ansehen

Hier ist der fertige functions/index.js mit den Funktionen addMessage() und makeUppercase(). Mit diesen Funktionen können Sie Parameter zu einem HTTP-Endpunkt die einen Wert in Cloud Firestore schreibt und ihn dann alle Zeichen im String in Großbuchstaben schreiben.

// 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 zur Verarbeitung aller Ereignistypen, die von Cloud Functions unterstützt werden.

Um mehr über Cloud Functions zu erfahren, könnte auch Folgendes tun: