Associez Cloud Functions à Firebase Hosting pour générer et diffuser votre contenu dynamique ou créer des API REST en tant que microservices.
Cloud Functions pour Firebase vous permet d'exécuter automatiquement du code backend en réponse aux requêtes HTTPS. Votre code est stocké dans le cloud de Google et s'exécute dans un environnement géré. Il n'est pas nécessaire de gérer et de faire évoluer vos propres serveurs.
Pour des exemples de cas d'utilisation et d'exemples pour les fonctions Cloud intégrées à Firebase Hosting, consultez notre présentation du serveur sans serveur .
Connectez les fonctions cloud à l'hébergement Firebase
Cette section fournit un exemple pas à pas pour connecter une fonction à Firebase Hosting.
Notez que pour améliorer les performances de diffusion du contenu dynamique, vous pouvez éventuellement ajuster vos paramètres de cache .
Étape 1 : Configurer les fonctions cloud
Assurez-vous que vous disposez de la dernière version de Firebase CLI et que vous avez initialisé Firebase Hosting.
Pour obtenir des instructions détaillées sur l'installation de la CLI et l'initialisation de l'hébergement, consultez le guide de démarrage pour l'hébergement .
Assurez-vous d'avoir configuré Cloud Functions :
Si vous avez déjà configuré Cloud Functions, vous pouvez passer à l'étape 2 : créer et tester une fonction HTTPS .
Si vous n'avez pas configuré Cloud Functions :
Initialisez Cloud Functions en exécutant la commande suivante à partir de la racine du répertoire de votre projet :
firebase init functions
Lorsque vous y êtes invité, sélectionnez JavaScript (cet exemple pas à pas utilise JS).
Vérifiez que vous disposez d'un répertoire
functions
dans le répertoire de votre projet local (créé par la commande Firebase que vous venez d'exécuter). Ce répertoirefunctions
contient le code de Cloud Functions.
Étape 2 : Créez et testez une fonction HTTPS pour votre site d'hébergement
Ouvrez
/functions/index.js
dans votre éditeur préféré.Remplacez le contenu du fichier par le code suivant.
Ce code crée une fonction HTTPS (nommée
bigben
) qui répond aux requêtes HTTPS avec unBONG
pour chaque heure de la journée, tout comme une horloge.const functions = require('firebase-functions'); 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>`); });
Testez vos fonctions localement à l'aide de Firebase Local Emulator Suite .
Depuis la racine du répertoire de votre projet local, exécutez la commande suivante :
firebase emulators:start
Accédez à la fonction via l'URL locale renvoyée par la CLI, par exemple :
.http://localhost:5001/ PROJECT_ID /us-central1/bigben
Consultez la documentation Cloud Functions pour en savoir plus sur les requêtes HTTPS.
L'étape suivante vous explique comment accéder à cette fonction HTTPS à partir d'une URL d'hébergement Firebase afin qu'elle puisse générer du contenu dynamique pour votre site hébergé par Firebase.
Étape 3 : Dirigez les requêtes HTTPS vers votre fonction
Avec les règles de réécriture , vous pouvez diriger les requêtes qui correspondent à des modèles spécifiques vers une seule destination. Les étapes suivantes vous montrent comment diriger toutes les requêtes du chemin ../bigben
sur votre site d'hébergement pour exécuter la fonction bigben
.
Ouvrez votre fichier
firebase.json
.Ajoutez la configuration
rewrite
suivante sous la sectionhosting
:"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) } } ] }
Confirmez que votre redirection fonctionne comme prévu en testant à nouveau avec les émulateurs Firebase.
Depuis la racine du répertoire de votre projet local, exécutez la commande suivante :
firebase emulators:start
Visitez l'URL hébergée localement pour votre site telle que renvoyée par la CLI (généralement
localhost:5000
), mais ajoutez l'URL avecbigben
, comme ceci :http://localhost:5000/bigben
Itérez sur votre fonction et ses fonctionnalités pour votre site. Utilisez les émulateurs Firebase pour tester ces itérations.
Si
region
est omise dans un blocfunction
de la configurationhosting.rewrites
, la CLI Firebase tente de détecter automatiquement la région à partir du code source de la fonction qui, s'il n'est pas spécifié, est par défautus-central1
. Si le code source de la fonction n'est pas disponible, la CLI tente de détecter la région à partir de la fonction déployée. Si la fonction se trouve dans plusieurs régions, la CLI exige queregion
soit spécifiée dans la configurationhosting.rewrites
.
La fonctionnalité
pinTag
est uniquement disponible dans Cloud Functions pour Firebase (2e génération). Avec cette fonctionnalité, vous pouvez vous assurer que chaque fonction de génération du contenu dynamique de votre site reste synchronisée avec vos ressources d'hébergement statiques et votre configuration d'hébergement. En outre, cette fonctionnalité vous permet de prévisualiser vos réécritures vers les fonctions sur les canaux de prévisualisation de l'hébergement.Si vous ajoutez
"pinTag": true
à un blocfunction
de la configurationhosting.rewrites
, alors la fonction "épinglée" sera déployée avec vos ressources d'hébergement statiques et votre configuration, même lors de l'exécution. Si vous restaurez une version de votre site, la fonction « épinglé » est également restaurée.
firebase deploy --only hosting Cette fonctionnalité s'appuie sur les balises Cloud Run , qui ont une limite de 1 000 balises par service et de 2 000 balises par région. Cela signifie qu'après des centaines de déploiements, les versions les plus anciennes d'un site peuvent cesser de fonctionner.
Pour de meilleures performances, colocalisez vos fonctions avec l'hébergement en choisissant l'une des régions suivantes :
-
us-west1
-
us-central1
-
us-east1
-
europe-west1
-
asia-east1
Visitez la page de configuration de l'hébergement pour plus de détails sur les règles de réécriture . Vous pouvez également en savoir plus sur l' ordre de priorité des réponses pour diverses configurations d'hébergement.
Notez que pour améliorer les performances de diffusion du contenu dynamique, vous pouvez éventuellement ajuster vos paramètres de cache .
Étape 4 : Déployez votre fonction
Une fois que votre fonction fonctionne comme vous le souhaitez dans l'émulateur, vous pouvez procéder à son déploiement, à son test et à son exécution avec les ressources réelles du projet. C’est le bon moment pour envisager de définir des options d’exécution pour contrôler le comportement de mise à l’échelle des fonctions exécutées en production.
Déployez votre fonction ainsi que votre contenu et votre configuration d'hébergement sur votre site en exécutant la commande suivante depuis la racine du répertoire de votre projet local :
firebase deploy --only functions,hosting
Accédez à votre site en direct et à votre fonction aux URL suivantes :
Vos sous-domaines Firebase :
PROJECT_ID .web.app/bigben
etPROJECT_ID .firebaseapp.com/bigben
Tous les domaines personnalisés connectés :
CUSTOM_DOMAIN /bigben
Utiliser un framework web
Vous pouvez utiliser des frameworks Web, comme Express.js , dans Cloud Functions pour diffuser le contenu dynamique de votre application et écrire plus facilement des applications Web complexes.
La section suivante fournit un exemple pas à pas d'utilisation d'Express.js avec Firebase Hosting et Cloud Functions.
Installez Express.js dans votre projet local en exécutant la commande suivante à partir de votre répertoire
functions
:npm install express --save
Ouvrez votre fichier
/functions/index.js
, puis importez et initialisez Express.js :const functions = require('firebase-functions'); const express = require('express'); const app = express();
Ajoutez les deux points de terminaison suivants :
Ajoutez le premier point de terminaison pour servir l'index de notre site 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>`); });
Et un autre point de terminaison pour renvoyer le nombre
BONG
sous forme d'API, au format JSON, sous/api
: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)}); });
Exportez l'application Express.js en tant que fonction HTTPS :
exports.app = functions.https.onRequest(app);
Dans votre fichier
firebase.json
, dirigez toutes les requêtes vers la fonctionapp
. Cette réécriture permet à Express.js de servir les différents sous-chemins que nous avons configurés (dans cet exemple,/
et/api
).{ "hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "**", "function": "app" } ] } }
Ajouter un middleware
Poursuivant notre exemple, maintenant que vous utilisez Express.js, vous pouvez ajouter le middleware Express.js de la manière habituelle. Par exemple, vous pouvez activer les requêtes CORS sur nos points de terminaison.
Installez le middleware
cors
en exécutant la commande suivante :npm install --save cors
Ouvrez votre fichier
/functions/index.js
, puis ajoutezcors
à votre application Express.js, comme ceci :const cors = require('cors')({origin: true}); app.use(cors);
Consultez la documentation Cloud Functions pour en savoir plus sur l'utilisation de Firebase avec les applications Express et les modules middleware.
Prochaines étapes
Configurez la mise en cache de votre contenu dynamique sur un CDN global.
Interagissez avec d'autres services Firebase à l'aide du SDK d'administration Firebase .
Examinez la tarification , ainsi que les quotas et limites pour Cloud Functions.