Anwendung mit dem Cloud Functions-Emulator verbinden

Bevor Sie Ihre App mit dem Cloud Functions-Emulator verbinden, sollten Sie sich mit dem Firebase Local Emulator Suite-Workflow vertraut machen und Local Emulator Suite installieren und konfigurieren sowie die CLI-Befehle prüfen.

Firebase-Projekt auswählen

Firebase Local Emulator Suite emuliert Produkte für ein einzelnes Firebase-Projekt.

Wenn Sie das zu verwendende Projekt auswählen möchten, führen Sie vor dem Starten der Emulatoren in der Befehlszeile firebase use in Ihrem Arbeitsverzeichnis aus. Oder Sie können das Flag --project für jeden Emulator .

Local Emulator Suite unterstützt die Emulation realer Firebase-Projekte und demo-Projekte erstellen.

Projekttyp Funktionen Mit Emulatoren verwenden
Real

Ein echtes Firebase-Projekt ist ein Projekt, das Sie erstellt und konfiguriert haben (höchstwahrscheinlich über die Firebase-Konsole).

Echte Projekte haben Live-Ressourcen wie Datenbankinstanzen, Speicher Buckets, Funktionen oder einer anderen Ressource, die Sie für dieses Firebase eingerichtet haben Projekt arbeiten.

Bei der Arbeit mit echten Firebase-Projekten können Sie Emulatoren für beliebige oder alle unterstützten Produkte.

Bei Produkten, die Sie nicht emulieren, werden Ihre Apps und Ihr Code Mit der Live-Ressource interagieren (Datenbankinstanz, Speicher Bucket, Funktion usw.).

Demo

Ein Firebase-Demoprojekt hat keine echte Firebase-Konfiguration und keine Live-Ressourcen. Normalerweise wird über Codelabs oder andere Tutorials auf diese Projekte zugegriffen.

Projekt-IDs für Demoprojekte haben das Präfix demo-.

Bei der Arbeit mit Firebase-Demoprojekten interagieren Ihre Apps und Ihr Code mit nur Emulatoren. Wenn Ihre App versucht, mit einer Ressource zu interagieren für die kein Emulator ausgeführt wird, schlägt der Code fehl.

Wir empfehlen, nach Möglichkeit Demoprojekte zu verwenden. Die wichtigsten Vorteile:

  • Die Einrichtung ist einfacher, da Sie die Emulatoren ausführen können, ohne Firebase-Projekt
  • Erhöhte Sicherheit, da wenn Ihr Code versehentlich nicht emulierte (Produktions-)Ressourcen gibt es keine Möglichkeit einer Änderung der Daten, der Nutzung oder der Abrechnung.
  • Bessere Offlineunterstützung, da kein Zugriff auf das Internet erforderlich ist, um die SDK-Konfiguration herunterzuladen.

App für die Kommunikation mit den Emulatoren instrumentieren

App für aufrufbare Funktionen instrumentieren

Wenn Ihre Prototyp- und Testaktivitäten aufrufbare Back-End-Funktionen beinhalten, konfigurieren Sie die Interaktion mit dem Cloud Functions for Firebase-Emulator so:

Kotlin+KTX
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
val functions = Firebase.functions
functions.useEmulator("10.0.2.2", 5001)
Java
// 10.0.2.2 is the special IP address to connect to the 'localhost' of
// the host computer from an Android emulator.
FirebaseFunctions functions = FirebaseFunctions.getInstance();
functions.useEmulator("10.0.2.2", 5001);
Swift
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web

import { getApp } from "firebase/app";
import { getFunctions, connectFunctionsEmulator } from "firebase/functions";

const functions = getFunctions(getApp());
connectFunctionsEmulator(functions, "127.0.0.1", 5001);

Web

firebase.functions().useEmulator("127.0.0.1", 5001);

App für die Emulation von HTTPS-Funktionen instrumentieren

Jede HTTPS-Funktion in Ihrem Code wird vom lokalen Emulator im folgenden URL-Format bereitgestellt:

http://$HOST:$PORT/$PROJECT/$REGION/$NAME

Zum Beispiel wird eine einfache helloWorld-Funktion mit dem Standard-Hostport und der Standardregion bereitgestellt:

https://localhost:5001/$PROJECT/us-central1/helloWorld

Anwendung für die Emulation von Funktionen in Aufgabenwarteschlangen instrumentieren

Der Emulator richtet automatisch emulierte Aufgabenwarteschlangen basierend auf Triggerdefinitionen ein. Das Admin SDK leitet eingereihte Anfragen an den Emulator weiter, wenn es erkennt, dass er über die Umgebungsvariable CLOUD_TASKS_EMULATOR_HOST ausgeführt wird.

Beachten Sie, dass das in der Produktion verwendete Dispositionssystem komplexer ist als das eine im Emulator implementiert. um Produktionsumgebungen genau wiederzugeben. Die Parameter im Emulator legen eine Obergrenze für die Rate fest, mit der Aufgaben gesendet und noch einmal versucht werden.

App für die Emulation von durch Hintergrund ausgelösten Funktionen instrumentieren

Der Cloud Functions-Emulator unterstützt Hintergrundfunktionen aus den folgenden Quellen:

  • Realtime Database-Emulator
  • Cloud Firestore-Emulator
  • Authentication-Emulator
  • Pub/Sub-Emulator
  • Firebase-Benachrichtigungsemulator

Ändern Sie zum Auslösen von Hintergrundereignissen die Backend-Ressourcen mithilfe der Emulator Suite UI oder indem du deine App oder deinen Testcode mit den Emulatoren verbindest mit dem SDK für Ihre Plattform.

Test-Handler für benutzerdefinierte Ereignisse, die von Erweiterungen ausgegeben werden

Für Funktionen, die Sie zur Verarbeitung von benutzerdefinierten Firebase Extensions-Ereignissen implementieren mit Cloud Functions v2, gekoppelt der Cloud Functions-Emulator mit der Unterstützung für Eventarc-Emulator Eventarc-Trigger.

Um benutzerdefinierte Event-Handler für Erweiterungen zu testen, die Ereignisse ausgeben, müssen Sie den Cloud Functions- und Eventarc-Emulatoren.

Die Laufzeit Cloud Functions legt die EVENTARC_EMULATOR-Umgebung fest. im aktuellen Prozess auf localhost:9299 setzen, wenn der Eventarc-Emulator ausgeführt wird. Die Firebase Admin SDKs stellen automatisch eine Verbindung zu Eventarc her Emulator, wenn die Umgebungsvariable EVENTARC_EMULATOR festgelegt ist. Sie können ändern Sie den Standardport, wie unter Local Emulator Suite konfigurieren beschrieben.

Wenn Umgebungsvariablen richtig konfiguriert sind, wird der Firebase Admin SDK Ereignisse automatisch an den Eventarc-Emulator senden. Eventarc wiederum ruft den Cloud Functions-Emulator zurück, um beliebige registrierte Handler.

Weitere Informationen finden Sie in den Functions-Logs in der Emulator Suite UI die Ausführung des Handlers.

Lokale Testumgebung konfigurieren

Wenn Funktionen auf Punktenv-basierten Umgebungskonfiguration, können Sie dieses Verhalten in Ihrer lokalen Testumgebung emulieren.

Wenn Sie einen lokalen Cloud Functions-Emulator verwenden, können Sie die Umgebung überschreiben Variablen für Ihr Projekt verwenden, indem Sie eine .env.local-Datei einrichten. Inhalt von .env.local haben Vorrang vor .env und der projektspezifischen .env-Datei.

Ein Projekt könnte z. B. diese drei Dateien enthalten, unterschiedliche Werte für Entwicklung und lokale Tests:

.env .env.dev .env.local
PLANET=Earth

ZIELGRUPPE=Menschen

AUDIENCE=Entwicklermenschen AUDIENCE=Menschen vor Ort

Beim Start im lokalen Kontext lädt der Emulator die Umgebung. Variablen wie hier zu sehen:

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

Secrets und Anmeldedaten im Cloud Functions-Emulator

Der Cloud Functions-Emulator unterstützt die Verwendung von Secrets zum Speichern und Abrufen vertraulicher Konfigurationsinformationen. Standardmäßig versucht der Emulator, mit der folgenden Methode auf Ihre Produktions-Secrets zuzugreifen: Standardanmeldedaten für Anwendungen. In bestimmten Situationen, z. B. in CI-Umgebungen, greift der Emulator möglicherweise nicht auf Secret-Werte aufgrund von Berechtigungseinschränkungen.

Ähnlich wie bei der Unterstützung des Cloud Functions-Emulators für Umgebungsvariablen können Sie Secret-Werte durch Einrichten einer .secret.local-Datei überschreiben. So können Sie Ihre Funktionen ganz einfach lokal testen, insbesondere wenn Sie keinen Zugriff auf den geheimen Wert haben.

Welche anderen Tools zum Testen von Cloud Functions gibt es?

Der Cloud Functions-Emulator wird durch andere Prototypen und Tests ergänzt. Tools:

  • Die Cloud Functions-Shell, die interaktives, iteratives Prototyping und die Entwicklung von Funktionen ermöglicht. Die Shell nutzt den Cloud Functions-Emulator mit eine REPL-ähnliche Schnittstelle für die Entwicklung. Es gibt keine Integration mit den Cloud Firestore- oder Realtime Database-Emulatoren. Mit der Shell Daten simulieren und Funktionsaufrufe durchführen, um die Interaktion mit Produkten zu simulieren, Der Local Emulator Suite unterstützt derzeit nicht: Analytics, Remote Config und Crashlytics.
  • Das Firebase Test SDK for Cloud Functions, ein Node.js-Mocha-Framework für die Funktionsentwicklung. Das Cloud Functions Test SDK bietet also eine Automatisierung über die Cloud Functions-Shell.

Weitere Informationen zur Cloud Functions-Shell und zum Cloud Functions Test SDK finden Sie unter Funktionen interaktiv testen und Einen Cloud Functions-Code mit dem Test SDK testen.

Unterschiede zwischen dem Cloud Functions-Emulator und der Produktion

Der Cloud Functions-Emulator ist der Produktionsumgebung ziemlich ähnlich für die meisten Anwendungsfälle. Wir haben viel Arbeit investiert, um sicherzustellen, Knotenlaufzeit so nah wie möglich an der Produktion ist. Der Emulator ahmt jedoch nicht die gesamte containerisierte Produktionsumgebung nach. Ihr Funktionscode wird zwar realistisch ausgeführt, andere Aspekte Ihrer Umgebung (z. B. lokale Dateien, Verhalten nach Funktionsabstürzen) unterscheiden sich jedoch.

Cloud IAM

Die Firebase Emulator Suite versucht nicht, IAM-bezogenes Verhalten bei der Ausführung Emulatoren halten die Regeln wurden angegeben, aber in Situationen, in denen normalerweise IAM verwendet wird, z. B. zum Festlegen von Berechtigungen für Cloud Functions, die ein Dienstkonto aufrufen, Emulator ist nicht konfigurierbar und verwendet das global verfügbare Konto auf auf Ihrem Entwicklercomputer ähnlich wie ein lokales Skript direkt ausführen.

Speicher- und Prozessoreinschränkungen

Der Emulator erzwingt keine Speicher- oder Prozessorbeschränkungen für Ihre Funktionen. Der Emulator unterstützt jedoch Timeout-Funktionen über die Methode timeoutSeconds-Laufzeitargument.

Die Ausführungszeit der Funktion kann sich von der Produktion unterscheiden, wenn Funktionen im Emulator ausführen. Wir empfehlen, nach dem Entwerfen und Testen von Funktionen mit dem Emulator begrenzte Tests in der Produktion durchzuführen, um die Ausführungszeiten zu bestätigen.

Unterschiede zwischen lokalen und Produktionsumgebungen berücksichtigen

Da der Emulator auf Ihrem lokalen Computer läuft, für Anwendungen und integrierte Programme und Dienstprogramme.

Beachten Sie, dass Ihre lokale Umgebung für die Entwicklung von Cloud Functions möglicherweise unterscheiden sich von der Google-Produktionsumgebung:

  • Anwendungen, die Sie lokal installieren, um die Produktionsumgebung zu simulieren (z.B. ImageMagick aus dieser Anleitung) vom Produktivbetrieb abweichen kann, insbesondere wenn Sie oder in einer Nicht-Linux-Umgebung entwickeln. Eigene bereitstellen Binärkopie des fehlenden Programms zusammen mit Ihrer Funktionsbereitstellung.

  • Ebenso können integrierte Dienstprogramme (z.B. Shell-Befehle wie ls oder mkdir) unterscheiden sich von den Versionen, die in der Produktion verfügbar sind, einer anderen Umgebung als Linux (z. B. macOS) Sie können dieses Problem beheben, indem Sie Alternativen zu nativen Befehlen oder wenn Sie Linux-Binärdateien erstellen, Bundle mit Ihrer Bereitstellung.

Neuer Versuch

Der Cloud Functions-Emulator unterstützt das Wiederholen von Funktionen bei einem Fehler nicht.

Und jetzt?