La CLI Firebase inclut un émulateur Cloud Functions qui peut émuler types de fonctions suivants:
- Fonctions HTTPS
- Fonctions appelables
- Fonctions de file d'attente de tâches
- Fonctions en arrière-plan déclenchées à partir de Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage, des alertes Firebase compatibles et de Cloud Pub/Sub.
Vous pouvez exécuter des fonctions localement pour les tester avant de les déployer en production.
Installer la CLI Firebase
Pour utiliser l'émulateur Cloud Functions, installez d'abord la CLI Firebase:
npm install -g firebase-tools
Pour utiliser l'émulateur local, votre Cloud Functions doit dépendre des éléments suivants :
firebase-admin
version8.0.0
ou ultérieurefirebase-functions
version3.0.0
ou ultérieure.
Configurer des identifiants d'administrateur (facultatif)
Si vous souhaitez que vos tests de fonctions interagissent avec les API Google ou d'autres API Firebase API via le SDK Admin Firebase, vous devrez peut-être configurer avec les identifiants de l'administrateur.
- Les déclencheurs Cloud Firestore et Realtime Database disposent déjà d'identifiants suffisants et ne nécessitent pas de configuration supplémentaire.
- Toutes les autres API, y compris les API Firebase telles que Authentication et FCM, ou les API Google telles que Cloud Translation ou Cloud Speech, nécessitent les étapes de configuration décrites dans cette section. Cela s'applique que vous utilisiez l'interface système Cloud Functions ou
firebase emulators:start
.
Pour configurer les identifiants d'administrateur pour les fonctions émulées:
- Ouvrez le volet "Comptes de service" de la console Google Cloud.
- Assurez-vous que l'option Compte de service par défaut App Engine est sélectionnée, puis utilisez le menu d'options à droite pour sélectionner Créer une clé.
- Lorsque vous y êtes invité, sélectionnez le type de clé JSON, puis cliquez sur Créer.
Définissez vos identifiants Google par défaut pour qu'ils pointent vers la clé téléchargée :
Unix
export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json" firebase emulators:start
Windows
set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json firebase emulators:start
Une fois cette procédure terminée, les tests de vos fonctions peuvent accéder aux API Firebase et Google à l'aide du SDK Admin. Par exemple, lors du test d'un déclencheur Authentication, la fonction émulée peut appeler admin.auth().getUserByEmail(email)
.
Configurer la configuration des fonctions (facultatif)
Si vous utilisez des variables de configuration de fonctions personnalisées, exécutez d'abord la
pour obtenir votre configuration personnalisée (exécutez-la dans le répertoire functions
)
dans votre environnement local:
firebase functions:config:get > .runtimeconfig.json # If using Windows PowerShell, replace the above with: # firebase functions:config:get | ac .runtimeconfig.json
Exécuter la suite d'émulateurs
Pour exécuter l'émulateur Cloud Functions, utilisez la commande emulators:start
:
firebase emulators:start
La commande emulators:start
lance les émulateurs pour Cloud Functions.
Basé sur Cloud Firestore, Realtime Database et Firebase Hosting
sur les produits que vous avez initialisés dans votre projet local à l'aide de firebase
init
. Si vous souhaitez démarrer un émulateur particulier, utilisez l'indicateur --only
:
firebase emulators:start --only functions
Si vous souhaitez exécuter une suite de tests ou un script de test une fois que les émulateurs ont
démarré, utilisez la commande emulators:exec
:
firebase emulators:exec "./my-test.sh"
Instrumenter votre application pour communiquer avec les émulateurs
Pour instrumenter votre application afin qu'elle interagisse avec les émulateurs, vous devrez peut-être effectuer une configuration supplémentaire.
Instrumenter votre application pour les fonctions appelables
Si les activités de votre prototype et de test impliquent des fonctions de backend appelables, configurez les interactions avec l'émulateur Cloud Functions for Firebase comme suit:
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);
Instrumenter votre application pour l'émulation de fonctions HTTPS
Chaque fonction HTTPS de votre code sera diffusée à partir de l'émulateur local à l'aide du format d'URL suivant :
http://$HOST:$PORT/$PROJECT/$REGION/$NAME
Par exemple, une fonction helloWorld
simple avec le port hôte et la région par défaut serait diffusée:
https://localhost:5001/$PROJECT/us-central1/helloWorld
Instrumenter votre application pour l'émulation des fonctions de file d'attente de tâches
L'émulateur configure automatiquement les files d'attente de tâches émulées en fonction des définitions de déclencheur, et le SDK Admin redirige les requêtes mises en file d'attente vers l'émulateur s'il détecte qu'il s'exécute via la variable d'environnement CLOUD_TASKS_EMULATOR_HOST
.
Notez que le système de répartition utilisé en production est plus complexe que est implémentée dans l'émulateur. Vous ne devez donc pas vous attendre à des émulations de mise en miroir pour mettre en miroir précisément les environnements de production. Les paramètres de la section l'émulateur impose des limites supérieures à la fréquence à laquelle les tâches sont distribuées puis retenté l'opération.
Instrumenter votre application pour l'émulation de fonctions déclenchées en arrière-plan
L'émulateur Cloud Functions est compatible avec les fonctions déclenchées en arrière-plan à partir des sources suivantes:
- Émulateur Realtime Database
- Émulateur Cloud Firestore
- Émulateur Authentication
- Émulateur Pub/Sub
- Émulateur Firebase Alerts
Pour déclencher des événements en arrière-plan, modifiez les ressources backend à l'aide de la méthode Emulator Suite UI, ou en connectant votre code d'application ou de test aux émulateurs à l'aide du SDK de votre plate-forme.
Tester les gestionnaires pour les événements personnalisés émis par les extensions
Pour les fonctions que vous implémentez pour gérer les événements personnalisés Firebase Extensions avec Cloud Functions v2, l'émulateur Cloud Functions s'associe au Émulateur Eventarc compatible Déclencheurs Eventarc.
Pour tester les gestionnaires d'événements personnalisés des extensions qui émettent des événements, vous devez installer les émulateurs Cloud Functions et Eventarc.
L'environnement d'exécution Cloud Functions définit l'environnement EVENTARC_EMULATOR
sur localhost:9299
dans le processus actuel si l'émulateur Eventarc
est en cours d'exécution. Les Firebase Admin SDK se connectent automatiquement à Eventarc
émulateur lorsque la variable d'environnement EVENTARC_EMULATOR
est définie. Vous pouvez modifier le port par défaut, comme indiqué dans la section Configurer Local Emulator Suite.
Lorsque les variables d'environnement sont correctement configurées, Firebase Admin SDK envoie automatiquement des événements à l'émulateur Eventarc. À son tour, Eventarc appelle l'émulateur Cloud Functions pour déclencher gestionnaires enregistrés.
Vous pouvez consulter les journaux Functions dans Emulator Suite UI pour en savoir plus sur l'exécution du gestionnaire.
Interactions avec d'autres services
La suite d'émulateurs comprend plusieurs émulateurs, qui permettent en testant les interactions entre plusieurs produits.
Cloud Firestore
Si vous disposez de fonctions qui utilisent le SDK Firebase Admin pour écrire dans Cloud Firestore, ces écritures seront envoyées à l'émulateur Cloud Firestore s'il est en cours d'exécution. Si d'autres fonctions sont déclenchées par ces écritures, elles seront exécutées dans l'émulateur Cloud Functions.
Cloud Storage
Si vous avez des fonctions qui utilisent le SDK Admin Firebase (version 9.7.0 ou ultérieure) pour écrire dans Cloud Storage, ces écritures seront envoyées à l'émulateur Cloud Storage s'il est en cours d'exécution. Si d'autres fonctions sont déclenchées par ces écritures, elles seront exécutées dans l'émulateur Cloud Functions.
Firebase Authentication
Si vous avez des fonctions qui utilisent le SDK Firebase Admin (version 9.3.0 ou ultérieure) pour écrire dans Firebase Authentication, ces écritures seront envoyées à l'émulateur Auth s'il est en cours d'exécution. Si d'autres fonctions sont déclenchées par ces écritures, elles seront exécutées dans l'émulateur Cloud Functions.
Firebase Hosting
Si vous utilisez Cloud Functions pour générer du contenu dynamique pour Firebase Hosting, firebase emulators:start
utilise vos fonctions HTTP locales comme proxys d'hébergement.
Alertes Firebase
Dans tout projet qui inclut au moins un déclencheur d'alerte Firebase compatible, l'interface utilisateur de l'émulateur inclut un onglet FireAlerts (FireAlerts). Pour émuler un déclencheur d'alerte:
- Ouvrez l'onglet FireAlerts. Cet onglet affiche un menu déroulant contenant les de types d'alerte associés à des déclencheurs (par exemple, si vous avez un déclencheur onNewFatalIssuePublish, alors que Crashlytics.newFatalIssue est affiché).
- Sélectionnez un type d'alerte. Le formulaire est automatiquement renseigné avec des valeurs par défaut, peuvent être modifiés. Vous pouvez modifier les champs de l'événement (autres les informations de l'événement d'alerte sont soit déduites, soit des valeurs fictives, générées de manière aléatoire).
- Sélectionnez Send Alert (Envoyer une alerte) pour envoyer une alerte synthétique à l'émulateur des fonctions. avec journalisation disponible dans la section Alertes de la console Firebase (ainsi que dans les journaux).
Journalisation
L'émulateur diffuse les journaux de vos fonctions vers la fenêtre de terminal où elles
exécuter. Il affiche toutes les sorties des instructions console.log()
, console.info()
, console.error()
et console.warn()
dans vos fonctions.
Étapes suivantes
Pour obtenir un exemple complet d'utilisation de la suite d'émulateurs Firebase, consultez la exemple de guide de démarrage rapide pour les tests.