Aller au contenu
English
Compte : non connecté, synchronisation possible Mon apprentissage
Selectionner le thème
English

Projet final : déployer une application complète dans le cloud

  • 25 min

Par mis à jour le

Améliorer cette page

Ce projet assemble les modules précédents en une infrastructure que vous construisez de bout en bout, puis que vous vérifiez commande par commande. Il n'est lié à aucun fournisseur : le même plan se réalise sur Scaleway, AWS, OUTSCALE ou un autre, et la plus grande partie se rejoue en local, sans compte cloud ni carte bancaire. Il s'adresse à qui a parcouru les blocs réseau, compute, données et sécurité et veut savoir ce qu'il en a réellement retenu. La piste Engineer réalise les lots de construction et d'exploitation. La piste Architecte y ajoute trois lots : les garde-fous et la sortie de données, deux mises en pratique locales sans compte, et la revue écrite, lue par un humain. Seul le volet sur compte réel se jouera chez Outscale ou chez Scaleway, aux mêmes critères chez l'un ou l'autre ; il est indisponible aujourd'hui (voir les lots).

Le fil rouge est une boutique en ligne : une application web à trois étages, joignable depuis Internet, dont les données ne le sont pas. Les clients consultent un catalogue, passent des commandes, et les visuels des produits sont rangés dans un seau de stockage objet privé, lu par les machines applicatives et jamais public.

ÉtageContenuJoignable depuis
Exposéun répartiteur de charge, terminaison TLSInternet, ports 80 et 443
Applicatifdeux machines identiques servant l'applicationle répartiteur uniquement
Donnéesla base des commandes, managée ou auto-gérée, sauvegardée ; le seau privé des visuels produitsl'étage applicatif uniquement

Quatre exigences transverses complètent l'ensemble, et ce sont elles qui distinguent un exercice d'école d'une infrastructure défendable : tout est décrit par du code, rien ne sort d'un secret en clair, la restauration a été essayée, et l'environnement se détruit entièrement à la fin, sans laisser de ressource facturée derrière lui.

Où réaliser le projet, et que prouve chaque environnement ?

Section intitulée « Où réaliser le projet, et que prouve chaque environnement ? »

Trois environnements sont possibles, et chacun prouve des choses différentes : un test réussi ne vaut que par ce qu'il mesure. Cette distinction est le cœur de la méthode enseignée ici. L'émulateur Feint vérifie l'existence et les liens des ressources déclarées. Un hôte Linux capable de virtualiser (KVM ou Incus, avec dsoxlab installé) fait tourner de vraies machines et de vrais services, lancés par dsoxlab : le code Terraform, lui, se joue sur Feint. Un compte réel est le seul à valider ce qu'un fournisseur fait vraiment, au prix d'une dépense réelle.

Feint, sans compteMachines lancées par dsoxlab, sans compteCompte réel
Plan d'adressage, ressources et dépendances déclarésouiouioui
Cycle Terraform complet, second plan vide, environnement recrééouinon, Terraform se joue sur Feintoui
Sortie Internet par la passerelle NAT, refus réel depuis Internetnon (aucun paquet n'est routé)non prouvéeoui
Trafic réel qui traverse le répartiteur, sonde qui retire une instance casséenonoui (répartiteur pas encore fourni par le catalogue de labs, à monter à la main, voir plus bas)oui
Stockage objetnon émulébanc local, sous Docker ou Podman, monté à la main tant que le lot Stockage n'est pas publié dans le catalogueoui
Base auto-gérée, sauvegarde et restaurationnonouioui
Permissions réellement refuséesnon, jamais vérifiéesnonoui
Facture et budgetnonnonoui

Faites-les dans cet ordre : Feint, hôte local, compte réel. L'émulateur vous permet de rater le plan d'adressage cinq fois sans conséquence, ce qui est exactement le moment où l'on apprend. L'hôte local valide ensuite ce que seul un service qui tourne peut valider. Le compte réel vérifie en dernier ce qui exige un fournisseur, sur un périmètre réduit, et il n'impose aucun fournisseur : les critères restent les mêmes chez Outscale ou chez Scaleway. Son volet Outscale est indisponible pour l'instant et aucun autre volet sur compte réel n'est encore publié : la colonne de droite dit donc ce qu'un compte réel prouvera à son ouverture, aucun plafond de dépense n'est annoncé aujourd'hui, et il le sera, daté et relevé chez le fournisseur, avec le volet. Tant qu'il manque, les preuves « compte réel » ne se jouent pas, et votre revue dit qu'elles manquent.

L'hôte local a un prérequis matériel que Feint n'a pas. Il faut une machine Linux qui virtualise, avec KVM ou Incus, et dsoxlab installé. Pour le banc de stockage objet, il faut aussi Docker ou Podman, et rclone v1.75.2 pour la copie du lot Sortie. Pour le lot Garde-fous, il faut Conftest. Sans la machine qui virtualise, vous restez sur Feint et sur les quiz : la preuve du projet est alors partielle, et c'est à vous de le dire dans votre revue. Pour voir tourner de vraies machines derrière l'émulateur lui-même, la page faire tourner de vraies machines et s'y connecter en SSH est un complément facultatif.

Commencez par écrire ce tableau avant de créer quoi que ce soit. La plage du réseau ne se modifie plus après création chez la plupart des fournisseurs, et c'est la seule décision de ce projet qui soit vraiment irréversible.

RôleZone AZone BRoute par défaut
Exposé10.50.1.0/2410.50.2.0/24passerelle Internet
Applicatif10.50.11.0/2410.50.12.0/24passerelle NAT
Données10.50.21.0/2410.50.22.0/24aucune

Réseau : 10.50.0.0/16. Les dizaines séparent les rôles, ce qui rend une adresse lisible d'un coup d'œil : 10.50.22.7 est une base en zone B.

La dernière colonne porte l'essentiel de la sécurité de ce projet. L'étage de données n'a aucune route vers l'extérieur, donc une donnée volée ne part pas facilement, et cela ne coûte rien : il suffit de ne pas ajouter la route.

Le projet se découpe en lots, vérifiés chacun par l'état du système et non par vos commandes. Les quatre premiers, dits de construction et d'exploitation, sont ouverts à la piste Engineer et se jouent en local, à la main tant que leurs lots ne sont pas publiés dans le catalogue de labs. Les suivants relèvent de la piste Architecte. Le tableau dit où chaque lot se joue et ce qui est réellement prouvé : un choix de modèle ou une décision écrite se lit par un humain, seul l'état d'un système se prouve.

LotPisteOùCe que vous livrezCe qui est prouvé
DimensionnementEngineer, Architectedsoxlab (KVM ou Incus)un gabarit de machine justifié par un relevé de charge pris dans le lotle gabarit ; le choix du modèle est évalué
StockageEngineer, Architectedsoxlab (outil fio) et banc objet localune mesure de débit et de latence interprétée, une famille de stockage choisie, dont celle du seau de visuels de la boutiquela mesure interprétée ; le choix est évalué
DonnéesEngineer, Architectedsoxlab (KVM ou Incus)la base des commandes, auto-gérée, qui n'écoute que sur son IP privée, sauvegardée puis restaurée sur une base neuve, comptages comparésle raccordement privé et la restauration
Reconstruire et détruireEngineer, ArchitecteFeintun second plan vide, l'environnement recréé, un inventaire vide après destructiontout le geste
Garde-fousArchitectelocalune politique Conftest que vous écrivez vous-même, variante de la règle de la leçon : elle refuse tout plan dont une ressource n'a pas les étiquettes environnement, equipe et projet, impose pour environnement une valeur permise (par exemple dev, recette ou prod) et vérifie aussi les actions update ; une étiquette Scaleway sans = ("environnement") doit être refusée, et non ignorée en silence (méthode dans la section Conftest de la leçon garde-fous), branchée et respectéele garde-fou d'étiquetage ; comptes et budget sont évalués
SortieArchitectelocal, deux stockages objetune copie du seau de visuels vers un second stockage, empreintes sha256sum identiquesla sortie de données ; la grille de réversibilité est évaluée
Revue écriteArchitectedocumentla revue de la section « La revue d'architecture »rien par machine : un humain la lit
Volet sur compte réelArchitectecompte réel, chez Outscale ou Scalewayindisponible : pas encore de ressources à créer, de plafond de dépense ni de contrôle de destructionrien aujourd'hui : le volet Outscale ouvrira quand la vérification d'état des ressources Outscale existera

Ces lots s'appuient sur les gestes des modules précédents : la sauvegarde et la restauration PostgreSQL pour le lot Données, la sortie de données pour le lot Sortie, le garde-fou d'étiquetage pour le lot Garde-fous. L'énoncé exécutable de chaque lot et sa vérification automatique par dsoxlab sont portés par le catalogue de labs Cloud (cloud-dsoxlab-training). Ce catalogue est publié depuis le 12 octobre 2026, mais seulement avec quatre labs de sa première vague : aucun lot du projet final n'y figure encore, et rien n'en est câblé sur cette page. Les éléments qui en dépendent (le répartiteur devant deux instances, les machines et les bancs des lots Dimensionnement, Stockage et Données) sont indisponibles aujourd'hui. Cette page fixe donc l'architecture, les critères et la méthode, et vous les appliquez à la main en attendant.

Comment assembler l'architecture, étape par étape ?

Section intitulée « Comment assembler l'architecture, étape par étape ? »

Huit étapes, dans cet ordre, construisent l'application à trois étages. Les lots du tableau vérifient chacun un morceau de l'ensemble ; ces étapes sont le fil rouge qui décrit l'ensemble, et les lots y sont rappelés entre parenthèses. Un lot se joue seul en local ; l'assemblage complet, avec la sortie Internet et les permissions réellement refusées, ne se prouve que sur un compte réel, dont le volet Outscale est aujourd'hui indisponible. Chaque étape s'appuie sur la précédente : le filtrage n'a pas de sens sans le découpage réseau, et l'alerte n'a rien à observer avant que le service ne réponde. Livrez-les une par une, en vérifiant l'étape avant de passer à la suivante, plutôt que de tout construire puis de tout déboguer ensemble.

  1. Le réseau

    Réseau privé en /16, six sous-réseaux, deux tables de routage, une passerelle Internet, une passerelle NAT. Rien d'autre.

    Révision : tables de routage et passerelles.

  2. Le filtrage

    Trois groupes de sécurité, un par étage. Chacun n'autorise que l'étage précédent, en référençant le groupe plutôt qu'une plage d'adresses. L'accès d'administration ne vient jamais de 0.0.0.0/0.

    Révision : sécurité réseau.

  3. Les machines

    Deux instances applicatives, dans deux zones différentes, préparées par cloud-init et sans aucun secret dans leurs données de configuration. Prenez la taille en dessous de votre intuition, puis justifiez-la par un relevé de charge (lot Dimensionnement).

    Révision : choisir et dimensionner une machine.

  4. Le répartiteur et le nom

    Répartiteur de niveau 7, terminaison TLS, sonde de santé sur une adresse applicative et non sur le port. Un nom de domaine pointe vers lui, avec un TTL court le temps du projet.

    Révision : répartition de charge et TLS et DNS managé.

  5. Les données : la base et le seau de visuels

    Base des commandes dans l'étage de données, chiffrée, qui n'écoute que sur son adresse privée, avec sauvegardes activées et une fenêtre de restauration que vous aurez vérifiée. Managée chez un fournisseur qui la propose, auto-gérée sur une machine de l'hôte local (lot Données). Les visuels des produits vont dans un seau de stockage objet privé, sans accès public, lu par l'identité des machines applicatives (lot Stockage).

    Révision : joindre une base sans passer par Internet, réplication, sauvegarde et bascule et sauvegarde et restauration à distance.

  6. Les identités et les secrets

    Une identité de charge de travail au droit minimal. Chez les hyperscalers, c'est une identité attachée à la machine ; chez Scaleway et Outscale, aucune identité attachée n'est documentée (absence documentaire, à confirmer auprès du fournisseur), donc le secret se récupère par un identifiant à durée courte, jamais par une clé longue écrite sur le disque. Le mot de passe de la base vit dans un gestionnaire de secrets, jamais dans le code ni dans cloud-init.

    Révision : gérer les identités et les accès.

  7. La gouvernance

    Toutes les ressources étiquetées environnement, equipe et projet, avec un contrôle par politique as code sur le plan d'infrastructure plutôt que par un refus natif (lot Garde-fous). Un budget mensuel avec alerte à 50 %, 80 % et 100 % ; chez Outscale, où aucune alerte de budget n'est documentée, un script planifié qui lit la consommation en tient lieu.

    Révision : gouvernance et coûts.

  8. L'observabilité

    Les journaux du répartiteur et des machines envoyés au service de journalisation, avec une rétention explicite et non celle par défaut. Une seule alerte, mais une vraie : le taux d'erreurs HTTP 5xx au-delà d'un seuil, routée vers une adresse que vous relevez.

    Révision : exploiter un environnement cloud.

Chaque ligne se vérifie par une commande ou une manipulation, pas par une impression. C'est la partie qui compte : une infrastructure qui « a l'air de marcher » n'a rien prouvé. La dernière colonne dit où le contrôle est possible, pour que vous ne cherchiez pas à vérifier sur Feint ce qu'il n'émule pas.

Ce qui doit être vraiComment le vérifierOù
Le site répond en HTTPScurl -I https://votre-nom renvoie 200 et un certificat validecompte réel
Le second plan est videterraform plan après apply n'annonce aucun changementFeint, compte réel
Les machines applicatives ne sont pas joignablesune connexion directe vers leur adresse échoue par expirationcompte réel
La base n'est pas joignable depuis Internetidem, depuis une machine extérieure ; en local, elle n'écoute que sur son adresse privéelocal, compte réel
Les machines sortent bien vers Internetune mise à jour de paquets réussit depuis une machine applicativecompte réel
Une machine arrêtée ne casse pas le serviceéteignez-en une, le site répond toujourslocal, compte réel
La sonde retire un serveur défaillantarrêtez le service applicatif sur une machine, elle sort de la rotationlocal, compte réel
Aucun secret n'est en clairrelisez cloud-init et le dépôt : aucun mot de passelocal
La restauration fonctionnerestaurez la base dans une instance de test, chronomètre en mainlocal, compte réel
Le budget alertedescendez temporairement le seuil, vérifiez que l'alerte arrivecompte réel
Tout est étiquetéen local, conftest test plan.json rend le code 0 sur votre plan, et un code non nul sur quatre plans à refuser : sans étiquette, avec environnement=demo, avec une étiquette environnement sans valeur, et avec une ressource existante dont on retire une étiquette (action update) ; avec un compte réel, listez les ressources sans étiquette : la liste doit être videlocal, compte réel
Le seau des visuels est privéune requête anonyme vers un objet est refusée, la lecture n'est permise qu'à l'identité des machines applicativescompte réel
L'administration n'est ouverte à personneaucun groupe de sécurité n'autorise le port 22 ou 3389 depuis 0.0.0.0/0Feint, compte réel
Le filtrage référence des groupesrelisez les règles : aucune plage d'adresses privées codée en dur entre étagesFeint, compte réel
Le certificat est correctopenssl s_client -connect votre-nom:443 -servername votre-nom renvoie une chaîne complète et validecompte réel
Les journaux arriventprovoquez une erreur 500, retrouvez-la dans le service de journalisationcompte réel
L'alerte part vraimentabaissez le seuil d'erreurs, provoquez-en, vérifiez la réceptioncompte réel
La rétention est choisieaucun flux de journaux ne conserve « indéfiniment » par défautcompte réel

Une fois l'ensemble debout, rendez une revue écrite sur six axes, notée comme dans le gabarit de la leçon Well-Architected Frameworks. L'exercice prend une heure et vaut plus que la construction elle-même, car il transforme un montage en décisions assumées. Les cinq premiers axes sont les piliers communs à AWS, Azure et Google Cloud ; le sixième ajoute la souveraineté. Le pilier de durabilité n'est pas évalué ici.

AxeLa question à se poser
SécuritéQue peut atteindre un attaquant qui compromet une machine applicative ?
FiabilitéQu'est-ce qui tombe si une zone entière disparaît ?
PerformanceQuelle ressource sature en premier, et l'ai-je mesurée ?
CoûtQuelle serait la facture mensuelle, et quel poste domine ?
Excellence opérationnellePuis-je tout recréer depuis zéro avec le code, sans mémoire humaine ?
SouverainetéSous quelle juridiction sont mes données, et à quel coût puis-je partir ?

Répondez par écrit, avec une note de 0 à 3 et une preuve par axe, pour la boutique et non pour une architecture en général. Une note de 3 exige une mesure ou un test daté, par exemple le chronomètre de la restauration ou le résultat de l'arrêt d'une machine ; sans preuve, la note vaut 0. Trois lignes par axe suffisent, et une réponse embarrassée signale toujours un vrai trou. La question sur le coût mérite un chiffre, même approximatif : une architecture dont personne ne sait estimer la facture est une architecture que personne n'arbitrera.

Terminez par les trois risques les plus graves, chacun avec une décision. Corriger, accepter ou reporter : chaque décision est consignée dans un ADR (fiche courte qui garde la décision et sa raison), reprise dans un plan d'action avec un propriétaire et une échéance. Un risque accepté porte le nom de la personne qui en assume la conséquence. Dites aussi ce que votre environnement n'a pas pu prouver (stockage objet sous Feint, permissions sans compte réel) : une revue qui avoue ses limites vaut plus qu'une revue qui les cache. Cette revue n'est vérifiée par aucune machine, un humain la lit.

Le meilleur usage de ce capstone est de le rejouer sur un second fournisseur. Le plan d'adressage ne change pas, les groupes de sécurité non plus, et vous mesurez alors ce qui est réellement transférable.

Ce qui se transpose tel quel : le découpage, les plages, la logique des trois étages, la sonde de santé, le principe de l'étiquetage. La règle Rego d'étiquetage, elle, s'adapte : elle lit des étiquettes en liste, et AWS les exprime en dictionnaire.

Ce qui demande une traduction : les noms des services, la façon de rendre un sous-réseau public, et surtout le modèle de permissions, qui diffère réellement d'un cloud à l'autre comme l'explique la page IAM.

Ce qui change vraiment la facture : le trafic sortant et la passerelle NAT, dont le traitement varie du tout au tout selon le fournisseur.

Détruire l'environnement, et vérifier qu'il ne reste rien

Section intitulée « Détruire l'environnement, et vérifier qu'il ne reste rien »

Le dernier lot du projet est sa destruction, et c'est un exercice à part entière. Une commande de destruction qui se termine sans erreur ne prouve pas que le compte est vide : elle prouve que l'outil a supprimé ce qu'il connaissait. Tout ce qui a été créé à côté, ou recréé automatiquement par un service, lui échappe.

  1. Sauvegardez d'abord ce que vous voulez garder. Il s'agit du code d'infrastructure, vos réponses écrites à la revue d'architecture, et une capture de la facture du mois. Le reste est jetable, c'est le principe.

  2. Lancez la destruction depuis votre outil, puis relisez son compte rendu ligne à ligne. Une ressource « conservée » y apparaît explicitement, et c'est souvent le seul endroit où vous la verrez.

    Fenêtre de terminal
    terraform destroy
  3. Chassez les restes, qui se logent toujours aux mêmes endroits. Le tableau ci-dessous liste ceux qui survivent le plus souvent, et qui continuent à être facturés en silence.

  4. Relevez la consommation 48 heures après la destruction, puis attendez la facture mensuelle. Le relevé, daté du jour où vous le prenez, montre ce que votre inventaire a oublié, mais le fournisseur ne documente pas toujours sa fréquence de mise à jour : un poste peut y arriver en retard. Seule la facture mensuelle fait foi, et c'est elle qui confirme que le compte est vide.

Ce qui survit à la destructionPourquoiCe que ça coûte
Les instantanés de disques et de basessouvent créés hors du code, ou générés à la suppression de la basefacturés au gigaoctet, sans limite de durée
Les disques détachésla suppression d'une machine ne supprime pas toujours son volumeplein tarif du stockage bloc
Les adresses IP publiques réservéesune adresse réservée reste facturée même sans usagerepère AWS au 12 octobre 2026 : 0,005 USD par heure (environ 3,60 USD par mois), attachée ou non (aws.amazon.com/vpc/pricing)
Les seaux de stockage objet non videsun seau avec du versionnage refuse d'être supprimé tant que les anciennes versions existentstockage plus requêtes
Les groupes de journauxleur rétention par défaut est parfois illimitéestockage qui ne décroît jamais
Les clés de chiffrementleur suppression est différée d'un délai de sécurité, et la facturation dépend du fournisseur : AWS ne facture pas une clé en attente de suppression, mais la facture à nouveau si la suppression est annuléerepère AWS au 12 octobre 2026 : 1 USD par clé et par mois pour une clé active (aws.amazon.com/kms/pricing)
Les secretsmême logique de suppression différée, mais AWS ne facture pas un secret marqué pour suppression (documentation AWS Secrets Manager)facturés au secret et par mois tant qu'ils ne sont pas marqués pour suppression
Les enregistrements DNS et la zonerarement gérés par le même code que l'infrastructurecoût de la zone hébergée

Prenez l'habitude de détruire, y compris quand vous comptez recommencer demain. Une infrastructure décrite en code se reconstruit en quelques minutes, et cette reconstruction est justement le contrôle qui prouve que votre code est complet. Un environnement qu'on n'ose plus détruire est un environnement dont personne n'est certain qu'il se recrée : c'est exactement la situation que ce projet cherche à vous faire éviter.

  • Chaque environnement prouve autre chose : Feint vérifie l'existence et les liens, les machines lancées par dsoxlab un service qui tourne, le compte réel ce que seul un fournisseur fait.
  • Les quatre lots de construction et d'exploitation se jouent en local, à la main tant que leurs lots ne sont pas publiés dans le catalogue de labs, sans compte ni carte bancaire ; garde-fous et sortie, deux lots locaux, puis la revue écrite relèvent de la piste Architecte ; seul le volet sur compte réel se jouera chez Outscale ou Scaleway, et il est indisponible pour l'instant.
  • La destruction fait partie du projet. Une commande de destruction sans erreur ne prouve pas que le compte est vide : un relevé daté à 48 heures repère les restes, la facture mensuelle fait foi.
  • Instantanés, disques détachés, adresses réservées et groupes de journaux sont les restes les plus fréquents, et ils se facturent en silence.
  • Écrivez le plan d'adressage avant de créer quoi que ce soit : c'est la seule décision irréversible du projet.
  • L'étage de données n'a aucune route sortante. Gratuit, et c'est la mesure qui gêne le plus un attaquant.
  • Référencez les groupes de sécurité entre eux plutôt que des plages : la règle décrit un rôle et survit aux changements d'adressage.
  • Aucun secret dans cloud-init, qui est lisible depuis la machine et depuis la console.
  • Un second plan vide est le vrai test de votre code d'infrastructure.
  • Éteignez une machine pour de bon, et chronométrez la restauration : ce sont les seuls tests qui prouvent la redondance et votre RTO réel.
  • La revue se rend par écrit : une note de 0 à 3 et une preuve par axe, trois risques classés, une décision signée par risque.
  • Rejouez le projet sur un second fournisseur pour mesurer ce qui est vraiment transférable.

Ce projet vous est utile ?

Les guides, formations, quiz et labs restent gratuits. Si vous les utilisez régulièrement, vous pouvez contribuer à leur maintenance et à leur développement.

Devenir membre de soutien (nouvel onglet) Soutenir une fois (nouvel onglet) En savoir plus

Suivez aussi le projet sur LinkedIn