Entérate de todos los anuncios de Firebase Summit y descubre cómo Firebase puede ayudarte a acelerar el desarrollo de las apps y a ejecutarlas con confianza. Más información

Conecte su aplicación al emulador de funciones en la nube

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Antes de conectar su aplicación al emulador de Cloud Functions, asegúrese de comprender el flujo de trabajo general de Firebase Local Emulator Suite y de instalar y configurar Local Emulator Suite y revisar sus comandos CLI .

Elija un proyecto de Firebase

Firebase Local Emulator Suite emula productos para un solo proyecto de Firebase.

Para seleccionar el proyecto a usar, antes de iniciar los emuladores, en la CLI, ejecute firebase use en su directorio de trabajo. O bien, puede pasar el indicador --project a cada comando del emulador.

Local Emulator Suite admite la emulación de proyectos reales de Firebase y proyectos de demostración .

Tipo de proyecto Características Usar con emuladores
Real

Un proyecto real de Firebase es uno que usted creó y configuró (probablemente a través de la consola de Firebase).

Los proyectos reales tienen recursos activos, como instancias de base de datos, depósitos de almacenamiento, funciones o cualquier otro recurso que configure para ese proyecto de Firebase.

Cuando trabaje con proyectos reales de Firebase, puede ejecutar emuladores para cualquiera o todos los productos admitidos.

Para cualquier producto que no esté emulando, sus aplicaciones y código interactuarán con el recurso en vivo (instancia de base de datos, depósito de almacenamiento, función, etc.).

Manifestación

Un proyecto de demostración de Firebase no tiene una configuración real de Firebase ni recursos activos. Por lo general, se accede a estos proyectos a través de codelabs u otros tutoriales.

Los ID de proyecto para proyectos de demostración tienen el prefijo demo- .

Al trabajar con proyectos de demostración de Firebase, sus aplicaciones y código interactúan solo con emuladores . Si su aplicación intenta interactuar con un recurso para el que no se está ejecutando un emulador, ese código fallará.

Le recomendamos que utilice proyectos de demostración siempre que sea posible. Beneficios incluidos:

  • Configuración más sencilla, ya que puede ejecutar los emuladores sin tener que crear un proyecto de Firebase
  • Mayor seguridad, ya que si su código invoca accidentalmente recursos (de producción) no emulados, no hay posibilidad de cambio de datos, uso y facturación.
  • Mejor soporte sin conexión, ya que no es necesario acceder a Internet para descargar la configuración de su SDK.

Instrumenta tu aplicación para hablar con los emuladores

Instrumente su aplicación para funciones llamables

Si sus actividades de prototipo y prueba involucran funciones de back-end a las que se puede llamar, configure la interacción con el emulador de Cloud Functions para Firebase de esta manera:

Androide
// 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);
Rápido
Functions.functions().useFunctionsEmulator(origin: "http://localhost:5001")

Web version 9

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

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

Web version 8

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

Instrumente su aplicación para la emulación de funciones HTTPS

Cada función HTTPS en su código se servirá desde el emulador local utilizando el siguiente formato de URL:

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

Por ejemplo, una función helloWorld simple con el puerto de host y la región predeterminados se serviría en:

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

Instrumente su aplicación para la emulación de funciones activadas en segundo plano

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

  • Emulador de base de datos en tiempo real
  • Emulador de Cloud Firestore
  • emulador de autenticación
  • Emulador Pub/Sub

Para desencadenar eventos en segundo plano, modifique los recursos de back-end mediante la interfaz de usuario de Emulator Suite o conectando su aplicación o código de prueba a los emuladores mediante el SDK de su plataforma.

Controladores de prueba para eventos personalizados emitidos por extensiones

Para las funciones que implementa para manejar eventos personalizados de Firebase Extensions con Cloud Functions v2, el emulador de Cloud Functions se empareja con el emulador de Eventarc para admitir activadores de Eventarc .

Para probar controladores de eventos personalizados para extensiones que emiten eventos, debe instalar los emuladores Cloud Functions y Eventarc.

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

Cuando las variables de entorno están configuradas correctamente, Firebase Admin SDK envía automáticamente eventos al emulador Eventarc. A su vez, el emulador de Eventarc vuelve a llamar al emulador de Cloud Functions para activar cualquier controlador registrado.

Puede consultar los registros de funciones en la interfaz de usuario de Emulator Suite para obtener detalles sobre la ejecución del controlador.

Configurar un entorno de prueba local

Si sus funciones se basan en una configuración de entorno basada en dotenv, puede emular ese comportamiento en su entorno de prueba local.

Cuando usa un emulador local de Cloud Functions, puede anular las variables de entorno para su proyecto configurando un archivo .env.local . El contenido de .env.local tiene prioridad sobre .env y el archivo .env específico del proyecto.

Por ejemplo, un proyecto podría incluir estos tres archivos que contienen valores ligeramente diferentes para el desarrollo y las pruebas locales:

.env .env.dev .env.local
PLANETA=Tierra

AUDIENCIA=Humanos

AUDIENCIA=Dev Humans AUDIENCIA=Humanos locales

Cuando se inicia en el contexto local, el emulador carga las variables de entorno como se muestra:

  $ firebase emulators:start
  i  emulators: Starting emulators: functions
  # Starts emulator with following environment variables:
  #  PLANET=Earth
  #  AUDIENCE=Local Humans

Secretos y credenciales en el emulador de Cloud Functions

El emulador de Cloud Functions admite el uso de secretos para almacenar y acceder a información de configuración confidencial . De forma predeterminada, el emulador intentará acceder a sus secretos de producción utilizando las credenciales predeterminadas de la aplicación . En determinadas situaciones, como entornos de CI, es posible que el emulador no pueda acceder a valores secretos debido a restricciones de permisos.

De forma similar a la compatibilidad con el emulador de Cloud Functions para las variables de entorno, puede anular los valores secretos configurando un archivo .secret.local . Esto le facilita probar sus funciones localmente, especialmente si no tiene acceso al valor secreto.

¿Qué otras herramientas existen para probar Cloud Functions?

El emulador de Cloud Functions se complementa con otras herramientas de pruebas y prototipos:

  • El shell de Cloud Functions, que permite la creación de prototipos y el desarrollo de funciones interactivas e iterativas. El shell emplea el emulador de Cloud Functions con una interfaz de estilo REPL para el desarrollo. No se proporciona integración con los emuladores de Cloud Firestore o Realtime Database. Con el shell, simula datos y realiza llamadas a funciones para simular la interacción con productos que Local Emulator Suite no admite actualmente: Analytics, Remote Config y Crashlytics.
  • El SDK de Firebase Test para Cloud Functions, un framework Node.js con mocha para el desarrollo de funciones. En efecto, el SDK de prueba de Cloud Functions proporciona automatización sobre el shell de Cloud Functions.

Puede encontrar más información sobre el shell de Cloud Functions y el SDK de prueba de Cloud Functions en Probar funciones de forma interactiva y Pruebas unitarias de Cloud Functions .

En qué se diferencia el emulador de Cloud Functions de la producción

El emulador de Cloud Functions está bastante cerca del entorno de producción para la mayoría de los casos de uso. Hemos trabajado mucho para garantizar que todo dentro del tiempo de ejecución de Node esté lo más cerca posible de la producción. Sin embargo, el emulador no imita el entorno de producción en contenedores completo, por lo que, si bien el código de su función se ejecutará de manera realista, otros aspectos de su entorno (es decir, archivos locales, comportamiento después de fallas de las funciones, etc.) serán diferentes.

IAM en la nube

Firebase Emulator Suite no intenta replicar ni respetar ningún comportamiento relacionado con IAM para ejecutarse. Los emuladores se adhieren a las reglas de seguridad de Firebase proporcionadas, pero en situaciones en las que normalmente se usaría IAM, por ejemplo, para configurar la cuenta de servicio de invocación de Cloud Functions y, por lo tanto, los permisos, el emulador no es configurable y utilizará la cuenta disponible globalmente en su máquina de desarrollador. similar a ejecutar un script local directamente.

Restricciones de memoria y procesador

El emulador no impone restricciones de memoria o procesador para sus funciones. Sin embargo, el emulador admite funciones de tiempo de espera a través del argumento de tiempo de ejecución timeoutSeconds .

Tenga en cuenta que el tiempo de ejecución de la función puede diferir de la producción cuando las funciones se ejecutan en el emulador. Recomendamos que después de haber diseñado y probado las funciones con el emulador, ejecute pruebas limitadas en producción para confirmar los tiempos de ejecución.

Planificación de diferencias en entornos locales y de producción

Dado que el emulador se ejecuta en su máquina local, depende de su entorno local para aplicaciones y programas y utilidades integrados.

Tenga en cuenta que su entorno local para el desarrollo de Cloud Functions puede diferir del entorno de producción de Google:

  • Las aplicaciones que instala localmente para simular el entorno de producción (por ejemplo, ImageMagick de este tutorial ) pueden tener un comportamiento diferente al de producción, especialmente si necesita versiones diferentes o se desarrolla en un entorno que no es Linux. Considere implementar su propia copia binaria del programa faltante junto con la implementación de su función.

  • De manera similar, las utilidades integradas (p. ej., comandos de shell como ls , mkdir ) pueden diferir de las versiones disponibles en producción, especialmente si está desarrollando en un entorno que no es Linux (p. ej., macOS). Puede manejar este problema utilizando alternativas de solo nodo a los comandos nativos, o creando binarios de Linux para agrupar con su implementación.

Reintentando

El emulador de Cloud Functions no admite funciones de reintento en caso de error.

¿Qué sigue?