Cloud
Optimiser le déploiement de son
application web grâce au Cloud
Présentation du
cours
Qui suis-je ?
EPITA 2015 - ACDC / YAKA / ACU
Développeur freelance full-stack
CTO @ Flappy → https://flappy.tech
Prof en 2e, 3e, 4e et 5e année à l'ESGI
Filières : AL / MOC / IABD / IW
Matières : Flutter / Cloud / Linux / Serveurs Web
Mail : kiff
[email protected]Déroulement du cours
attention aux retards
soyez attentifs
mise à disposition du support de cours
notation
CC1 → QCM / questions ouvertes
examen → TP noté
je prends vos feedbacks !
Prérequis
Concepts requis pour suivre le cours correctement :
développement web basique
hébergement linux
Concepts non requis mais qui peuvent bien aider :
git
Jusqu'où irons-nous ?
Plusieurs parties du cours :
introduction au Cloud : 2-3h
plateformes Cloud : 12h
architecture serverless : 3h
Le but étant d'arriver à la fin avec une vraie connaissance du
Cloud et des plateformes à disposition pour optimiser le
déploiement de son application web
Introduction au
Cloud
Cloud ?
Mise à disposition de ressources numériques, surtout en
terme de stockage et de puissance de calcul, accessible
partout, facilement et rapidement via Internet
C'est finalement le terme utilisé pour décrire les centres de
données accessibles au plus grand nombre via Internet
Points clefs
Rapidité et facilité de mise en place
Accessibilité
Disponibilité continue
Sécurisation des données
Évolution des ressources au besoin
Chronologie
1956 : J. McCarthy, définition de l'intelligence artificielle
1960 : J.C.R. Licklider, "Man-Computer Symbiosis"
1962 : J.C.R. Licklider, premières idées d'un réseau mondial
1966 : Début d'ARPANET (1969-1990)
1980 : Séparation du réseau militaire et universitaire
1980s : Nécessité d'étaler des tâches sur un réseau
1991 : T. Berners-Lee, inventeur de HTTP
1997 : R. Chellappa, naissance du mot "Cloud"
1999 : Salesforce.com, introduction du concept SaaS
2002 > 2006 : Lancement d'AWS
Centre de données
Serveurs
Centre de données ou Datacenter
Répartition mondiale
Datacenters - Google Cloud
Répartition mondiale
Datacenters - AWS
Différents types de Cloud
Différents types de Cloud
Différents types de Cloud
IaaS
Infrastructure as a Service
Mise à disposition d'une partie d'une infrastructure
technique
Ressources brutes
Problèmes matériels gérés par le prestataire
Assez bas niveau
La structure complète reste à faire
PaaS
Platform as a Service
Sorte de surcouche des IaaS
Déploiement et gestion de son application
Service semi-automatisé pour la gestion des ressources
Possibilité de configurer et de mettre à l'échelle
rapidement
Relation de confiance avec la plateforme
SaaS
Software as a Service
Mise à disposition de ressources logicielles
Accessible partout depuis son navigateur
Souvent via abonnement
Pas de version spécifique
Mises à jour incluses
IaaS & PaaS
IaaS & PaaS
34% Répartition mondiale
Parts de marchés
21%
10%
5% 4%
AWS Azure Google Alibaba IBM
Statista - Q2 2022
SaaS
SaaS
Répartition mondiale
Parts de marchés
9,3%
8,7%
4,7%
4% 3,8%
Salesforce Microsoft SAP Oracle Google
BetterCloud - 2020
En résumé
Beaucoup d'offres différentes
Évaluation des coûts
Service choisi
Durée d'utilisation
Capacité requise
Région du centre de données
Plateformes
Amazon Web Services
Lancement officiel en mars 2006
Division d'Amazon
IaaS / PaaS
+ de 175 produits et services
Présent dans le monde entier
Première plateforme Cloud
Microsoft Azure
Lancement officiel en février 2010
Division de Microsoft
IaaS / PaaS
+ de 600 produits et services
Présent dans le monde entier
Deuxième plateforme Cloud
Google Cloud
Lancement officiel en 2011
Beta depuis 2008
IaaS / PaaS
Grosses infrastructures de Google
Réponse à AWS et Azure
Peine à rattraper ses concurrents
Heroku
Lancement officiel en 2007
Racheté par Salesforce en 2010
Build, Run & Scale
Ruby puis Java, Node.js, PHP, ...
Basé sur AWS
Système d'addons
Offre gratuite maintenant payante
Firebase
Lancement officiel en 2011
Rachat par Google en 2014
Outils pour développer sur le
web et le mobile
Stockage, base de données, ...
Analytics, gestion d'erreur,
notifications, ...
Gratuit ou payant à l'usage
Render
Lancement officiel en 2019
Vainqueur du TechCrunch Disrupt
Battlefield la même année
Outils et technologies Cloud
modernes PaaS
Concurrent direct de Heroku
Bonne offre gratuite
Heroku
Heroku
Heroku est une PaaS permettant de déployer facilement son
application web dans le Cloud, tout en ayant la possibilité de
la mettre à l'échelle via des dynos
Le fonctionnement est simple, il suffit de créer une
application sur la plateforme et d'utiliser Git pour déployer
son code s'il correspond à un archétype de projet géré
Dynos
Les dynos sont des conteneurs virtuels légers sur Linux et
permettant de faire tourner une application. C'est ce système,
qui dans un cas normal, est facturé au prorata d'utilisation
Il existe différent types de dynos, plus ou moins cher, en
fonction de la capacité / puissance choisie
Pour une application, il est possible de paralléliser plusieurs
dynos afin de la mettre à l'échelle de façon semi-
automatique
Offre gratuite
L'offre gratuite n'est plus celle qu'elle était il y a 2-3 ans. Suite
à de nombreux abus, la seule offre disponible est celle pour
les étudiants via Github Education
https://education.github.com/pack
Il suffit de s'authentifier avec l'adresse mail de son école et
d'attendre l'acceptation du programme
Ensuite, il faut s'authentifier sur son compte Heroku et
postuler pour le programme en liant son compte GitHub
https://www.heroku.com/github-students
Offre gratuite
Cette offre permet de débloquer des crédits pour la
plateforme renouvelés tous les mois
Attention, dans tous les cas, il est nécessaire d'avoir une
carte de crédit (qui ne sera pas débitée) pour vérifier son
compte
En cas de problème, il existe une offre Eco qui permet de
reproduire l'usage de l'offre gratuite pour 5€ / mois
Créer son application
Une fois connecté, on arrive sur le dashboard où l'on peut
créer une nouvelle application
Créer son application
Il faut ensuite sélectionner la région appropriée : Europe
Créer son application
Il n'est pas nécessaire de trouver un nom d'application, il
sera généré automatiquement s'il est vide
Attention, vous devez ajouter une carte de crédit dans tous
les cas, même si vous ne payez pas au prorata d'utilisation
Heroku CLI
Il existe également une interface en ligne de commande qui
permet de gérer son application et notamment de facilement
la lier avec son dépôt Git pour effectuer des déploiements
https://devcenter.heroku.com/articles/heroku-cli
Une fois l'installation terminée, on peut utiliser
1 heroku login
2 heroku create --region eu
3 heroku git:remote -a <app-name>
Déploiement
Dans notre projet, il faut impérativement avoir un dépôt Git
1 git init
Une fois que c'est fait, il suffit d'ajouter puis de commit ses
fichiers pour enfin push tout ça sur la remote Heroku que
l'on aura ajouté au préalable
1 git add .
2 git commit -m "Initial commit"
3 git push heroku master
Buildpacks
Avec Heroku, les déploiements sont un peu magiques !
C'est dû aux buildpacks qui permettent de préconfigurer les
dynos avec un environnement adapté pour votre projet
Si le projet correspond à un archétype supporté
officiellement, la détection sera automatique, sinon il faut
ajouter le buildpack nécessaire
1 heroku buildpacks:add <buildpack>
Buildpacks
Il existe beaucoup de buildpacks différents, dont la plupart
sont fait par la communauté
https://elements.heroku.com/buildpacks
En général, quand on utilise autre chose qu'un buildpack
officiellement supporté, on a besoin de configurer son
application d'une manière spécifique, souvent décrite dans la
documentation du buildpack utilisé
Addons
Heroku permet également d'ajouter des services tiers
(souvent payant) à son application et de centraliser la
facturation globale
Ces services proviennent en majorité de fournisseurs
différents mais qui ont un partenariat avec Heroku
https://elements.heroku.com/addons
1 heroku addons:attach <addon>
Render
Render
Render est également une PaaS permettant de déployer
facilement son application web dans le Cloud
Elle propose plusieurs types de service en fonction de ce
que l'on doit mettre en place. Cela permet aussi bien de
prototyper un projet que de mettre en place des services en
production
Render
Tous les projets ne sont pas de base déployables sur la
plateforme, il faut respecter certains langages / frameworks
Il existe plusieurs formules, donnant accès à plus ou moins de
fonctionnalités
https://render.com/pricing
Les services sont dans tous les cas payants au prorata
d'utilisation
Offre gratuite
L'offre gratuite de Render est très complète, elle permet de
déployer facilement certains types de services sans coût et
sans rentrer sa carte bleue
Les services ont tous plus ou moins des limitations mais
sont largement exploitables
https://render.com/docs/free
Par exemple, les services web gratuits se mettent en pause
en cas d'inactivité
Application ?
Contrairement à Heroku, ici on ne crée pas une application
qui va contenir des services mais directement des
services qui vont potentiellement composer une ou plusieurs
applications
Il existe également la possibilité de gérer son Infrastructure
as Code pour rassembler et faire évoluer les services de son
application
Créer son service
Une fois connecté, on arrive sur le dashboard où l'on peut
créer un nouveau service
Web Services
Le service qui s'apparente le plus au déploiement d'une
application web est le Web Service
Au moment de la création on nous propose d'utiliser un
dépôt Git ou une image depuis un registre
Il est possible avec Git d'utiliser un dépôt publique ou un
dépôt privé
https://render.com/docs/web-services
Web Services
Le projet à déployer doit correspondre à des langages /
technologies spécifiques
https://render.com/docs/language-support
Pour des projets privés sur GitHub, il faut lier son compte
Web Services
Une fois le dépôt sélectionné, il faut spécifier certaines
informations comme le nom du service, sa région, son
runtime, les commandes permettant de le construire et de le
démarrer, ...
Il y a une détection automatique de l'archétype du projet
pour préremplir certains champs
La dernière étape consiste à sélectionner le type d'instance
Exemple de configuration pour un projet node.js
Web Services
Quand la configuration est terminée, il suffit de créer le
service pour être redirigé sur la console de logs
PostgreSQL
On peut également créer une base de données PostgreSQL
pour héberger son modèle de données relationnel
C'est encore une fois très simple, il suffit de spécifier un nom
et une région pour le service et de potentiellement ajouter le
nom de la base ainsi que l'utilisateur désiré
Une base de donnée gratuite sera tout le temps disponible
mais ne durera que 90 jours
https://render.com/docs/databases
Static sites
Enfin une autre possibilité est de déployer un site statique,
qui va être distribué via un CDN
Ce site peut être complètement statique ou nécessiter un
build au préalable dans le cas d'un framework front
https://render.com/docs/static-sites
Il est possible de spécifier le dossier racine ainsi que celui
contenant les assets à publier
Static sites
On peut également spécifier des redirections ou des
réécritures d'URL pour personnaliser le comportement de
son site statique une fois déployé
https://render.com/docs/redirects-rewrites
Render CLI
Il est possible d'installer l'interface en ligne de commande
pour automatiser le déploiement de vos services
https://render.com/docs/cli
Cependant, elle est actuellement encore en alpha, elle n'est
donc pas aussi complète que peut l'être celle d'Heroku
Blueprints
Dans le cas d'un projet plus conséquent, plutôt que de définir
des services un par un, Render met à disposition un système
de blueprints pour gérer son Infrastructure as Code (IaC)
Cela permet donc de centraliser la définition de tous ses
services et de pouvoir ajuster à la volée leur configuration
De plus, l'utilisation de Git permet de versionner l'évolution
de son infrastructure
Blueprints
Pour gérer les différentes ressources, il suffit de définir un
fichier render.yaml à la racine de son projet
1 services:
2 # A Docker web service
3 - type: web
4 name: webdis
5 runtime: docker
6 repo: https://github.com/render-examples/webdis.git # optional
7 region: oregon # optional (defaults to oregon)
8 plan: standard # optional (defaults to starter instance type)
9 branch: master # optional (defaults to master)
10 rootDir: webdis
11 dockerCommand: ./webdis.sh # optional (defaults to Dockerfile command)
12 numInstances: 3 # optional (defaults to 1)
13 healthCheckPath: /
Blueprints
Il est possible de définir plusieurs services et bases de
données et de lier chaque ressource les unes avec les autres
Les différents types de services disponibles, ainsi que la
spécification complète du fichier render.yaml sont référencés
dans cette page de la documentation
https://render.com/docs/blueprint-spec
Blueprints
Supprimer une ressource du fichier ne supprime pas la
ressource sur Render, cela évite donc les suppressions
accidentelles. Pour ajouter une nouvelle ressource, il suffit
de la rajouter dans le fichier render.yaml
Il est possible de supprimer le blueprint du côté de Render
pour stopper la synchronisation tout en gardant les
instances créées
Amazon Web
Services
AWS
AWS est une plateforme complète IaaS / PaaS comprenant
beaucoup de services allant de la création de machines
virtuelles au transcodage média, en passant par la mise en
place de base de données, de composants réseaux, etc.
Son interface, certes un peu complexe, permet d'interagir et
de visualiser tous les services à disposition
La segmentation principale se fait par région des centres de
données
AWS
Parmi les différents services à disposition, on retrouve
EC2 : machines virtuelles plus ou moins puissante
S3 : compartiments de stockage d'objets dynamiques
RDS : bases de données relationnelles multi-SGBD
IAM : gestion des accès à la plateforme et aux services
Elastic Beanstalk : orchestrateur pour le déploiement
d'application ou de tâche de travail
SNS : push de notifications via différents canaux
Lambda : calcul serverless avec mise à l'échelle
Offre gratuite
AWS permet de tester ses services avec une offre gratuite
disponible de différentes façon suivant les services
Certaines offres sont gratuites en permanence en restant en
dessous d'un plafond d'utilisation défini, d'autres sont
limitées dans le temps
https://aws.amazon.com/fr/free
La création d'un nouveau compte permet également de
débloquer une offre gratuite pour certains services pendant
12 mois
Offre gratuite
Attention cependant : il est impératif lors de la création de
compte de renseigner sa carte bleue pour deux raisons :
la vérification de l'identité de l'utilisateur (anti-bot)
la mise en place d'une caution sur le dépassement des
limites des différents services
Ce qu'il faut comprendre, c'est qu'il n'est pas garanti de ne
jamais être débité sur AWS !
Création de compte
Pour créer un compte, il suffit de se rendre à cette adresse
https://portal.aws.amazon.com/billing/signup
Gérer son budget
Comme précisé précédemment, une carte bleue est
obligatoire lors de la création du compte
Afin d'être prévenu des potentielles facturations il est
possible de mettre en place des alertes
à l'approche du dépassement de l'offre gratuite
lorsque l'on dépasse certains seuils d'utilisation
La première se configure dans les préférences de
facturation et les autres au sein du service AWS Budget
AWS Budget
AWS Budget permet de gérer des budgets à paliers pour
configurer des notifications ou même des actions plus
complexes après dépassement
Ce service est gratuit si l'on s'en tient aux notifications et à
maximum 2 actions par mois
Pour créer un budget, on peut se baser sur des modèles
prédéfinis comme le gratuit ou alors personnaliser
complètement les paliers
Création d'un nouveau budget sur AWS
Régions
Avant toute chose, il faut bien faire attention à se
positionner dans une région qui nous convient pour la suite
des opérations
Cela cloisonne la plupart des services que l'on va utiliser
AWS EC2
EC2 permet la création d'instances virtuelles de différents
types suivant la puissance requise ou encore le type de
calcul à effectuer
Pour créer une instance on va d'abord chercher le service sur
le dashboard ou grâce à la barre de recherche
Ensuite on arrive sur le dashboard EC2 cette option
Créer son instance virutelle
Il est facile de repérer les types de machines ainsi que les
images éligibles à l'offre gratuite
On peut également configurer les groupes de sécurité, les
volumes de stockage attachés et la paire de clefs utilisée
pour la communication avec l'instance
Optimiser son instance
EC2 est un service très complet lié à beaucoup de services
tiers permettant de configurer notamment un équilibreur
de charge ou même un groupe d'autoscaling pour gérer de
façon semi-automatique l'allocation de nouvelles instances
lors de la montée en charge
Sur le dashboard, on peut également avoir un aperçu global
des instances, des volumes, etc.
Attention, cet aperçu est cloisonné à la région sélectionnée !
Elastic Beanstalk
Pour faciliter le déploiement d'applications web, AWS a mis
en place un orchestrateur pour ses services les plus utilisés
et dont EC2 fait partie : Elastic Beanstalk
Derrière ce nom compliqué se cache un service similaire à
Heroku ou encore Render pour déployer facilement son
code suivant les environnements à disposition
Aucun coût supplémentaire n'est généré à l'utilisation, seuls
les services utilisés par l'orchestrateur le sont
Elastic Beanstalk
Le gros avantage d'Elastic Beanstalk c'est d'également
permettre une mise à l'échelle facile de son application ainsi
qu'une surveillance constante
Création d'une nouvelle application sur Elastic Beanstalk
Elastic Beanstalk
Pour déployer son application, on peut soit téléverser des
archives ou alors se connecter à un dépôt Git via la CLI
spécifique du service Elastic Beanstalk
Dans les deux cas cela nous permet de versionner
l'application afin de pouvoir revenir en arrière sur une
version précédente en cas de problème
Il est également possible d'utiliser AWS CodeCommit