Prendre Firebase Serverless - Applications mobiles et Web simplifiées
Publié: 2022-03-11Les applications mobiles et Web nécessitent généralement un serveur principal. Les applications Web nécessitent un serveur Web pour fournir du contenu. Les applications doivent également stocker des profils d'utilisateurs et des médias tels que des images et des vidéos. La communication entre l'application et le serveur se fait souvent à l'aide d'une API, qui est généralement REST.
Les applications sont codées dans une gamme de langues. Une application iOS est écrite en Swift ou Objective-C. Les applications Android sont écrites en Java ou Kotlin. Les applications Web sont écrites en HTML, CSS, JavaScript et souvent dans des frameworks complexes tels que Angular ou React. Les développeurs front-end doivent connaître les langages pertinents et leurs outils de développement associés.
Les serveurs principaux sont écrits dans une gamme de langages, notamment Go, Java, PHP et Python. Chacun de ces langages possède sa propre suite de bibliothèques pour faciliter l'écriture d'applications complexes.
La plupart des développeurs se considèrent comme des développeurs front-end ou back-end. Les développeurs full-stack qui maîtrisent les deux rôles sont relativement rares.
L'exécution et la maintenance d'un serveur principal présentent leurs propres défis. Les serveurs doivent être créés, mis à jour et sauvegardés. Les serveurs doivent également être sécurisés pour empêcher la perte de données accidentelle ou malveillante ou l'accès à des données sensibles. De plus, les serveurs doivent avoir des noms d'hôte et des adresses IP attribués pour pouvoir s'y connecter.
Qu'est-ce que Firebase ?
Firebase a commencé comme une architecture de messagerie mobile qui a été acquise par Google. Il a depuis évolué pour devenir une suite de plus de 25 composants qui interagissent avec Google Cloud Platform.
Firebase se compose de kits de développement logiciel (SDK), qui permettent aux développeurs mobiles et Web d'accéder aux fonctionnalités du cloud de manière simple, sécurisée et fiable. Ils compensent automatiquement une mauvaise connectivité réseau. Il existe une console Web Firebase pour activer, administrer et sécuriser les composants. Il existe également des outils de ligne de commande et des API REST pour une utilisation plus approfondie.
Certains composants Firebase sont plus connus que d'autres. Il existe peu de dépendances entre les composants, ce qui permet une adoption progressive des fonctionnalités. L'authentification et l'analyse Firebase sont les plus utilisées.
Firebase a évolué pour devenir une plate-forme qui permet aux développeurs front-end mobiles et Web de développer des applications complètes sans avoir besoin de serveurs back-end. Les améliorations récentes ont grandement facilité les solutions sans serveur qui offrent une alternative viable, évolutive et rentable aux solutions de serveur Cloud Virtual Machine.
Tarification et plans de facturation Firebase
Le plan de facturation Firebase de base, appelé Spark, est gratuit. Il existe des limites à l'utilisation des ressources cloud, mais elles sont assez généreuses. Il est possible d'exécuter une application de taille raisonnable sans encourir de frais.
Un site Web avec jusqu'à 1 Go de contenu et des transferts de moins de 10 Go/mois peut être hébergé dans le cadre du plan Spark. Firestore autorise jusqu'à 1 Go de données et un trafic réseau jusqu'à 10 Go/mois. Les limites de stockage dans le cloud vont jusqu'à 5 Go de données et les téléchargements jusqu'à 1 Go/jour.
Si l'application a besoin de plus de ressources, un plan de facturation payant tel que le paiement à l'utilisation est requis. Les limites gratuites du plan Spark s'appliquent toujours. Les frais facturables sont assez faibles. La tarification peut être trouvée sur la page de tarification de Firebase.
Les machines virtuelles exécutées dans le cloud entraînent des frais lorsqu'elles fonctionnent, même si elles ne sont pas utilisées. Les solutions sans serveur Firebase évoluent jusqu'à zéro. Cela signifie que les ressources ne fonctionnent effectivement que lorsqu'elles sont utilisées et n'entraînent pas de frais lorsqu'elles ne sont pas utilisées. Ceci est idéal pour les applications pour les entreprises saisonnières telles que les locations de vacances ou les événements périodiques tels que les concerts. Il y aurait beaucoup d'activité suivie de mois d'inactivité.
Comment configurer Firebase
Un compte de messagerie est requis pour l'authentification. Un compte de messagerie Google est préférable. Ils peuvent être créés sur https://mail.google.com.
Un compte Google Cloud Platform (GCP) est également requis. Un essai gratuit est disponible ici. Cela vous donne un crédit de 300 $, disponible pendant un an. Une carte de crédit est requise comme preuve d'identité. Google peut facturer 1 USD, puis le rembourser. La carte de crédit sera débitée mensuellement si la facturation est activée et que des ressources facturables sont utilisées. Il existe également des sociétés fournisseurs de Google qui agissent en tant qu'intermédiaires pour la facturation. Vous payez le fournisseur pour l'utilisation du cloud, et il paie Google. Ils ont leurs propres plans de facturation et peuvent proposer un essai gratuit.
Il est important de surveiller fréquemment la section de facturation de la console cloud pour surveiller l'utilisation. Il est facile de garder actives des ressources telles que le stockage lorsqu'elles ne sont pas nécessaires, ce qui peut entraîner des coûts considérables au fil du temps.
Les projets Firebase sont également des projets GCP. Vous pouvez créer un projet GCP et l'importer dans Firebase, ou créer un projet Firebase, qui créera également un projet GCP. La console Firebase est là.
Une configuration différente est requise pour différents types d'applications. Les principaux sont Android, iOS et les applications Web. Les instructions de configuration se trouvent dans les guides Firebase officiels.
Les outils de l'interface de ligne de commande (CLI) Firebase sont requis pour certaines opérations. Ceux-ci nécessitent que Node.js
et l'outil npm
soient installés. Si elle est exécutée sur macOS ou Linux, la commande npm
devra être exécutée avec sudo
.
sudo npm install -g firebase-tools
Authentification et autorisation
L'authentification Firebase est peut-être le composant Firebase le plus utilisé. Les utilisateurs peuvent sélectionner un ou plusieurs mécanismes d'authentification. Il s'agit de l'adresse e-mail et du mot de passe, des numéros de téléphone et des fournisseurs d'identité fédérés Google, Facebook, Twitter et GitHub. N'importe quel nombre de mécanismes d'authentification peut être activé.
L'interface utilisateur Firebase invite l'utilisateur à indiquer le mécanisme à utiliser :
Firebase fournit des interfaces utilisateur pour l'authentification qui peuvent être appelées à partir de quelques lignes de code côté client. Il existe également des API pour effectuer l'authentification manuellement. En cas d'authentification réussie, un jeton d'identité est généré et peut être utilisé pour la validation back-end.
Les API permettent aux utilisateurs administratifs de gérer les utilisateurs par programmation. Les opérations comprennent :
- Création, mise à jour et suppression d'utilisateurs
- Rechercher des utilisateurs par critères de recherche tels que l'adresse e-mail ou le numéro de téléphone
- Accéder à des informations telles que la date de création du compte et la date et l'heure de la dernière connexion
- Validez les adresses e-mail et les numéros de téléphone sans avoir à utiliser les flux de travail existants
La plupart des applications mobiles et Web exigent qu'un grand nombre d'utilisateurs se connectent à leurs applications. Par exemple, toute personne disposant d'un compte Google Mail peut s'authentifier auprès de n'importe quelle application qui autorise l'authentification Google. Un formulaire d'autorisation est nécessaire pour restreindre l'accès à l'application à certains utilisateurs. Cela peut être facilement fait en stockant des associations entre les adresses e-mail et les rôles d'accès dans le stockage de données. Une fois l'authentification réussie, l'adresse e-mail est recherchée dans le stockage de données. Si l'utilisateur existe avec les rôles corrects, l'accès est accordé ; sinon, l'utilisateur est déconnecté de force.
Hébergement Firebase
L'hébergement Firebase permet d'héberger du contenu Web statique, qui inclut JavaScript, dans le cloud sans avoir besoin d'un serveur Web. Le contenu est mis en cache à la périphérie d'un réseau mondial de distribution de contenu (CDN). Cela permet un accès rapide au contenu de n'importe où dans le monde.
Un ou plusieurs sites Web peuvent être hébergés en les ajoutant à la section Hébergement d'un projet Firebase dans la console Firebase. Le contenu est livré via SSL et reçoit deux URL de la forme, [https://site-name.web.app] et https://site-name.firebaseapp.com, où site-name
est soit le nom du projet, soit un nom de site spécifié par l'utilisateur.
Il est très facile d'héberger le site à partir de votre propre nom de domaine à condition que vous puissiez modifier les enregistrements DNS du domaine. Vous ajoutez votre nom de domaine à un site sur la console Firebase. Vous recevrez alors un enregistrement DNS TXT, que vous devrez ajouter au DNS de votre domaine pour prouver à Google que vous possédez le domaine. Une fois l'enregistrement TXT visible, vous pouvez obtenir les enregistrements DNS A du site. Un certificat SSL est automatiquement provisionné pour le site. Une fois le certificat provisionné, le site est disponible dans le monde entier. Cela peut, en principe, prendre plusieurs heures pour les mises à jour DNS et le provisionnement des certificats. En pratique, le processus peut être complété en 20 minutes.
Pour ajouter du contenu à l'hébergement, tout d'abord, créez un répertoire pour le site et cd
-y depuis la ligne de commande. Ensuite, connectez-vous à Firebase et initialisez le répertoire du projet.
firebase login firebase init
Vous serez invité à sélectionner un projet et les services client requis. Les services peuvent toujours être ajoutés ultérieurement et ne doivent pas être sélectionnés à ce stade.
Créez un fichier appelé firebase.json
, qui définit le répertoire racine du site Web et les fichiers à exclure. Vous aurez également besoin d'un fichier .gitignore
pour exclure des fichiers du contrôle de version.
{ "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ] } }
Ensuite, copiez le contenu statique dans le répertoire public. Enfin, déployez le site dans le cloud.
firebase deploy
Pour modifier le contenu Web, modifiez simplement les fichiers de contenu et lancez la commande de déploiement. Chaque déploiement apparaît sous la forme d'une version sur la console Firebase. Vous pouvez revenir à une version précédente en un seul clic.

Firebase Hosting peut également réécrire les URI dans les fichiers, Cloud Functions et Cloud Run. Cela simplifie grandement les choses puisqu'il n'est pas nécessaire d'attribuer un domaine à ces services. Les réécritures sont définies en ajoutant une section de réécriture à la section d'hébergement de firebase.json. Le déploiement de l'hébergement échouera si le service n'existe pas.
{ "hosting": { "public": "public", "rewrites": [ { "source": "/xxx", "destination": "/profile.html" }, { "source": "/yyy", "function": "profile" }, { "source": "/api{,/**}", "run": { "serviceId": "cloud-api", "region": "europe-west1" } } ] } }
Stockage de données
Firebase fournit des API client pour accéder au stockage de données basé sur le cloud. Il existe trois types de stockage :
- Base de données en temps réel
- Cloud Firestore
- Stockage en ligne
Cela permet aux clients mobiles et Web de stocker et de récupérer des données sans avoir besoin d'un serveur.
Base de données en temps réel
La base de données en temps réel est une base de données NoSQL hébergée dans le cloud. Les données de la base de données en temps réel sont automatiquement synchronisées en temps réel avec tous les appareils connectés. Il fonctionne sur plusieurs plates-formes avec Android, iOS et le Web. Les données sont stockées sous forme d'arborescence JSON. Des règles de sécurité peuvent être définies pour contrôler l'accès en lecture et en écriture aux données.
Chaque appareil conserve une copie locale de la base de données. Cela signifie que les données sont disponibles lorsqu'elles ne sont pas connectées au réseau. Lors de la reconnexion, les copies locales et basées sur le cloud des données sont synchronisées.
Les données sont lues par des applications utilisant un écouteur. Un écouteur écoute sur un nœud dans l'arborescence JSON. Chaque fois que les données sont modifiées sur la console ou par un autre utilisateur, le rappel de l'écouteur est appelé avec la nouvelle valeur de données. La base de données en temps réel prend également en charge les requêtes. Chaque requête renvoie un nœud et tous ses nœuds enfants.
Les règles de sécurité par défaut n'autorisent aucun accès aux données. Les règles peuvent être ajoutées globalement ou à des nœuds individuels de l'objet JSON. Les règles de sécurité contrôlent l'accès en lecture et en écriture aux données et peuvent effectuer une validation.
La base de données en temps réel convient mieux aux petits éléments de données qui ne nécessitent pas une structure de données profondément imbriquée. La limite gratuite est de 1 Go de données.
Cloud Firestore
Cloud Firestore est considéré comme le remplacement de la base de données en temps réel. Il étend les fonctionnalités de la base de données en temps réel. Les données ne se trouvent pas dans une arborescence JSON mais dans une collection hiérarchique de documents. Chaque document se compose d'un ensemble de paires clé-valeur et de sous-documents facultatifs. Les requêtes permettent un filtrage et un tri plus complexes et ne renvoient que des documents complets. Les requêtes ne renvoient pas de sous-documents.
Cloud Firestore remplacera bientôt Cloud Datastore. Il peut être exécuté en mode Datastore ou en mode natif. Toutes les applications Datastore seront automatiquement migrées vers Cloud Firestore.
Cloud Firestore est le mieux adapté aux données relativement petites. Il peut avoir une structure de données profondément imbriquée. La limite gratuite est de 1 Go de données.
Stockage en ligne
Cloud Storage sert à stocker des fichiers tels que des images et des clips vidéo. Les clients mobiles et Web peuvent utiliser Firebase pour charger et télécharger des fichiers directement vers et depuis le cloud sans avoir besoin d'un serveur principal. La limite gratuite est de 5 Go de données.
Fonctions cloud
Les fonctions cloud sont une technologie importante pour créer des applications sans serveur. Une fonction cloud peut être écrite en JavaScript, TypeScript, Python ou Go, qui est déployée directement dans le cloud Google. Une fonction est déclenchée par une requête HTTP ou par un événement dans le cloud, comme l'écriture dans Cloud Storage.
Une fonction cloud ne peut traiter qu'une seule requête à la fois, mais le cloud adapte automatiquement la fonction en la répliquant. Une fonction Cloud écrite en Python utilise la bibliothèque Flask pour gérer les requêtes HTTP. La fonction prend un objet de requête comme paramètre et renvoie le corps de la réponse.
Une simple fonction Python Cloud nécessite un répertoire de travail et le point d'entrée se trouve dans le fichier main.py
.
def simple_cloud_function(request): return "It worked"
Les dépendances sont gérées par pip et vont dans un fichier appelé requirements.txt
.
Flask==1.0.2
Une fonction est déployée à l'aide de l'outil de ligne de commande gcloud
. Il spécifie le nom de la fonction, la langue et le déclencheur.
gcloud functions deploy simple_cloud_function --runtime python37 \ --trigger-http
L'URL de la fonction s'affiche lors du déploiement et peut être trouvée en exécutant la commande describe.
gcloud functions describe simple_cloud_function Url: https://europe-west1-project-id.cloudfunctions.net/simplecloud_function
Cloud Functions peut appeler les API Google Cloud et Firebase pour fournir des fonctionnalités back-end. Ils fournissent des informations de journalisation sur le démarrage de l'exécution et le temps d'exécution. Une journalisation supplémentaire peut facilement être ajoutée. Les journaux peuvent être consultés dans l'interface utilisateur de Stackdriver Logging et via l'outil de ligne de commande gcloud
.
gcloud functions logs read simple_cloud_function
Les fonctions peuvent être affichées et supprimées dans Google Cloud Console.
Les fonctions Cloud sont mieux utilisées pour les opérations qui se produisent relativement peu fréquemment. Un exemple d'utilisation consiste à créer une vignette lorsqu'une image est importée dans Cloud Storage. La limite gratuite est de 125 000 appels par mois.
Cloud Run
Cloud Run est une fonctionnalité récemment ajoutée qui facilite grandement les applications sans serveur. Il permet aux conteneurs Docker d'être exécutés dans le cloud sans avoir à configurer une infrastructure complexe. Il peut s'exécuter en mode géré, qui utilise le runtime Knative, qui est basé sur Kubernetes. Il peut également fonctionner sur Anthos, qui est également basé sur Kubernetes, mais permet aux conteneurs d'être exécutés sur des clouds et même sur votre propre centre de données. Il n'est pas nécessaire de configurer et de gérer un cluster Kubernetes car tout se fait automatiquement.
Toute application pouvant être intégrée dans des images Docker peut être gérée par Cloud Run. Il adapte automatiquement le nombre de conteneurs en fonction de la demande. Il se réduit également à zéro lorsque le service n'est pas utilisé. Les services non utilisés n'entraînent aucun frais.
Les conteneurs Docker doivent exécuter un serveur Web s'ils doivent répondre aux requêtes HTTP. Le service Python utilisera Flask. Le point d'entrée sera dans app.py
.
from flask import Flask, request app = Flask(__name__) @app.route('/api/profile') def profile(): page = ''' Page content ''' return page
L'application a besoin d'un Dockerfile
pour créer l'image.
FROM python ENV APP_HOME /app WORKDIR $APP_HOME COPY . . ENV PORT 8080 RUN pip install Flask gunicorn firebase-admin CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 app:app
Les conteneurs Cloud Run sont déployés directement dans le cloud.
gcloud run deploy --image=image_name --platform=managed \ --region=europe-west1 --allow-unauthenticated
Si le nom du service, la plate-forme, la région ou l'opportunité d'autoriser les non authentifiés ne sont pas définis dans la configuration du projet ou fournis sur la ligne de commande, ils seront demandés. Une fois le déploiement terminé, l'URL du service s'affiche. L'URL peut également être obtenue à l'aide de la commande gcloud.
gcloud run services list SERVICE REGION URL LAST DEPLOYED BY LAST DEPLOYED AT cloud-api europe-west1 https://cloud-api-h42ifbxkyq-ew.a.run.app [email protected] 2020-02-05T10:53:30.006Z
L'URL contient un nombre aléatoire difficile à gérer. C'est là que les règles de réécriture de Firebase Hosting deviennent les plus utiles.
Les services peuvent être affichés et supprimés dans Google Cloud Console.
Cloud Run est parfaitement adapté à l'hébergement d'une API REST. Les limites gratuites mensuelles sont de 180 000 secondes CPU, 360 000 secondes de mémoire Go, 2 millions de requêtes et 1 Go de sortie réseau. La limite de sortie réseau gratuite s'applique uniquement si le service est déployé dans une région d'Amérique du Nord.
Authentification
Par défaut, les conteneurs Cloud Functions et Cloud Run sont publics et accessibles à tous sur Internet. À l'aide des règles IAM dans Cloud Console, les services peuvent être limités aux membres du projet, aux groupes Google et aux adresses e-mail individuelles.
Si des restrictions sont en place, l'accès non autorisé est interdit. Pour permettre l'accès, un jeton d'identité doit être ajouté aux en-têtes de requête. Le jeton d'identité peut être obtenu à l'aide de la commande gcloud ou lors du processus d'authentification Firebase.
gcloud auth print-identity-token
Un en-tête d'autorisation est requis.
Authorization: Bearer id-token
Sommaire
Google Cloud Platform et Firebase proposent une gamme de produits qui facilitent grandement le développement d'applications mobiles et Web. Le besoin d'un serveur back-end peut être complètement éliminé en permettant aux clients d'accéder directement aux fonctionnalités du cloud ou en déployant du code back-end dans le cloud à l'aide de Cloud Functions ou de Cloud Run.
Les applications existantes peuvent être migrées progressivement vers le sans serveur. En fait, la façon dont la technologie évolue pourrait signifier que les solutions de serveur traditionnelles basées sur des machines virtuelles ne seront plus nécessaires.