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 | 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?
- Para ver un conjunto seleccionado de videos y ejemplos prácticos detallados, sigue la lista de reproducción de capacitación de Firebase Emulators .
- Obtenga más información sobre el emulador de Cloud Functions para Firebase en Ejecutar funciones localmente .