Conecte su aplicación al emulador de funciones de nube

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 , de instalar y configurar Local Emulator Suite y de revisar sus comandos CLI .

Elige un proyecto de Firebase

Firebase Local Emulator Suite emula productos para un único 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 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ó (muy probablemente a través de la consola de Firebase).

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

Cuando trabajas con proyectos reales de Firebase, puedes ejecutar emuladores para cualquiera o todos los productos compatibles.

Para cualquier producto que no esté emulando, sus aplicaciones y código interactuarán con el recurso activo (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- .

Cuando trabajas con proyectos de demostración de Firebase, tus aplicaciones y código interactúan solo con emuladores. Si su aplicación intenta interactuar con un recurso para el cual 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 puedes 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 fuera de línea, ya que no es necesario acceder a Internet para descargar la configuración del SDK.

Instrumenta tu aplicación para hablar con los emuladores

Instrumente su aplicación para funciones invocables

Si sus actividades de prototipo y prueba involucran funciones de backend invocables , configure la interacción con el emulador de Cloud Functions para Firebase de esta 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);
Rápido
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);

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

Cada función HTTPS en su código se entregará 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 desde las siguientes fuentes:

  • Emulador de base de datos en tiempo real
  • Emulador de Cloud Firestore
  • Emulador de autenticación
  • Emulador de pub/sub

Para activar 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 implementas 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 Eventarc se está ejecutando. Los SDK de Firebase Admin se conectan automáticamente al emulador de Eventarc cuando se configura la variable de entorno EVENTARC_EMULATOR . Puede modificar el puerto predeterminado como se explica en Configurar Local Emulator Suite .

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

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 dependen de la configuración del entorno basado en dotenv, puede emular ese comportamiento en su entorno de prueba local.

Cuando utiliza un emulador local de Cloud Functions, puede anular las variables de entorno de 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=Desarrolladores humanos 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 manera similar a la compatibilidad del emulador de Cloud Functions con 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 otros prototipos y herramientas de prueba:

  • El shell de Cloud Functions, que permite el desarrollo y la creación de prototipos y funciones interactivas e iterativas. El shell emplea el emulador Cloud Functions con una interfaz 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 prueba de Firebase para Cloud Functions, un marco Node.js con mocha para el desarrollo de funciones. De hecho, el SDK de prueba de Cloud Functions proporciona automatización en la parte superior del 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 en 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 su código de función se ejecutará de manera realista, otros aspectos de su entorno (es decir, archivos locales, comportamiento después de fallas de funciones, etc.) serán diferentes.

Gestión de identidades y accesos en la nube

Firebase Emulator Suite no intenta replicar ni respetar ningún comportamiento relacionado con IAM para su ejecución. Los emuladores cumplen con las reglas de seguridad de Firebase proporcionadas, pero en situaciones en las que normalmente se usaría IAM, por ejemplo, para configurar Cloud Functions que invocan la cuenta de servicio y, por lo tanto, los permisos, el emulador no es configurable y usará 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 del de producción cuando las funciones se ejecutan en el emulador. Le recomendamos que después de haber diseñado y probado funciones con el emulador, ejecute pruebas limitadas en producción para confirmar los tiempos de ejecución.

Planificación de las diferencias en los entornos locales y de producción.

Dado que el emulador se ejecuta en su máquina local, depende de su entorno local para las aplicaciones y los 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 diferir en su comportamiento del de producción, especialmente si necesita versiones diferentes o las desarrolla en un entorno que no es Linux. Considere implementar su propia copia binaria del programa que falta junto con la implementación de su función.

  • De manera similar, las utilidades integradas (por ejemplo, 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 (por ejemplo, macOS). Puede solucionar este problema utilizando alternativas de solo nodo a los comandos nativos o creando archivos binarios de Linux para incluirlos en su implementación.

Reintentando

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

¿Qué sigue?