Sincroniza Cloud Functions con Firebase Hosting para generar y entregar tu contenido dinámico o compilar las APIs de REST como microservicios.
Cloud Functions for Firebase te permite ejecutar automáticamente el código de backend en respuesta a las solicitudes HTTPS. Tu código se almacena en la nube de Google y se ejecuta en un entorno administrado. No necesitas administrar ni escalar tus propios servidores.
Para ver casos de uso y muestras de ejemplo de Cloud Functions integrado en Firebase Hosting, visita nuestra descripción general de la computación sin servidores.
Conecta Cloud Functions a Firebase Hosting
En esta sección, se proporciona un ejemplo detallado para conectar una función a Firebase Hosting.
Recuerda que si quieres mejorar el rendimiento de la entrega de contenido dinámico, puedes configurar la caché.
Paso 1: Configura Cloud Functions
Asegúrate de tener la versión más reciente de Firebase CLI y de que inicializaste Firebase Hosting.
Consulta la guía de introducción de Hosting para obtener instrucciones detalladas sobre cómo instalar la CLI y, luego, inicializar Hosting.
Asegúrate de haber configurado Cloud Functions:
Si ya configuraste Cloud Functions, puedes continuar con el Paso 2: Crea y prueba una función de HTTPS.
Si no configuraste Cloud Functions, haz lo siguiente:
Inicializa Cloud Functions ejecutando el siguiente comando desde la raíz del directorio de tu proyecto:
firebase init functions
Cuando se te solicite, selecciona JavaScript (en este ejemplo detallado, se utiliza JS).
Verifica que tengas un directorio
functions
en el directorio del proyecto local (creado por el comando de Firebase que acabas de ejecutar). El código de Cloud Functions reside en el directoriofunctions
.
Paso 2: Crea y prueba una función de HTTPS para el sitio de Hosting
Abre
/functions/index.js
en tu editor favorito.Reemplaza el contenido del archivo por el siguiente código.
Este código crea una función de HTTPS (denominada
bigben
) que responde a las solicitudes HTTPS con unBONG
para cada hora del día, como un reloj.const functions = require('firebase-functions/v1'); exports.bigben = functions.https.onRequest((req, res) => { const hours = (new Date().getHours() % 12) + 1 // London is UTC + 1hr; res.status(200).send(`<!doctype html> <head> <title>Time</title> </head> <body> ${'BONG '.repeat(hours)} </body> </html>`); });
Prueba tus funciones de forma local con Firebase Local Emulator Suite.
Desde la raíz del directorio del proyecto local, ejecuta el siguiente comando:
firebase emulators:start
Accede a la función a través de la URL local que muestra la CLI, por ejemplo:
.http://localhost:5001/PROJECT_ID/us-central1/bigben
Consulta la documentación de Cloud Functions para obtener más información sobre las solicitudes HTTPS.
En el siguiente paso, se te indicará cómo acceder a esta función de HTTPS desde una URL de Firebase Hosting para que pueda generar contenido dinámico para el sitio alojado en Firebase.
Paso 3: Dirige solicitudes HTTPS a la función
Con las reglas de reescritura, puedes dirigir solicitudes que coincidan con patrones específicos a un mismo destino. En los siguientes pasos, se muestra cómo dirigir todas las solicitudes desde la ruta de acceso ../bigben
en el sitio de Hosting para ejecutar la función bigben
.
Abre el archivo
firebase.json
.Agrega la siguiente configuración de
rewrite
en la secciónhosting
:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/bigben", "function": { "functionId": "bigben", "region": "us-central1" // optional (see note below) "pinTag": true // optional (see note below) } } ] }
Vuelve a probar con los emuladores de Firebase para confirmar que el redireccionamiento funciona como se espera.
Desde la raíz del directorio del proyecto local, ejecuta el siguiente comando:
firebase emulators:start
Visita la URL alojada de forma local de tu sitio como lo muestra la CLI (generalmente
localhost:5000
), pero agrega la URL conbigben
, de esta manera:http://localhost:5000/bigben
Realiza iteraciones en tu función y su funcionalidad para tu sitio. Usa los emuladores de Firebase para probar estas iteraciones.
Para obtener el mejor rendimiento, ubica tus funciones con Hosting por medio de una de las siguientes regiones:
us-west1
us-central1
us-east1
europe-west1
asia-east1
Visita la página de configuración de Hosting para obtener más detalles sobre las reglas de reescritura. También puedes obtener información sobre el orden de prioridad de las respuestas de varias configuraciones de Hosting.
Recuerda que si quieres mejorar el rendimiento de la entrega de contenido dinámico, puedes configurar la caché.
Paso 4: Implementa tu función
Una vez que tu función se ejecute como deseas en el emulador, puedes continuar con la implementación, la prueba y la ejecución con recursos reales del proyecto. Este es un buen momento para considerar la posibilidad de configurar opciones del entorno de ejecución para controlar el comportamiento de escalamiento en las funciones que se ejecutan en producción.
Implementa tu función, así como el contenido y la configuración de Hosting en tu sitio; para ello, ejecuta el siguiente comando desde la raíz del directorio del proyecto local:
firebase deploy --only functions,hosting
Accede al sitio publicado y la función en las siguientes URLs:
Tus subdominios de Firebase:
PROJECT_ID.web.app/bigben
yPROJECT_ID.firebaseapp.com/bigben
Cualquier dominio personalizado conectado:
CUSTOM_DOMAIN/bigben
Usa un framework web
Puedes usar frameworks web, como Express.js, en Cloud Functions para entregar el contenido dinámico de tu app y escribir aplicaciones web complejas con mayor facilidad.
En la siguiente sección, se proporciona un ejemplo detallado para usar Express.js con Firebase Hosting y Cloud Functions.
Para instalar Express.js en el proyecto local, ejecuta el siguiente comando desde el directorio
functions
:npm install express --save
Abre el archivo
/functions/index.js
y, a continuación, importa e inicializa Express.js:const functions = require('firebase-functions/v1'); const express = require('express'); const app = express();
Agrega los dos extremos que siguen a continuación:
Agrega a
/
el primer extremo para entregar el índice del sitio web.app.get('/', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.send(` <!doctype html> <head> <title>Time</title> <link rel="stylesheet" href="/style.css"> <script src="/script.js"></script> </head> <body> <p>In London, the clock strikes: <span id="bongs">${'BONG '.repeat(hours)}</span></p> <button onClick="refresh(this)">Refresh</button> </body> </html>`); });
Y agrega otro extremo para mostrar el recuento de
BONG
como API, en formato JSON, en/api
, de la siguiente manera:app.get('/api', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.json({bongs: 'BONG '.repeat(hours)}); });
Exporta la app para Express.js como una función de HTTPS, como se indica a continuación:
exports.app = functions.https.onRequest(app);
En el archivo
firebase.json
, dirige todas las solicitudes a la funciónapp
. Esta operación de reescritura permite que Express.js entregue la ruta secundaria que configuramos (en este ejemplo,/
y/api
).{ "hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "**", "function": "app" } ] } }
Agrega middleware
Para continuar con nuestro ejemplo, ahora que utilizas Express.js, puedes agregar Express.js middleware de la manera típica. Por ejemplo, puedes habilitar las solicitudes CORS en nuestros extremos.
Instala el middleware
cors
; para ello, ejecuta el siguiente comando:npm install --save cors
Abre el archivo
/functions/index.js
y, luego, agregacors
a la app de Express.js, de la siguiente manera:const cors = require('cors')({origin: true}); app.use(cors);
Consulta la documentación de Cloud Functions para obtener más información sobre cómo usar Firebase con las apps para Express y los módulos de middleware.
Próximos pasos
Configura el almacenamiento en caché para el contenido dinámico en una CDN global.
Usa el SDK de Firebase Admin para interactuar con otros servicios de Firebase.
Revisa los precios y las cuotas y los límites de Cloud Functions.