Ejecuta funciones de manera local

Firebase CLI incluye un emulador de Cloud Functions que puede emular los siguientes tipos de funciones:

  • Funciones HTTPS
  • Funciones que admiten llamadas
  • Funciones en segundo plano que se activan desde Firebase Authentication, Realtime Database, Cloud Firestore, Cloud Storage y Cloud Pub/Sub

Puedes ejecutar funciones de manera local para probarlas antes de implementarlas en producción.

Instala Firebase CLI

Para usar el emulador de Cloud Functions, primero instala Firebase CLI:

npm install -g firebase-tools

Con el fin de usar el emulador local, Cloud Functions debe contar con lo siguiente:

  • firebase-admin versión 8.0.0 o superior
  • firebase-functions versión 3.0.0 o superior

Configura las credenciales de administrador (opcional)

Si quieres que tus pruebas de funciones interactúen con las APIs de Google o con otras APIs de Firebase mediante el SDK de Firebase Admin, es posible que debas configurar las credenciales de administrador.

  • Los activadores de Cloud Firestore y Realtime Database ya tienen las credenciales necesarias y no requieren una configuración adicional.
  • Se deben seguir los pasos de configuración descritos en esta sección para todas las otras APIs, incluidas las de Firebase, p. ej.: Authentication y FCM, o las de Google, como Cloud Translation o Cloud Speech. Esto se aplica si usas la shell de Cloud Functions o firebase emulators:start.

Para configurar las credenciales de administrador para las funciones emuladas, sigue estos pasos:

  1. Abre el panel Cuentas de servicio de la consola de Google Cloud.
  2. Asegúrate de seleccionar la cuenta de servicio predeterminada de App Engine. En las opciones de menú del lado derecho, elige Crear clave.
  3. Cuando se te solicite, selecciona JSON para el tipo de clave y haz clic en Crear.
  4. Configura las credenciales predeterminadas de Google para apuntar a la clave descargada:

    Unix

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

    Windows

    set GOOGLE_APPLICATION_CREDENTIALS=path\to\key.json
    firebase emulators:start
    

Después de completar estos pasos, tus pruebas de funciones pueden acceder a las APIs de Google y Firebase a través del SDK de Admin. Por ejemplo, cuando pruebes un activador de Authentication, la función emulada podría llamar a admin.auth().getUserByEmail(email).

Establece la configuración de funciones (opcional)

Si usas variables de configuración de funciones personalizadas, primero ejecuta el comando para obtener la configuración personalizada (ejecuta esto dentro del directorio functions) en tu entorno local:

firebase functions:config:get > .runtimeconfig.json
# If using Windows PowerShell, replace the above with:
# firebase functions:config:get | ac .runtimeconfig.json

Ejecuta el conjunto de herramientas del emulador

Para ejecutar el emulador de Cloud Functions, usa el comando emulators:start:

firebase emulators:start

El comando emulators:start iniciará los emuladores para Cloud Functions, Cloud Firestore, Realtime Database y Firebase Hosting en función de los productos que inicializaste en tu proyecto local con firebase init. Si quieres iniciar un emulador específico, usa la marca --only:

firebase emulators:start --only functions

Si quieres ejecutar una prueba o una secuencia de comandos de prueba después de que se inicien los emuladores, usa el comando emulators:exec:

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

Instrumenta la app para que se comunique con los emuladores

Si quieres instrumentar tu app para que interactúe con los emuladores, es posible que debas realizar pasos de configuración adicionales.

Instrumenta la app para funciones que admiten llamadas

Si tus actividades de prototipado y realización de pruebas involucran funciones de backend que admiten llamadas, configura la interacción con el emulador de Cloud Functions para Firebase de la siguiente manera:

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")

API modular web

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

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

API con espacio de nombres web

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

Instrumenta la app para emular funciones HTTPS

Se entregará cada función HTTPS de tu código desde el emulador local con el siguiente formato de URL:

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

Por ejemplo, una función helloWorld simple con el puerto y la región de host predeterminados se entregarían en la siguiente ubicación:

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

Instrumenta la app para emular funciones activadas en segundo plano

El emulador de Cloud Functions admite funciones activadas en segundo plano de las siguientes fuentes:

  • Emulador de Realtime Database
  • Emulador de Cloud Firestore
  • Emulador de Authentication
  • Emulador de Pub/Sub

Para activar eventos en segundo plano, modifica los recursos del backend con la IU de Emulator Suite o conecta tu app o código de prueba a los emuladores con el SDK de tu plataforma.

Prueba controladores para eventos personalizados emitidos por Extensiones

En las funciones que implementas para controlar eventos personalizados de Extensiones de Firebase con Cloud Functions v2, el emulador de Cloud Functions se sincroniza con el emulador de Eventarc para admitir activadores de Eventarc.

Si quieres probar los controladores de eventos personalizados para las extensiones que emiten eventos, debes instalar los emuladores de Cloud Functions y Eventarc.

El entorno de ejecución de Cloud Functions establece la variable de entorno EVENTARC_EMULATOR en localhost:9299 en el proceso actual si se está ejecutando el emulador de Eventarc. Los SDK de Firebase Admin se conectan automáticamente al emulador de Eventarc cuando se establece la variable de entorno EVENTARC_EMULATOR. Puedes modificar el puerto predeterminado como se explica en Configura Local Emulator Suite.

Cuando las variables de entorno se configuran correctamente, el SDK de Firebase Admin envía eventos automáticamente al emulador de Eventarc. A su vez, el emulador de Eventarc hace una llamada al emulador de Cloud Functions para activar cualquier controlador registrado.

Puedes verificar los registros de Functions en la IU de Emulator Suite para obtener detalles sobre la ejecución del controlador.

Interacciones con otros servicios

Emulator Suite incluye varios emuladores, lo que permite probar las interacciones entre los productos.

Cloud Firestore

Si tienes funciones que usan el SDK de Firebase Admin para escribir en Cloud Firestore, estas operaciones de escritura se enviarán al emulador de Cloud Firestore si se está ejecutando. Si esas operaciones de escritura activan otras funciones, estas se ejecutarán en el emulador de Cloud Functions.

Cloud Storage

Si tienes funciones que usan el SDK de Firebase Admin (versión 9.7.0 o superior) para escribir en Cloud Storage, estas operaciones de escritura se enviarán al emulador de Cloud Storage si se está ejecutando. Si esas operaciones de escritura activan otras funciones, estas se ejecutarán en el emulador de Cloud Functions.

Firebase Authentication

Si tienes funciones que usan el SDK de Firebase Admin (versión 9.3.0 o superior) para escribir en Firebase Authentication, estas operaciones de escritura se enviarán al emulador de Auth si se está ejecutando. Si esas operaciones de escritura activan otras funciones, estas se ejecutarán en el emulador de Cloud Functions.

Firebase Hosting

Si usas Cloud Functions para generar contenido dinámico para Firebase Hosting, firebase emulators:start usa tus funciones de HTTP locales como proxies para hosting.

Registros

El emulador transmite registros de tus funciones a la ventana de la terminal en la que se ejecutan. Muestra toda la información resultante de las declaraciones console.log(), console.info(), console.error() y console.warn() dentro de tus funciones.

Próximos pasos

Si quieres ver un ejemplo completo de cómo usar Firebase Emulator Suite, consulta la muestra de inicio rápido para pruebas.