Trois approches pour déployer une application web (Partie 3)
Exemple d’application : un programme de webscraping d’articles de presse avec analyse de sentiments.
Imaginez : Votre projet de webscraping est enfin terminé! ou presque… Vous avez maintenant une application capable d’extraire des articles de presse en ligne puis d’effectuer une analyse de sentiment sur leur contenu. Vous avez réglé tous les problèmes de compatibilité entre librairies NLP dans votre environnement virtuel. Votre approche de parsing est robuste, l’analyse de sentiment tient la route et vous êtes satisfait du rendu visuel.
Comment faire profiter le monde de votre invention? par le web bien sûr!
Entre un programme développé sur une machine locale et un service web sécurisé et accessible au monde entier, il existe un certain nombre d’étapes à considérer. Le terme « déploiement » désigne le processus nécessaire à la mise en service d’une application également appelé service web. Les approches pour déployer un service web sont multiples.
Dans cette série d’articles, nous présenterons 3 scénarios :
Scénario 1: Approche from scratch
Scénario 2: Approche Docker
Scénario 3: Approche serverless
Scénario 3: Approche “serverless”
Qu’est-ce que l’informatique serverless ?
Serverless signifie déployer et maintenir une application sans avoir à gérer les serveurs de l’application. Le lancement, la maintenance et le redimensionnement (scaling) des serveurs sont pris en charge par un fournisseur de services infonuagiques (cloud service provider ou CSP).
“There is no such thing as the cloud, it's just someone else's computer”
L'infonuagique n’est qu’une expression pour désigner des services informatiques fournis à distance via l’internet. Derrière un service situé dans le cloud, il y a toujours un ordinateur, des processeurs, des réseaux et d’autres équipements quelque part dans une salle de serveur à travers le monde. À titre d’exemple, Azure dispose de centaines de salles de serveurs (data centers) indépendants répartis dans plus de soixante “régions”, elles-mêmes divisées en différentes zones de disponibilité.
De plus, une application basée sur un outil serverless ne signifie pas que l’application fonctionne sans serveur, mais plutôt que les utilisateurs n’ont pas à gérer les serveurs en question.
L’informatique serverless se rapproche de ce qu’on appelle les services PaaS ou “platform as a service”. Dans le modèle PaaS, la responsabilité du fournisseur infonuagique (ou CSP pour Cloud Service Provider) ne se limite pas uniquement à la maintenance et à la sécurité de l’infrastructure. Il prend aussi en charge la gestion du système d’exploitation, les intergiciels (middleware), la sécurité et d’autres aspects dépendamment du type de service.
Le PaaS se distingue ainsi du modèle IaaS ou “infrastructure as a service” dans lequel l’utilisateur loue un équipement (hardware) et est responsable de tous les aspects logiciels. Le CSP se contente de garantir la sécurité et le bon fonctionnement de l’équipement. Une machine virtuelle (VM) est un exemple de service IaaS.
Pourquoi utiliser l'informatique serverless ?
Le premier avantage du serverless est plus généralement celui du PaaS : la simplicité. L’utilisateur n’a qu’à fournir le code d’application et une configuration pour ensuite déployer une application. Déployer un service sur une machine virtuelle (VM) demande au contraire plus de maintenance de la part de l’utilisateur.
Le deuxième avantage et celui qui différencie l’informatique serverless du PaaS est l’élasticité. L’élasticité consiste pour un service à adapter sa capacité à la demande de façon automatique et rapide. Un outil serverless est élastique dans la mesure où il augmente sa capacité computationnelle quand le trafic augmente et sans intervention humaine. Par ailleurs, le coût du serverless est plus facile à anticiper car il est en général strictement proportionnel à l’utilisation.
Les différents outils serverless
AWS lambda
Azure Functions
Google Cloud Functions
Scénario de déploiement
Outil serverless : Azure Function
Éditeur : VSCode
Système d’exploitation : Ubuntu
Langage : Python
Installer l’extension Azure ou bien l’extension Azure Function dans VSCode
Dans l’onglet Azure, créer un “espace de travail” (workspace) en local (cliquer sur Add puis sélectionner Create Function, sélectionner nom de la fonction, etc.)
Cette action crée l’ensemble des fichiers nécessaires au fonctionnement d’une Fonction Azure (“boilerplate code”) incluant:
Des fichiers de configuration json,
Un git, un .gitignore et un .funcignore
Un environnement virtuel nommé .venv
Un dossier portant le nom de la fonction et contenant notamment un fichier __init__.py avec une mini application de démo (c’est dans __init__ que l’on met le code de l’application)
Tester d’abord le fonctionnement de l’application de démo en utilisant le debugger (raccourci F5)
L’application est lancée et il est possible de la voir dans localhost
Modifier ensuite le fichier __init__.py en enlevant l’application de démo et en y ajoutant le code de l’application, en l’occurrence le web scraping et l’analyse de sentiment (ajouter les autres fichiers nécessaires comme le vectorizer et le modèle)
Créer un requirements.txt
Ajouter les dépendances à l’environnement virtuel .venv, puis mettez à jour le requirements.txt. Avec Linux, utilisez la commande: pip freeze > requirements.txt (conseil de pro : assurez-vous de n’avoir installé que les dépendances dont l’application a besoin et pas plus)
Lancer l’application avec le debugger (raccourci F5)
Copier coller l’URL de l’application dans Postman et tester l’API
Dans la section Azure de VSCode, sélectionner Azure Function et créer une nouvelle fonction
Sur l’espace de travail (workspace), cliquer sur “déployer” et sélectionner la nouvelle Azure Function
Le déploiement peut prendre quelques minutes
Copier l’URL de la fonction et tester l’application dans un navigateur. Voilà ! Votre application est déployée.
En résumé, l’approche serverless permet de déployer une application web sans avoir à gérer les serveurs sur lesquels roule l’application. La gestion des serveurs est confiée au fournisseur de services infonuagiques. Les solutions serverless se caractérisent par leur simplicité d’utilisation et leur élasticité : la capacité à adapter ses ressources computationnelles en fonction du trafic entrant.
Cet article conclut la série d’articles sur le déploiement.