Exécuter des fonctions localement

La CLI Firebase inclut un émulateur Cloud Functions qui peut émuler les types de fonctions suivants :

  • Fonctions HTTPS
  • Fonctions appelables
  • Fonctions de file d'attente de tâches
  • Fonctions d'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 de :

  • firebase-admin version 8.0.0 ou ultérieure.
  • firebase-functions version 3.0.0 ou ultérieure.

Configurer les identifiants d'administrateur (facultatif)

Si vous souhaitez que vos tests de fonctions interagissent avec les API Google ou d'autres API Firebase via le SDK Admin Firebase, vous devrez peut-être configurer des identifiants d'administrateur.

  • Les déclencheurs Cloud Firestore et Realtime Database disposent déjà d'identifiants suffisants et ne nécessitent aucune configuration supplémentaire.
  • Toutes les autres API, y compris les API Firebase telles que Authentication et FCM ou les Google APIs telles que Cloud Translation ou Cloud Speech, nécessitent les étapes de configuration décrites dans cette section. Cela s'applique que vous utilisiez le shell Cloud Functions ou firebase emulators:start.

Pour configurer des identifiants d'administrateur pour les fonctions émulées :

  1. Ouvrez le volet "Comptes de service" de la console Google Cloud.
  2. 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é.
  3. Lorsque vous y êtes invité, sélectionnez JSON comme type de clé, puis cliquez sur Créer.
  4. 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 ces étapes terminées, vos tests de 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 les fonctions (facultatif)

Si vous utilisez des variables de configuration de fonctions personnalisées, commencez par exécuter la commande permettant d'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 démarre les émulateurs pour Cloud Functions, Cloud Firestore, Realtime Database et Firebase Hosting en fonction des 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'option --only :

firebase emulators:start --only functions

Si vous souhaitez exécuter une suite de tests ou un script de test après le démarrage des émulateurs, utilisez la commande emulators:exec :

firebase emulators:exec "./my-test.sh"

Après le démarrage, l'émulateur diffuse les journaux de vos fonctions dans la fenêtre de terminal où il s'exécute. Il affiche toutes les sorties des instructions console.log(), console.info(), console.error() et console.warn() dans vos fonctions.

Notez que la sortie de l'émulateur simule le déploiement de fonctions par défaut dans une région spécifique (us-central1) qui peut ne pas correspondre à la région de déploiement de production par défaut réelle. Pour en savoir plus sur les régions, consultez Emplacements Cloud Functions.

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 vos activités de prototypage et de test impliquent des fonctions de backend appelables, configurez l'interaction avec l'émulateur Cloud Functions for Firebase comme suit :

Kotlin
// 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().useEmulator(withHost: "localhost", port: 5001)
Unity
FirebaseFunctions functions = FirebaseFunctions.DefaultInstance;
// Connects to the Functions Emulator running on port 5001
functions.UseFunctionsEmulator("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 des fonctions HTTPS

Chaque fonction HTTPS de votre code sera diffusée à partir de l'émulateur local au 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 à l'adresse suivante :

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éclencheurs, 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 distribution utilisé en production est plus complexe que celui implémenté dans l'émulateur. Vous ne devez donc pas vous attendre à ce que le comportement émulé reflète précisément les environnements de production. Les paramètres de l'émulateur fournissent des limites supérieures au taux de distribution et de nouvelle tentative des tâches.

Instrumenter votre application pour l'émulation des 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 :

  • Realtime Database emulator
  • Cloud Firestore emulator
  • Authentication emulator
  • Pub/Sub emulator
  • Émulateur Firebase Alerts

Pour déclencher des événements en arrière-plan, modifiez les ressources de backend à l'aide de Emulator Suite UI ou en connectant votre application ou votre code 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 afin de gérer les événements personnalisés Firebase Extensions avec Cloud Functions v2, l'émulateur Cloud Functions s'associe à l'émulateur Eventarc pour prendre en charge les déclencheurs Eventarc.

Pour tester les gestionnaires d'événements personnalisés pour les extensions qui émettent des événements, vous devez installer les émulateurs Cloud Functions et Eventarc.

L'environnement d'exécution Cloud Functions définit la variable d'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 à l'émulateur Eventarc lorsque la variable d'environnement EVENTARC_EMULATOR est définie. Vous pouvez modifier le port par défaut comme indiqué dans 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, l'émulateur Eventarc rappelle l'émulateur Cloud Functions pour déclencher les 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 de tester les interactions entre les produits.

Cloud Firestore

Si vous avez des fonctions qui utilisent le SDK Admin Firebase 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 Admin Firebase (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 pour l'hébergement.

Alertes Firebase

Dans tout projet incluant au moins un déclencheur d'alerte Firebase compatible, l'UI de l'émulateur inclut un onglet FireAlerts. Pour émuler un déclencheur d'alerte :

  1. Ouvrez l'onglet FireAlerts. Cet onglet affiche un menu déroulant contenant les types d'alertes associés à des déclencheurs (par exemple, si vous avez un déclencheur onNewFatalIssuePublished, crashlytics.newFatalIssue s'affiche).
  2. Sélectionnez un type d'alerte. Le formulaire est automatiquement renseigné avec des valeurs par défaut, qui peuvent être modifiées. Vous pouvez modifier les champs de l'événement (les autres informations de l'événement d'alerte sont déduites, fictives ou générées de manière aléatoire).
  3. Sélectionnez Envoyer une alerte pour envoyer une alerte synthétique à l'émulateur de fonctions. La journalisation est disponible dans Alertes dans la console Firebase (ainsi que dans les journaux).

Étapes suivantes

Pour obtenir un exemple complet d'utilisation de la suite d'émulateurs Firebase, consultez l'exemple de démarrage rapide pour les tests.