2025-01-13 14:49:22 +00:00
|
|
|
\newpage
|
|
|
|
|
|
|
|
# Spécifications techniques
|
|
|
|
|
2025-02-18 15:05:11 +00:00
|
|
|
Après avoir décrit, via un cahier des charges, les différents besoins du
|
2025-02-19 16:53:38 +00:00
|
|
|
projet, les livrables attendus, il est temps de décrire une solution. Nous
|
|
|
|
aborderons avant tout l'étude de l'existant puis enchaînerons sur le détail de
|
|
|
|
l'infrastructure choisie pour terminer sur divers sujets intégrés et quelques
|
|
|
|
outils utilisés.
|
2025-01-20 10:28:29 +00:00
|
|
|
|
|
|
|
## Étude de l'application
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Le dépôt Git contenant l'application **existait déjà**. Une étude des
|
2025-02-25 15:17:03 +00:00
|
|
|
composants fournis a donc été nécessaire, ce qui a permis d'en mesurer les
|
|
|
|
implications.
|
2025-01-27 14:41:26 +00:00
|
|
|
|
2025-01-20 10:28:29 +00:00
|
|
|
### Composants de l'application
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
L'équipe de développement a fait le choix du **monorepo** pour contenir
|
|
|
|
l'ensemble des éléments de l'application. L'application est composée de :
|
2025-01-27 14:41:26 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
* une **base de données** PostgreSQL,
|
|
|
|
* un **backend** écrit en Python et construit sur **FastAPI**,
|
|
|
|
* un **frontend** écrit en TypeScript et construit avec **ReactJS**.
|
|
|
|
|
|
|
|
\newpage
|
2025-01-27 14:41:26 +00:00
|
|
|
|
|
|
|
L'ensemble se comprend mieux à l'aide du schéma suivant :
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
{height=55%}
|
2025-01-27 14:41:26 +00:00
|
|
|
|
|
|
|
### Outils fournis aux développeurs
|
|
|
|
|
|
|
|
Via le dépôt, les développeurs ont accès à :
|
|
|
|
|
|
|
|
* une documentation principale via un fichier **README.md**,
|
|
|
|
* une documentation secondaire via :
|
|
|
|
* un fichier **backend/README.md** pour les développeurs du Backend,
|
|
|
|
* un fichier **frontend/README.md** pour les développeurs du Frontend,
|
|
|
|
* plusieurs fichiers **Docker Compose** afin de déployer localement :
|
2025-02-19 16:53:38 +00:00
|
|
|
* une **base de données (BDD) PostgreSQL** avec un **jeu de données
|
|
|
|
préchargé**,
|
|
|
|
* un accès à la BDD via une interface Web, via l'outil nommé **adminer**,
|
|
|
|
* le **backend** (FastAPI),
|
|
|
|
* le **frontend** (ReactJS),
|
|
|
|
* une documentation **deployment.md** pour déployer le projet à l'aide de
|
|
|
|
**Docker Compose**,
|
|
|
|
* et un fichier **docker-compose.traefik.yml** afin de déployer une instance
|
|
|
|
locale du **proxy Traefik** configuré pour utiliser Docker.
|
|
|
|
|
|
|
|
Ces éléments sont un **bon point de départ pour l'équipe de DevOps** qui
|
|
|
|
prendra connaissance des particularités de cette application.
|
2025-01-27 14:41:26 +00:00
|
|
|
|
2025-02-26 12:43:24 +00:00
|
|
|
### Points d'attention
|
2025-01-27 14:41:26 +00:00
|
|
|
|
2025-02-25 15:17:03 +00:00
|
|
|
La **partie Frontend** permet de générer des fichiers dits
|
|
|
|
« statiques », du **serverless** est envisageable. L'application,
|
|
|
|
bien que faisant des appels à une API, fonctionne de manière **autonome**. Ce
|
|
|
|
qui, a priori, facilite la préparation pour un déploiement. Cependant les
|
|
|
|
développeurs de l'application utilisent **un nom de domaine inscrit en dur
|
|
|
|
dans le fichier Dockerfile**, ce qui peut compliquer un déploiement sur
|
2025-02-26 12:43:24 +00:00
|
|
|
plusieurs domaines et environnements. En effet, une fois l'image Docker
|
|
|
|
compilée, il sera impossible de changer le nom de domaine. Déployer une telle
|
|
|
|
image limite donc l'usage à un seul domaine. Si on souhaite déployer sur
|
|
|
|
plusieurs domaines (pour un environnement de pré-production et un
|
|
|
|
environnement de production par exemple), il faudra faire une image Docker par domaine !
|
2025-01-20 10:28:29 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
La **partie backend** s'appuie sur une base de données de type PostgreSQL. Elle
|
|
|
|
est donc **dépendante de la BDD**.
|
2025-01-27 14:41:26 +00:00
|
|
|
|
2025-02-26 12:43:24 +00:00
|
|
|
La **partie proxy** utilise actuellement **Traefik comme outil**.
|
2025-01-27 14:41:26 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Ces trois parties ont une influence sur le choix de l'infrastructure à mettre
|
2025-02-25 16:36:12 +00:00
|
|
|
en place. Il reste cependant une **marge de manœuvre sur la partie proxy**. En
|
|
|
|
effet il n'est pas obligatoire d'utiliser Træfik en production.
|
2025-01-20 10:28:29 +00:00
|
|
|
|
2025-01-29 09:31:33 +00:00
|
|
|
## Infrastructure
|
2025-01-20 10:28:29 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Afin d'accueillir l'application dans le Cloud, l'infrastructure de base va
|
|
|
|
poser les fondations de l'environnement complet nécessaire à un usage
|
|
|
|
quotidien.
|
2025-01-27 14:41:26 +00:00
|
|
|
|
2025-01-20 10:28:29 +00:00
|
|
|
### Couche basse
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
La couche basse pourrait se définir comme le minimum nécessaire avant
|
|
|
|
d'installer quoique ce soit pour exploiter l'application. En ce sens, on
|
|
|
|
utilise des éléments de base d'Amazon Web Services (AWS) pour fabriquer notre
|
|
|
|
infrastructure :
|
2025-01-27 14:41:26 +00:00
|
|
|
|
|
|
|
* un espace privé, Virtual Private Cloud (**VPC**),
|
|
|
|
* sur plusieurs **régions**,
|
|
|
|
* avec plusieurs zones de disponibilités (**Availability Zone**),
|
2025-02-19 16:53:38 +00:00
|
|
|
* contenant chacune, d'un point de vue réseau informatique, des réseaux
|
|
|
|
publics (**public subnet**) et des réseaux privés (**private subnet**),
|
|
|
|
* en utilisant une passerelle entre le VPC et Internet, appelée **Internet
|
|
|
|
Gateway** (IGW),
|
|
|
|
* en utilisant des passerelles **NAT** (Network Access Translation) entre les
|
|
|
|
réseaux privés et les réseaux publics pour un accès à l'IGW,
|
|
|
|
* avec des groupes de sécurité (**Security groups**) pour définir les règles
|
|
|
|
d'entrée/sortie,
|
|
|
|
* et des équilibreurs de charge de type réseau (**Network Load Balancer**)
|
|
|
|
afin de gérer les accès aux services de manière équilibrée.
|
|
|
|
|
|
|
|
\newpage
|
2025-01-27 14:41:26 +00:00
|
|
|
|
|
|
|
Le schéma de la couche basse de l'infrastructure ressemble donc à :
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
{width=100%}
|
2025-01-27 14:41:26 +00:00
|
|
|
|
2025-01-20 10:28:29 +00:00
|
|
|
### Environnement Kubernetes
|
|
|
|
|
2025-02-25 16:36:12 +00:00
|
|
|
C'est sur la couche basse qu'il est possible d'ajouter un environnement
|
|
|
|
permettant d'intégrer, déployer, automatiser et gérer des applications
|
|
|
|
conteneurisées. Pour cela nous choisissons **Kubernetes**.
|
|
|
|
|
|
|
|
Kubernetes est un système capable de faire tourner des **applications
|
2025-02-19 16:53:38 +00:00
|
|
|
conteneurisées**, d'**automatiser le déploiement** et de gérer la mise à
|
|
|
|
l'échelle (**auto-scaling**).
|
|
|
|
|
|
|
|
Sur l'infrastructure présentée dans le paragraphe précédent il va falloir
|
|
|
|
ajouter quelques éléments comme :
|
|
|
|
|
|
|
|
* un cluster Kubernetes appelé EKS (**Elastic Kubernetes Service**) géré par
|
|
|
|
Amazon,
|
|
|
|
* avec l'usage d'une mise à l'échelle (**autoscaling**) des **serveurs
|
|
|
|
virtuels EC2**(Elastic Container) d'Amazon,
|
|
|
|
* un équilibreur de charge de type réseau entre l'extérieur du cluster et le
|
|
|
|
cluster (**AWS Elastic LoadBalancer** ou ELB) ; présent d'ailleurs dans le
|
|
|
|
schéma de la couche basse de l'infrastructure dans le paragraphe précédent,
|
|
|
|
* un équilibreur de charge de type réseau (couche 4 du modèle OSI - Open
|
|
|
|
Systems Interconnection) qui fait le lien entre les services et l'extérieur du
|
|
|
|
cluster : **NGINX Ingress Controller** ; il va notamment échanger avec
|
|
|
|
l'AWS Elastic LoadBalancer précédent,
|
|
|
|
* l'utilisation d'un agent **externaldns** qui va mettre à jour les routes DNS
|
|
|
|
(Domain Name System) de **Route53** pour les sous-domaines utilisés (~16€/mois
|
|
|
|
pour 3 routes),
|
|
|
|
* et avec l'usage de **cert-manager** pour faire la demande de certificats SSL
|
|
|
|
(Secure Sockets Layer) via le service - gratuit - de **Let's Encrypt** pour
|
|
|
|
nos sous-domaines.
|
|
|
|
|
|
|
|
Le contenu du cluster EKS, une fois implémenté, pourrait ressembler à
|
|
|
|
ceci :
|
|
|
|
|
|
|
|
{width=100%}
|
|
|
|
|
|
|
|
**Pourra tourner dans le cluster**, en plus des agents précédemment cités,
|
|
|
|
**les applications suivantes** :
|
|
|
|
|
|
|
|
* le serveur de BDD **postgreSQL**,
|
|
|
|
* le **backend** de l'application (FastAPI),
|
|
|
|
* et le **frontend** de l'application (en fichiers statiques).
|
|
|
|
|
2025-02-25 16:36:12 +00:00
|
|
|
Afin de permettre une **livraison régulière** de l'application, il va falloir
|
|
|
|
**automatiser au maximum** les étapes entre la publication d'une nouvelle
|
|
|
|
version de l'application et son déploiement en production en passant par la
|
|
|
|
livraison en environnement de pré-production par une intervention humaine.
|
2025-01-27 14:41:26 +00:00
|
|
|
|
2025-01-29 09:31:33 +00:00
|
|
|
### Environnements
|
|
|
|
|
|
|
|
Nous parlons de production depuis un moment. À quoi cela correspond ?
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Afin de mener à bien le travail de DevOps, nous avons défini les différents
|
|
|
|
environnements par lesquels nous allons passer pour toute notre chaîne de
|
|
|
|
production logicielle. Ainsi **nous avons 4 environnements** :
|
|
|
|
|
|
|
|
* l'environnement de **développement** : c'est l'environnement disponible
|
|
|
|
sur **chaque machine des développeurs** à l'aide des outils fournis
|
|
|
|
(Dockerfile, docker-compose du projet applicatif),
|
|
|
|
* l'environnement de **test** : il est composé de l'**ensemble des Runner
|
|
|
|
Gitlab** utilisés à l'intérieur de la chaîne d'intégration continue,
|
2025-02-25 15:17:03 +00:00
|
|
|
* l'environnement de **pré-production** (appelé « **staging** »
|
|
|
|
) : c'est l'infrastructure présentée ci-avant, appliquée dans AWS avec
|
|
|
|
une configuration dite *plus légère* (moins de machines virtuelles EC2 par
|
|
|
|
exemple),
|
2025-02-19 16:53:38 +00:00
|
|
|
* et l'environnement de **production** : c'est l'**infrastructure
|
|
|
|
finale** ; celle qui est disponible aux utilisateurs finaux (les usagers).
|
2025-01-29 09:31:33 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
\newpage
|
2025-01-29 09:31:33 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Le schéma des différents environnements est plus compréhensible :
|
2025-01-29 09:31:33 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
{height=50%}
|
|
|
|
|
|
|
|
[commentaire1]: # Cf. https://mermaid.live/view#pako:eNptkkFugzAQRa9izRoiAiUkLLrKtlKldtXShYUHYtXY1Nhp05AD5Ry5WAcCUSuVFR6_-X4e-QilEQg5VMp8ljtuHXveFprRJ3D_WvG84mGLtjM6FLKupa7Z9nLeozJtiw1q93alP_gE18gte8Zu3ugcH7qmXSU7F5Y7LN_Zo72cw9Ya4UsnjZ7woTCxpTJeEPaLuJmxMLxnvcCGa4FUYJXvCOnJY_a5Io5MOsa9Mw138sNj189Kf_yu9J4rKfhwGKNkj0phPyrNR8-xl_NwCTam94PQP2FSj3GX8wRAAA3ahktB8z4ODQW4HQ2xgJx-BVbcK1dAoU-EDspPB11C7qzHAKzx9Q5oLqqjlW9JE7eS15Y3M9Jy_WJMc4NoDfkRviCPo2SxSdZplEXrKMrWyziAA5Wz5SJJ0ihebrJ4la7i9BTA9xgRLVZJnCXZJrlL19S6CgCFdMY-XN_L-GxOP_j4v68
|
2025-01-29 09:31:33 +00:00
|
|
|
|
2025-01-27 14:41:26 +00:00
|
|
|
### Livraison continue et déploiement
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Il est visé une **CI/cd**, c'est à dire une **Intégration Continue**
|
|
|
|
(Continuous Integration) et une **livraison continue** (continuous delivery).
|
|
|
|
**L'automatisation est donc essentielle**.
|
2025-01-27 14:41:26 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
**Le déploiement en production passera par une validation manuelle**.
|
2025-01-27 14:41:26 +00:00
|
|
|
|
|
|
|
Doivent être automatisés :
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
* les **tests du backend et du frontend**,
|
|
|
|
* l'étude de **sécurité sur les dépendances des composants** de l'application,
|
|
|
|
* la **génération** d'une **image Docker** pour le **frontend** et le
|
|
|
|
**backend**,
|
|
|
|
* la **publication** de cette image sur un **dépôt d'images**,
|
|
|
|
* le **déploiement d'un environnement de pré-production** (appelé *staging*,
|
|
|
|
dont nous parlerons dans le chapitre [Démarche suivie](#demarche)),
|
|
|
|
* le **déploiement**, une fois la validation manuelle sur l'environnement de
|
|
|
|
pré-production faite, **d'un environnement de production**,
|
|
|
|
* et la **mise en place initiale** de l'infrastructure (appelée **boostrap**).
|
2025-01-27 14:41:26 +00:00
|
|
|
|
|
|
|
Nous retrouverons ces éléments dans les chapitres suivants.
|
2025-01-20 10:28:29 +00:00
|
|
|
|
|
|
|
## Services et outils divers
|
|
|
|
|
2025-01-27 14:41:26 +00:00
|
|
|
Plusieurs sujets tournent autour des services mis en place :
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
* les **données** : définit les éléments enregistrés à l'usage quotidien
|
|
|
|
de l'application,
|
|
|
|
* la **supervision** : définit tous les éléments permettant de mesurer
|
|
|
|
les différents services et d'alerter si les métriques dépassent des seuils
|
|
|
|
définis,
|
|
|
|
* la **sécurité** : définit tout ce qui peut être mis en œuvre pour
|
|
|
|
palier rapidement à des problèmes de sécurité de l'application, de
|
|
|
|
l'infrastructure et des outils utilisés.
|
2025-01-20 10:28:29 +00:00
|
|
|
|
|
|
|
### Données
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Le sujet des données ne couvre pas uniquement les données brutes enregistrées
|
|
|
|
par l'application, mais aussi la manière de les stocker, de les sauver via un
|
|
|
|
plan de sauvegarde et de les restaurer si besoin.
|
2025-01-27 14:41:26 +00:00
|
|
|
|
|
|
|
#### Où sont les données ?
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Les données de ce projet sont multiples. En voici une liste
|
|
|
|
non-exhaustive :
|
2025-01-27 14:41:26 +00:00
|
|
|
|
|
|
|
* les dépôts contenant le **code applicatif** (backend + frontend),
|
|
|
|
* les dépôts contenant la **description de l'infrastructure**,
|
2025-02-19 16:53:38 +00:00
|
|
|
* les données brutes de l'application, stockées dans la **base de données
|
|
|
|
postgreSQL**,
|
2025-01-27 14:41:26 +00:00
|
|
|
* les **données sensibles** (mots de passe, clés d'accès),
|
2025-02-25 15:17:03 +00:00
|
|
|
* les **copies de sauvegardes** des données elles-mêmes,
|
2025-01-27 14:41:26 +00:00
|
|
|
* et les **fichiers de journalisation** des services en production.
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Regardons pour chacun des points de cette liste où se situe le stockage.
|
2025-01-27 14:41:26 +00:00
|
|
|
|
2025-02-18 15:05:11 +00:00
|
|
|
#### Stockage
|
2025-01-27 14:41:26 +00:00
|
|
|
|
2025-02-25 15:17:03 +00:00
|
|
|
Les éléments précédents donnent lieu au tableau suivant :
|
2025-01-27 14:41:26 +00:00
|
|
|
|
2025-02-25 15:17:03 +00:00
|
|
|
: Données présentes et leur lieu de stockage
|
|
|
|
|
|
|
|
Données | Stockage
|
|
|
|
-----|-----
|
|
|
|
Code applicatif | **dépôt Gitlab**
|
|
|
|
Code de l'infrastructure | **dépôt Gitlab**
|
|
|
|
Base de données postgreSQL | **stockage AWS EBS** (Elastic Block Store)
|
|
|
|
Sauvegardes | **stockage AWS S3** (Simple Storage Service)
|
2025-01-20 10:28:29 +00:00
|
|
|
|
2025-02-18 15:05:11 +00:00
|
|
|
Cela devrait être suffisant pour stocker les diverses données disponibles.
|
2025-01-27 14:41:26 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
\newpage
|
|
|
|
|
2025-02-18 15:05:11 +00:00
|
|
|
#### Base de données postgreSQL
|
2025-01-20 10:28:29 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Pour le choix d'un service de base de données, nous avons fini par opter pour
|
|
|
|
**postgresql-ha** (pour postgreSQL High Availability) qui s'appuie sur **2
|
|
|
|
bases de données répliquées** avec un service **pgpool** par lequel on accède
|
|
|
|
pour chaque requête faite à la base de données.
|
2025-02-18 15:05:11 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
{height=50%}
|
2025-01-20 10:28:29 +00:00
|
|
|
|
|
|
|
#### Sauvegardes
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Les dépôts de version utilisés étant sur Gitlab, [service qui se targue d'être
|
|
|
|
entre 99% et 100% disponible](
|
|
|
|
https://handbook.gitlab.com/handbook/engineering/monitoring/#historical-service-availability)
|
2025-02-25 15:17:03 +00:00
|
|
|
, une **sauvegarde dite « préventive » mensuelle** suffit.
|
2025-02-19 16:53:38 +00:00
|
|
|
|
|
|
|
En revanche **la production**, même en **étant un service en haute
|
|
|
|
disponibilité**, doit fournir au moins **une sauvegarde 1 fois par jour**.
|
|
|
|
L'outil de sauvegarde choisi est **Velero**. Compatible avec l'environnement
|
2025-02-25 16:36:12 +00:00
|
|
|
Kubernetes et permettant aussi de **sauver l'état du cluster** à un instant
|
|
|
|
*T*. Son outil en ligne de commande permet de gérer les sauvegardes mais aussi
|
|
|
|
les restaurations de ces dernières.
|
2025-02-18 15:05:11 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Comme énoncé précédemment, les sauvegardes du cluster seront mises **sur un
|
2025-02-25 15:17:03 +00:00
|
|
|
stockage AWS S3** (dit « bucket S3 »).
|
2025-02-18 15:05:11 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
\newpage
|
2025-02-18 15:05:11 +00:00
|
|
|
|
|
|
|
Le fonctionnement de Velero dans ce projet est visible sur le schéma suivant.
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
[commentaire2]: # Cf. https://mermaid.live/view#pako:eNptVE1v00AQ_SvWSr0lkWOTOPEBKU2CFLWUgkuRkKVqY08dK7Y37EegRLlxqiqBygFuvSH4B1zopT-I_gTWazteK1g-2G9m35t5s7sbFJAQkIsMxjGHSYwjitP22vKzgwNjMn02O5mdzV6ceH5myEcwoIZrvOZxEjOZL2iBryEBSi6CJJbRx7ub63MFGOPjWZGwHLALvMqjR2IONAMOzBidllFYMhmZHpUqzFYsX38cimAJ3PDshsqKhE0VCRQJIY3XqsDHu9v76aHXHnuz9kSBdRlrkhQZf85JIlJgZQ1zpuBvn_7-_izXFih-z0qt0RvPqPQSEcVZuYwHeTXTs_GkrGGuFnz5fkoYjyh4L4-LgHL01fR4pPmpddRuP60av7lmWKwhwjSEnSN5fM8ACnJsgoI2HS1PjmNvPHm4HkbOEZA0FVn8TkBzVE3B_VjeueaBRvzf3monQ0hxFoIhX5bhFVsQXvijjbBiK4YVPfysesxplPq8oqs46jHurMQ0WEi6_dpDbU9oihXp7T1kFKKY8UpWTrVREuMkWD788stdoA6P2sabAtAEa6B2rOlPjel1afu1BmT7Wva8-N76GWqhFGiK41CeZVWDj_gCUvCRKz9DuMQi4T7ys61MxYIT7yoLkMupgBaiREQL5F7ihMk_sQrrq6BKWeHsLSHpLkn-I3eDPiDXMu3O0B70TMccmKYz6FotdCVhp9ux7Z5pdYeO1e_1rd62hT4qCrPTty3Hdob2k95ALu23EIQxJ_R5cRepK2n7D1LIfM8
|
2025-02-18 15:05:11 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
{height=70%}
|
|
|
|
|
|
|
|
\newpage
|
2025-02-18 15:05:11 +00:00
|
|
|
|
2025-01-20 10:28:29 +00:00
|
|
|
### Supervision
|
|
|
|
|
2025-02-25 16:36:12 +00:00
|
|
|
Le choix de l'outil de supervision se porte sur **Datadog** pour sa
|
|
|
|
**souplesse** et sa capacité à proposer des **services supplémentaires de
|
|
|
|
manière progressive**.
|
2025-02-18 15:05:11 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Le fonctionnement semble simple : installation d'agents Datadog dans le
|
|
|
|
système Kubernetes pour receuillir de nombreuses informations. Comme peut le
|
|
|
|
montrer le schéma suivant.
|
2025-02-18 15:05:11 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
[commentaire3]: # Cf. https://mermaid.live/view#pako:eNp1VEtu2zAQvQrBImgLKIYs-RctCji2ChhxHMNKUaDQhhZHjiCZNCiqbRL4DgV6gB6g-266C9D79Agl9ZeTaiPyzZsZzvcRB5wCdnAqiYR5RHaC7M8_Wz7z2dkZmrvvF6vF7eJm5fkMqY8SSSjfIQf9_fHtF5oX10IGcarw6Z48cIbcq1Ij4EwKnijJ6s_3jKKnn2hWQuuEMEBPvwviFy5iEG3exwLRhNJ7QLSHHTBZuUY0Q0GSpRJEyWEvcpg2WjDibAsJSMW6Kk5VaOndlhNBlWBenQvRnrNIcv22a32CTLxJ35YiEunYZjwTIoKkANOEBLFCPf03EMig1ySDRAxEP9dhEpgyhuhrcjgkUQ_1T2jWyzSroJFDpENdL5AH4rNOgCrZ7GZ5s6lyn5A0nUOINkBRGCWJ8yoMaUgHRqoKEIMjgJ4wL5MMSioZBCFsK-pWCU6464jFtVkYQFhxD0rQ4uZ123Rc5WW67JrM41nnqnkkG3c5bbVeVbbz83e5dlPuHAlI0yMlpQso603aNBB3ql-ptTu6Nt4Gq2bQgrL606W7uXW95_KqEUoCetYFnZe2yl7jxRhOVx5aumi2_ODdupuyyfTE5kP3WAANWM1cS1AG3gXqpOnveGqlHMgTI52s1YYY6QJNiP_ByxY-dn6F32rHtBzT7jy20lzrYwPvQaiCULXNclUfyzvYg48ddaQQkiyRPvbZUVFJJrl3zwLsSJGBgQXPdnfYCUmSqlt2oM02rCgHwj5xvq9J6o6dR_wVO5Zp9y7sydAcmxPTHE_6loHvFTzu92x7aFr9i7E1Go6s4dHAD7kJszeyrbE9vrAHw4lSHRkYqA7nutjG-VI-_gOoBrf7
|
2025-01-20 10:28:29 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
{height=70%}
|
2025-01-20 10:28:29 +00:00
|
|
|
|
2025-02-25 16:36:12 +00:00
|
|
|
Une fois installé, l'agent Datadog recueille et envoie les informations sur
|
|
|
|
les serveurs officiels de l'entreprise Datadog qui en gère le stockage et
|
|
|
|
l'accès.
|
|
|
|
|
2025-02-18 15:05:11 +00:00
|
|
|
#### Surveillance (monitoring)
|
2025-01-20 10:28:29 +00:00
|
|
|
|
2025-02-25 16:36:12 +00:00
|
|
|
L'utilisation de Datadog donne accès à de nombreux moniteurs pré-configurés.
|
|
|
|
|
|
|
|
On veillera à utiliser des **indicateurs simples** comme l'**utilisation CPU**
|
|
|
|
et la **mémoire vive** des instances AWS EC2 (Elastic Compute Cloud) utilisées.
|
2025-01-20 10:28:29 +00:00
|
|
|
|
2025-02-18 15:05:11 +00:00
|
|
|
Il y a également :
|
2025-01-27 14:41:26 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
* le **nombre de pods utilisés** par l'instance EC2,
|
2025-02-25 16:36:12 +00:00
|
|
|
* et la **disponibilité du service** de l'application *API Utilisateurs*.
|
2025-01-20 10:28:29 +00:00
|
|
|
|
2025-02-25 16:36:12 +00:00
|
|
|
Cependant ces moniteurs sont insuffisants. On pourrait ajouter :
|
|
|
|
|
|
|
|
* le temps de réponse de l'API,
|
|
|
|
* le nombre de requêtes par seconde sur l'API,
|
|
|
|
* même chose pour le nombre de requêtes sur la base de données,
|
|
|
|
* le nombre d'erreurs 500 retournées par le frontend et le backend,
|
|
|
|
* etc.
|
2025-01-20 10:28:29 +00:00
|
|
|
|
|
|
|
#### Alertes
|
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
On va utiliser **un canal Slack** (*#alertes*) **pour avertir les DevOps**
|
|
|
|
d'une quelconque **alerte levée**. Datadog permet cela facilement comme énoncé
|
|
|
|
dans l'introduction de ce chapitre sur la Supervision.
|
2025-01-20 10:28:29 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
Suite aux alertes, les **DevOps peuvent opérer et notifier** de la prise en
|
|
|
|
charge d'un problème **via le chatbot Gitlab intégré** à ce canal Slack. Nous
|
|
|
|
utilisons donc le [**Gitlab ChatOps**](https://docs.gitlab.com/ci/chatops/).
|
2025-01-21 08:16:14 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
En suivant toutes ces indications, nous devrions avoir une base stable et
|
|
|
|
saine pour constuire une supervision correcte de l'application
|
2025-02-25 16:36:12 +00:00
|
|
|
*API Utilisateurs*.
|
2025-01-21 08:16:14 +00:00
|
|
|
|
2025-01-20 10:28:29 +00:00
|
|
|
### Sécurité
|
|
|
|
|
2025-02-25 16:36:12 +00:00
|
|
|
Au niveau de la sécurité, **vaste sujet**, nous partirons de ces
|
|
|
|
éléments :
|
2025-01-20 10:28:29 +00:00
|
|
|
|
2025-02-19 16:53:38 +00:00
|
|
|
* lancement de **tests** sur le **code applicatif**,
|
2025-02-25 16:36:12 +00:00
|
|
|
* lancement de **tests SAST** (Static application security testing), sur
|
|
|
|
Terraform notamment,
|
|
|
|
* et utilisation d'un **coffre fort numérique** pour les mots de passes et
|
|
|
|
clés d'accès en tous genres.
|
2025-01-20 10:28:29 +00:00
|
|
|
|
2025-02-18 15:05:11 +00:00
|
|
|
Le coffre-fort choisi est **Vaultwarden**.
|
2025-01-20 10:28:29 +00:00
|
|
|
|
2025-02-25 16:36:12 +00:00
|
|
|
Il y a beaucoup à faire pour **améliorer la sécurité**. Ceci est un
|
|
|
|
**processus continu** à faire tout au long du **suivi et la maintenance du
|
|
|
|
projet**.
|
2025-01-20 10:28:29 +00:00
|
|
|
|
|
|
|
## Conclusion
|
2025-02-18 15:05:11 +00:00
|
|
|
|
2025-02-25 16:36:12 +00:00
|
|
|
Les spécifications techniques décrivent bien l'application, composée de 3
|
|
|
|
éléments (backend, frontend et base de données) qui s'intégreront bien dans
|
|
|
|
l'environnement Kubernetes installé sur l'infrastructure posée dans le cloud
|
|
|
|
AWS.
|
|
|
|
|
|
|
|
On retient ainsi un déploiement automatique dans le Cloud d'une infrastructure
|
|
|
|
prête à accueillir à la fois l'application et d'autres services tierces comme
|
|
|
|
la supervision avec Datadog et les sauvegardes à l'aide de Velero.
|
|
|
|
|
|
|
|
La sécurité aura cette spécificité de devoir être régulièrement vérifiée,
|
|
|
|
maintenue et améliorée au fil du temps. C'est donc un processus continu dont
|
|
|
|
la réussite dépend beaucoup de la discipline et la régularité.
|