Exécuter des fonctions localement

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

  • Fonctions HTTPS
  • Fonctions appelables
  • Fonctions d'arrière-plan déclenchées depuis l'authentification Firebase, la base de données en temps réel, Cloud Firestore, Cloud Storage et 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, vos Cloud Functions doivent dépendre de :

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

Configurer les informations d'identification de l'administrateur (facultatif)

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

  • Les déclencheurs Cloud Firestore et Realtime Database disposent déjà d'informations d'identification suffisantes et ne nécessitent aucune configuration supplémentaire.
  • Toutes les autres API, y compris les API Firebase telles que l'authentification 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 le shell Cloud Functions ou firebase emulators:start .

Pour configurer les informations d'identification d'administrateur pour les fonctions émulées :

  1. Ouvrez le volet Comptes de service de la console Google Cloud.
  2. Assurez-vous que le compte de service par défaut App Engine est sélectionné et utilisez le menu d'options à droite pour sélectionner Créer une clé .
  3. Lorsque vous y êtes invité, sélectionnez JSON pour le type de clé, puis cliquez sur Créer .
  4. Définissez vos informations d'identification Google par défaut pour qu'elles pointent vers la clé téléchargée :

    Unix

    export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"
    firebase emulators:start
    

    les fenêtres

    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 d'authentification, 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 commande 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écutez la suite d'émulateurs

Pour exécuter l'émulateur Cloud Functions, utilisez la commande emulators:start :

firebase emulators:start

La commande emulators:start démarrera 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 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"

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

Instrumentez votre application pour les fonctions appelables

Si vos activités de prototype et de test impliquent des fonctions backend appelables , configurez l'interaction avec l'émulateur Cloud Functions pour Firebase comme ceci :

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);
Rapide
Functions.functions().useFunctionsEmulator(origin: "http://127.0.0.1:5001")

Web modular API

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

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

Web namespaced API

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

Instrumentez votre application pour l’émulation des fonctions HTTPS

Chaque fonction HTTPS de votre code sera servie à partir de l'émulateur local en utilisant le format d'URL suivant :

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

Par exemple, une simple fonction helloWorld avec le port hôte et la région par défaut serait servie à :

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

Instrumentez votre application pour l'émulation de fonctions déclenchées en arrière-plan

L'émulateur Cloud Functions prend en charge les fonctions déclenchées en arrière-plan à partir des sources suivantes :

  • Émulateur de base de données en temps réel
  • Émulateur Cloud Firestore
  • Émulateur d'authentification
  • Émulateur Pub/Sub

Pour déclencher des événements en arrière-plan, modifiez les ressources back-end à l'aide de l'interface utilisateur d'Emulator Suite ou en connectant votre application ou votre code de test aux émulateurs à l'aide du SDK de votre plate-forme.

Gestionnaires de tests 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 des extensions Firebase 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.

Le runtime Cloud Functions définit la variable d'environnement EVENTARC_EMULATOR sur localhost:9299 dans le processus en cours si l'émulateur Eventarc est en cours d'exécution. Les SDK Firebase Admin 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 Configure Local Emulator Suite .

Lorsque les variables d'environnement sont correctement configurées, le SDK Firebase Admin envoie automatiquement les événements à l'émulateur Eventarc. À son tour, l'émulateur Eventarc rappelle l'émulateur Cloud Functions pour déclencher tous les gestionnaires enregistrés.

Vous pouvez consulter les journaux des fonctions dans l’interface utilisateur d’Emulator Suite pour plus de détails 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 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.

Stockage en ligne

Si vous disposez de fonctions qui utilisent le SDK Firebase Admin (version 9.7.0 ou ultérieure) pour écrire sur 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.

Authentification Firebase

Si vous disposez de fonctions qui utilisent le SDK Firebase Admin (version 9.3.0 ou ultérieure) pour écrire sur l'authentification Firebase, 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.

Hébergement Firebase

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.

Enregistrement

L'émulateur diffuse les journaux de vos fonctions vers la fenêtre du terminal où elles s'exécutent. Il affiche toutes les sorties des console.log() , console.info() , console.error() et console.warn() dans vos fonctions.

Prochaines étapes

Pour un exemple complet d'utilisation de la suite d'émulateurs Firebase, consultez l' exemple de démarrage rapide de test .