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 |
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
odermkdir
) 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?
- Eine Auswahl an Videos und detaillierte Anleitungsbeispiele finden Sie in der Trainings-Playlist für Firebase Emulators.
- Weitere Informationen zum Cloud Functions for Firebase-Emulator finden Sie unter Funktionen lokal ausführen.