Diffuser du contenu dynamique et héberger des microservices avec Cloud Functions

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 for Firebase vous permet d'exécuter automatiquement du code backend en réponse à des requêtes HTTPS. Votre code est stocké dans le cloud de Google et s'exécute dans un environnement géré. Vous n'avez pas besoin de gérer ni de mettre à l'échelle vos propres serveurs.

Pour obtenir des exemples de cas d'utilisation et des exemples de Cloud Functions intégrés à Firebase Hosting, consultez notre présentation de l'architecture sans serveur.

Associer Cloud Functions à Firebase Hosting

Cette section fournit un exemple de procédure pour associer une fonction à Firebase Hosting.

Notez que pour améliorer les performances de diffusion de contenu dynamique, vous pouvez éventuellement ajuster vos paramètres de cache.

Étape 1 : Configurer Cloud Functions

  1. Assurez-vous que vous disposez de la dernière version de la CLI Firebase et que vous avez initialisé Firebase Hosting.

    Pour obtenir des instructions détaillées sur l'installation de la CLI et l'initialisation Hosting, consultez le guide Premiers pas avec Hosting.

  2. 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 :

      1. Initialisez Cloud Functions en exécutant la commande suivante à partir de la racine du répertoire de votre projet :

        firebase init functions
      2. Lorsque vous y êtes invité, sélectionnez JavaScript (cet exemple de procédure utilise JS).

      3. 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). C'est dans ce répertoire functions que se trouve le code pour Cloud Functions.

Étape 2 : Créer et tester une fonction HTTPS pour votre site Hosting

  1. Ouvrez /functions/index.js dans votre éditeur préféré.

  2. 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 un BONG pour chaque heure de la journée, comme une horloge.

    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>`);
    });
    
  3. Testez vos fonctions localement à l'aide de la Firebase Local Emulator Suite.

    1. À partir de la racine du répertoire de votre projet local, exécutez la commande suivante :

      firebase emulators:start
    2. 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 Cloud Functions documentation pour en savoir plus sur les requêtes HTTPS.

L'étape suivante vous explique comment accéder à cette fonction HTTPS à partir d'une Firebase Hosting URL afin qu'elle puisse générer du contenu dynamique pour votre site hébergé sur Firebase.

Étape 3 : Diriger 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 d'accès ../bigben sur votre Hosting site pour exécuter la fonction bigben.

  1. Ouvrez votre firebase.json fichier.

  2. Ajoutez la configuration rewrite suivante sous la section hosting :

    "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)
        }
      } ]
    }
    
  3. Vérifiez que votre redirection fonctionne comme prévu en effectuant à nouveau des tests avec les émulateurs Firebase.

    1. À partir de la racine du répertoire de votre projet local, exécutez la commande suivante :

      firebase emulators:start
    2. Accédez à l'URL hébergée localement pour votre site, telle qu'elle est renvoyée par la CLI (généralement localhost:5000), mais ajoutez bigben à l'URL, comme suit : http://localhost:5000/bigben

  4. Itérez sur votre fonction et ses fonctionnalités pour votre site. Utilisez les émulateurs Firebase pour tester ces itérations.

Pour des performances optimales, colocalisez vos fonctions avec Hosting en choisissant l'une des régions suivantes :

  • us-west1
  • us-central1
  • us-east1
  • europe-west1
  • asia-east1

Consultez la page de configuration Hosting pour en savoir plus sur les règles de réécriture. Vous pouvez également en savoir plus sur l' ordre de priorité des réponses pour différentes configurations Hosting.

Notez que pour améliorer les performances de diffusion de contenu dynamique, vous pouvez éventuellement ajuster vos paramètres de cache.

Étape 4 : Déployer 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 des ressources de projet réelles. C'est le moment idéal pour envisager de définir des options d'exécution afin de contrôler le comportement de scaling des fonctions exécutées en production.

  1. Déployez votre fonction ainsi que votre Hosting contenu et votre configuration sur votre site en exécutant la commande suivante à partir de la racine du répertoire de votre projet local :

    firebase deploy --only functions,hosting
  2. Accédez à votre site en direct et à votre fonction aux URL suivantes :

Utiliser un framework Web

Vous pouvez utiliser des frameworks Web, tels que 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 de procédure pour utiliser Express.js avec Firebase Hosting et Cloud Functions.

  1. Installez Express.js dans votre projet local en exécutant la commande suivante à partir de votre répertoire functions :

    npm install express --save
  2. Ouvrez votre fichier /functions/index.js, puis importez et initialisez Express.js :

    const functions = require('firebase-functions/v1');
    const express = require('express');
    const app = express();
  3. Ajoutez les deux points de terminaison suivants :

    1. Ajoutez le premier point de terminaison pour diffuser l'index de notre site Web à l'adresse /.

      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>`);
      });
      
    2. Et un autre point de terminaison pour renvoyer le nombre de BONG en tant qu'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)});
      });
      
  4. Exportez l'application Express.js en tant que fonction HTTPS :

    exports.app = functions.https.onRequest(app);
  5. Dans votre fichier firebase.json, dirigez toutes les requêtes vers la fonction app. Cette réécriture permet à Express.js de diffuser 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

Pour poursuivre notre exemple, maintenant que vous utilisez Express.js, vous pouvez ajouter un middleware Express.js de manière classique. Par exemple, vous pouvez activer CORS requêtes sur nos points de terminaison.

  1. Installez le middleware cors en exécutant la commande suivante :

    npm install --save cors
  2. Ouvrez votre fichier /functions/index.js, puis ajoutez cors à votre application Express.js, comme suit :

    const cors = require('cors')({origin: true});
    app.use(cors);

Consultez la Cloud Functions documentation pour en savoir plus sur l'utilisation de Firebase avec des applications Express et des modules middleware.

Étapes suivantes