Voici un retour d'expérience concret sur les briques AWS que nous mettons réellement en production, les arbitrages qui les justifient, et — c'est là que se joue la valeur — la manière dont on les exploite au quotidien : automatisation de la remédiation, ChatOps, et diagnostic d'incident assisté par l'IA. On part des fondations (CDN, base de données, répartition de charge, coûts), puis on monte vers l'IA générative et l'AIOps tels que nous les pratiquons chez VOID.
Le principe directeur : le Well-Architected Framework
Avant de parler services, on parle piliers. AWS formalise six axes de qualité que nous utilisons comme grille de décision : excellence opérationnelle, sécurité, fiabilité, efficience des performances, optimisation des coûts et durabilité. Chaque choix d'architecture ci-dessous se justifie par un ou plusieurs de ces piliers — jamais par effet de mode.
CloudFront : rapprocher le contenu de l'utilisateur
CloudFront est le CDN (Content Delivery Network) d'AWS. Il met en cache vos contenus sur un réseau mondial de points de présence (edge locations) au plus près des internautes. Concrètement, un visiteur à Casablanca, Paris ou Dakar récupère vos images, fichiers JS/CSS et pages mises en cache depuis le serveur le plus proche, pas depuis votre origine à l'autre bout de la planète.
Ce que CloudFront apporte vraiment :
Latence réduite — le contenu statique est servi en quelques millisecondes depuis l'edge, et l'Origin Shield ajoute une couche de cache régionale qui augmente le taux de hits.
Origine déchargée et protégée — avec l'Origin Access Control (OAC), le bucket S3 ou l'ALB n'est accessible que via CloudFront — l'origine n'est jamais exposée directement.
TLS et HTTP/2-HTTP/3 — gérés nativement, avec certificats gratuits via AWS Certificate Manager.
Logique à l'edge — CloudFront Functions (manipulations légères d'en-têtes/URL, ultra-rapides) et Lambda@Edge (logique plus riche : auth, A/B testing, personnalisation).
Sécurité en bordure — intégration AWS WAF et protection anti-DDoS Shield au niveau du edge.
Économie sur le transfert sortant — le data transfer out via CloudFront est facturé moins cher que celui directement depuis EC2/S3.
Le piège classique : mal configurer le cache (TTL trop courts, headersCache-Control absents, clé de cache trop large incluant tous les cookies/query strings). Un CDN qui ne met rien en cache ne fait qu'ajouter un saut réseau. La valeur de CloudFront se joue dans la politique de cache et la clé de cache, pas dans le simple fait de l'activer.
Le revers du cache : invalider proprement
L'erreur miroir est tout aussi fréquente : mettre en cache ce qui ne devrait pas l'être. Une page personnalisée (panier, espace connecté), une réponse d'API ou un contenu fraîchement publié servi depuis l'edge, et l'utilisateur voit une version périmée — parfois celle d'un autre visiteur si la clé de cache ignore les cookies de session. La règle : ne cacher que ce qui est réellement public et stable, séparer les cache behaviors (statique long TTL vs. dynamique non caché), et varier la clé de cache sur les bons critères seulement.
Quand un contenu change, deux stratégies pour rafraîchir l'edge :
Versionner les assets (recommandé) — les fichiers statiques portent un hash dans leur nom (app.4f2a.js). Next.js le fait nativement pour le dossier /_next/static : une nouvelle build = un nouveau nom de fichier, donc aucune invalidation à lancer.
Invalidation ciblée — pour le HTML et les pages, on déclenche une invalidation CloudFront sur des chemins précis (/article/mon-titre) plutôt que sur /* — plus rapide, et les 1 000 premiers chemins par mois sont gratuits.
Côté Drupal, on évite l'invalidation manuelle : le module Purge couplé à un connecteur CloudFront émet automatiquement les invalidations quand un nœud est modifié, en s'appuyant sur les tags de cache de Drupal — l'éditeur publie, le CDN se met à jour seul. Côté Next.js, on s'appuie d'abord sur le versioning des assets, puis, pour les pages rendues, sur la revalidation (ISR / revalidatePath) ; une invalidation CloudFront ciblée n'intervient qu'en complément, déclenchée depuis le pipeline de déploiement.
Attention au SEO : en verrouillant l'edge (WAF, géo-restriction, rate limiting, filtrage de User-Agent), on finit parfois par bloquer Googlebot — et la page disparaît de l'index. Il faut autoriser explicitement les robots légitimes (Googlebot, Bingbot…), ne jamais leur servir un contenu différent de celui des visiteurs (cloaking), vérifier lerobots.txt servi via le CDN, et contrôler dans la Search Console qu'aucune URL ne renvoie un 403 au crawl.
Amazon RDS : la base de données sans la corvée d'exploitation
Gérer soi-même une base de données en production — sauvegardes, patchs de sécurité, réplication, bascule en cas de panne — est un métier à temps plein. Amazon RDS (Relational Database Service) prend tout cela en charge pour PostgreSQL, MySQL, MariaDB, SQL Server et Oracle.
Les capacités qui changent la donne :
Multi-AZ — une réplique synchrone dans une autre zone de disponibilité, avec bascule automatique en cas d'incident. La variante Multi-AZ cluster (deux répliques lisibles) réduit encore le temps de bascule.
Read replicas — des répliques en lecture pour absorber les pics de trafic en lecture et soulager l'instance principale.
RDS Proxy — un pool de connexions managé, indispensable quand des centaines de fonctions Lambda ou de conteneurs ouvrent des connexions — il évite l'épuisement des connexions de la base.
Sauvegardes automatisées — et restauration à un instant T (point-in-time recovery), avec déploiements Blue/Green pour les montées de version sans coupure.
Performance Insights — pour identifier les requêtes coûteuses, et chiffrement au repos (KMS) et en transit, avec isolation réseau via VPC.
Pour des charges très variables, Aurora Serverless v2 pousse la logique plus loin en ajustant la capacité à la demande. Le bon réflexe : ne pas administrer une base sur EC2 « pour économiser » — le coût caché en temps d'ingénierie et en risque dépasse vite la différence de prix.
Elastic Load Balancing : disponibilité et montée en charge
Un load balancer répartit le trafic entrant sur plusieurs instances, vérifie leur santé (health checks) et retire automatiquement celles qui ne répondent plus. C'est la pièce qui permet de survivre à la panne d'une instance — voire d'une zone entière — sans interruption de service.
| Type | Niveau | Quand l'utiliser |
|---|---|---|
| Application LB (ALB) | 7 (HTTP/S) | Web, microservices, routage par chemin/hôte, WebSocket |
| Network LB (NLB) | 4 (TCP/UDP) | Latence ultra-faible, débit massif, protocoles non-HTTP |
| Gateway LB (GWLB) | 3 (IP) | Appliances de sécurité (firewall, inspection de trafic) |
Comment le trafic est réparti : round robin & alternatives
Une fois la cible choisie, reste à décider comment répartir les requêtes entre les instances saines d'un target group. C'est l'algorithme de routage :
Round robin (par défaut sur l'ALB) — chaque cible reçoit les requêtes à tour de rôle, de façon équitable. Simple et efficace quand les requêtes ont un coût homogène et que les instances sont de taille identique.
Least outstanding requests (LOR) — l'ALB envoie la nouvelle requête à la cible qui a le moins de requêtes en cours. Bien plus adapté quand les traitements sont de durées très variables (une requête longue ne sature pas une instance pendant que les autres tournent à vide).
Flow hash (NLB) — le NLB hache la connexion (IP/port/protocole) pour router, et garde la même connexion sur la même cible — naturellement « collant » au niveau flux.
Weighted target groups — on pondère plusieurs groupes de cibles, ce qui permet des déploiements blue/green et canary (envoyer 5 % du trafic sur la nouvelle version).
Un mot sur les sticky sessions : l'ALB peut, via un cookie, renvoyer un même utilisateur toujours sur la même instance. C'est parfois nécessaire (état en mémoire), mais cela nuit à la répartition — mieux vaut rendre l'application stateless (session dans Redis/ElastiCache ou base) et laisser round robin / LOR équilibrer librement.
Couplé à un Auto Scaling Group, le load balancer permet d'ajouter ou retirer des instances selon la charge réelle. Deux raffinements font la différence en production : le predictive scaling (qui anticipe les montées en charge récurrentes à partir de l'historique) et les warm pools (instances pré-initialisées pour absorber un pic instantané sans subir le temps de démarrage). On paie la capacité quand on en a besoin, et on encaisse les pics sans sur-provisionner en permanence.
Savings Plans & FinOps : payer le cloud au juste prix
Le tarif On-Demand est flexible mais c'est le plus cher. Dès qu'une charge devient stable et prévisible, les Savings Plans permettent de s'engager sur un volume de consommation (exprimé en $/heure) pendant 1 ou 3 ans, en échange d'une remise pouvant atteindre ~72 %.
Compute Savings Plans — les plus flexibles. La remise s'applique à EC2, Fargate et Lambda, quels que soient le type d'instance, la taille, la région ou l'OS.
EC2 Instance Savings Plans — remise maximale, mais en échange d'un engagement sur une famille d'instances dans une région donnée.
Reserved Instances — le modèle historique, plus rigide ; les Savings Plans le remplacent avantageusement dans la plupart des cas.
Au-delà des engagements, le FinOps se joue aussi sur l'architecture elle-même :
Graviton (ARM) — les instances de la génération Graviton offrent un meilleur rapport prix/performance — souvent ~20 % d'économie — pour la plupart des charges web et bases managées.
Spot Instances — jusqu'à ~90 % de remise pour les charges tolérantes à l'interruption (batch, CI, traitement asynchrone, certains workers d'inférence).
S3 Intelligent-Tiering — et cycles de vie pour les données froides ; Compute Optimizer pour le right-sizing automatique.
Tagging & Cost Categories — sans gouvernance de tags, aucune analyse de coût par produit/équipe n'est possible.
Méthode FinOps : on couvre par Savings Plans la charge de base(le socle consommé en permanence) et on laisse le reste en On-Demand ou Spot pour absorber les pics. On vise typiquement 70 à 80 % de couverture, jamais 100 % — pour garder de la souplesse. AWS Cost Explorer fournit des recommandations chiffrées à partir de l'historique réel.
Le socle invisible : réseau, sécurité, observabilité
Les quatre briques précédentes ne tiennent que sur un socle solide — celui qu'on ne voit pas tant qu'il fonctionne :
VPC bien découpé — sous-réseaux publics/privés, NAT Gateway, security groups en principe de moindre privilège. L'application et la base ne sont jamais exposées directement à Internet.
IAM least privilege — des rôles précis plutôt que des clés en dur, Secrets Manager pour les identifiants, rotation automatique.
Défense en profondeur — WAF (filtrage applicatif), Shield (anti-DDoS), GuardDuty (détection de menaces), chiffrement KMS partout.
Observabilité — CloudWatch (métriques, logs, alarmes), X-Ray / OpenTelemetry pour le tracing distribué, et des SLO définis pour piloter par la qualité de service plutôt que par l'intuition.
6. IA générative & AWS : du POC à la production
L'IA générative est passée en deux ans du laboratoire à la roadmap produit. La vraie question n'est plus « faut-il en faire » mais « comment l'industrialiser sans sacrifier la sécurité des données ni la maîtrise des coûts ». AWS propose une pile complète — et, bonne nouvelle, elle réutilise exactement les fondations décrites plus haut.
Amazon Bedrock : l'IA managée, à l'usage
Amazon Bedrock donne accès, via une seule API, à des modèles de fondation de plusieurs éditeurs (Meta Llama, Mistral, Amazon Nova, Cohere, DeepSeek…) sans gérer la moindre GPU. On paie à l'usage (tokens), on change de modèle en une ligne, et les données ne servent pas à ré-entraîner les modèles. Quatre capacités sortent du lot pour des applications réelles :
Knowledge Bases (RAG managé) — on connecte ses documents (S3), Bedrock gère l'ingestion, le découpage, les embeddings et la recherche vectorielle — la base de tout assistant qui doit répondre sur vos données.
Agents — orchestration d'appels d'outils/API pour exécuter des actions, pas seulement répondre.
Guardrails — filtres de contenu, masquage de données sensibles (PII), garde-fous contre les sujets interdits — essentiel en environnement régulé.
Provisioned Throughput — débit réservé pour les charges critiques à fort volume, à coût prévisible.
SageMaker et le matériel : quand héberger ses propres modèles
Bedrock couvre la majorité des besoins. Mais dès qu'on veut fine-tuner un modèle sur un corpus propriétaire, servir un modèle open-source spécialisé ou traiter des volumes massifs, Amazon SageMaker prend le relais : entraînement, hébergement d'endpoints, MLOps. Côté matériel, AWS propose ses propres puces — Trainium pour l'entraînement, Inferentia2 pour l'inférence — souvent plus économiques que les GPU classiques (G5, P5) pour un débit donné. C'est aussi sur ce terrain que nous hébergeons des modèles open-weightcomme Qwen sur une infrastructure souveraine, lorsque les données ne doivent jamais quitter notre périmètre. La règle que nous appliquons : commencer en serverless/managé, ne provisionner du GPU dédié que lorsque le volume — ou la souveraineté — le justifie.
Une architecture RAG type sur AWS
Pour un assistant qui répond sur la documentation d'une entreprise, l'architecture que nous déployons ressemble à ceci — et elle s'appuie directement sur les briques du début d'article :
Le front parle à une API exposée derrière un ALB, servie via CloudFront (qui peut streamer la réponse token par token).
Une fonction Lambda (ou un conteneur Fargate) orchestre la requête.
La recherche sémantique s'appuie sur des embeddings stockés soit dans OpenSearch Serverless (vecteurs), soit directement dans RDS PostgreSQL avec l'extension pgvector.
Bedrock génère la réponse à partir du contexte récupéré, avec des Guardrails actifs.
Les coûts (tokens, requêtes) sont suivis dans la même logique FinOps que le reste.
Les pièges de l'IA en production : coûts d'inférence qui dérapent (prompts trop longs, pas de cache, mauvais modèle pour une tâche simple), latence perçue (d'où le streaming), et surtout gouvernance des données — savoir où vivent les données, qui y accède, et garantir la conformité (CNDP au Maroc, RGPD). L'IA bien faite reste un problème d'architecture avant d'être un problème de modèle.
Exploiter, pas seulement déployer : ChatOps, remédiation & AIOps
C'est ici que se joue la vraie différence en production. Une bonne architecture, c'est aussi celle qui évite à un ingénieur de se lever à 3 h du matin pour redémarrer un service. Voici, très concrètement, comment nous opérons AWS chez VOID.
ChatOps : AWS parle à Slack
Chaque signal qui compte — alarme CloudWatch, bascule RDS, échec de tâche ECS/Fargate, déploiement, dépassement de budget — est routé vers un canal Slack dédié, par un chemin simple et 100 % managé :
(AWS Chatbot est aujourd'hui intégré à Amazon Q Developer.) L'équipe voit l'incident là où elle travaille déjà, avec le contexte, et peut même lancer des commandes AWS approuvées directement depuis Slack — sans ouvrir la console. Exemple de règle EventBridge qui capte une tâche ECS qui s'arrête anormalement :
{
"source": ["aws.ecs"],
"detail-type": ["ECS Task State Change"],
"detail": {
"lastStatus": ["STOPPED"],
"stoppedReason": [{ "anything-but": { "prefix": "Scaling activity" } }]
}
}SSM Agent : opérer les serveurs sans ouvrir de porte
Tout cela repose sur une brique discrète mais centrale : le SSM Agent, le composant d' AWS Systems Manager préinstallé sur les AMI Amazon Linux et Ubuntu récentes (et installable sur n'importe quelle instance EC2, voire sur des serveurs on-premise). Une fois l'agent enregistré, l'instance dialogue avec AWS en sortie uniquement — aucun port entrant à ouvrir, aucune clé SSH à distribuer. C'est ce qui débloque, en pratique :
Session Manager — un shell sécurisé et audité dans le navigateur ou la CLI, sans bastion, sans port 22 exposé, sans clé à gérer. Chaque session est tracée dans CloudTrail et peut être enregistrée.
Run Command & Patch Manager — exécuter une commande ou appliquer les correctifs de sécurité sur un parc entier d'instances en une fois, par tag.
SSM Automation — les runbooks de remédiation décrits ci-dessous — c'est l'agent qui exécute concrètement les gestes correctifs sur l'instance.
Parameter Store — configuration et secrets non sensibles centralisés, récupérés par l'agent sans les coder en dur.
Côté sécurité, l'agent n'a accès qu'à ce que son rôle IAM d'instance autorise (moindre privilège) — supprimer les accès SSH au profit de Session Manager réduit drastiquement la surface d'attaque.
Remédiation automatique : des runbooks en Python
Pour les pannes courantes et bien comprises, on ne réveille personne : l'alarme déclenche une fonction Lambda (Python / boto3) — ou un document SSM Automation — qui applique le correctif et notifie Slack. Redémarrer un service ECS bloqué, purger un disque saturé, recycler des connexions, invalider un cache CloudFront, forcer un failover : autant de gestes que la machine fait mieux et plus vite qu'un humain à moitié réveillé.
Redémarrage ciblé — relancer une tâche ECS bloquée ou forcer un redéploiement pour recycler les conteneurs.
Nettoyage & capacité — purger un disque saturé, recycler les connexions, ajuster l'Auto Scaling.
Cache & bascule — invalider un cache CloudFront, forcer un failover RDS — puis notifier Slack du geste effectué.
Règle d'or : on n'automatise que ce qu'on a diagnostiqué au moins une fois à la main. Les actions destructrices (suppression, restauration, scale down agressif) ne s'exécutent jamais seules — elles passent par une validation humaine dans Slack (bouton d'approbation), et tout est tracé dans CloudTrail.
Diagnostic assisté par l'IA — Qwen sur infra souveraine
Quand l'incident sort des cas connus, l'ingénieur garde le contrôle, mais il est épaulé. Une Lambda rassemble le contexte — extrait de logs (CloudWatch Logs Insights), derniers déploiements, métriques anormales — et l'envoie à Qwen, que nous hébergeons sur notre infrastructure souveraine (modèle open-weight servi via vLLM, données qui restent dans notre périmètre). Qwen renvoie une hypothèse de cause racine et des actions concrètes, postées directement dans le canal de l'incident. L'ingénieur garde la décision, mais démarre avec l'essentiel du diagnostic déjà débroussaillé — ce qui fait chuter le MTTR(temps moyen de résolution).
Garde-fous AIOps : Qwen diagnostique, il n'exécute rien. Les données envoyées sont filtrées (masquage des secrets/PII), le modèle tourne sur notre infrastructure souveraine, et aucune donnée ne sert à ré-entraîner quoi que ce soit. L'IA accélère l'humain et le laisse maître des décisions à risque.
Ce trio — ChatOps + remédiation automatique + diagnostic IA — transforme l'exploitation : moins d'astreintes subies, un MTTR qui chute, et une connaissance des incidents qui se capitalise (chaque runbook ajouté est un réveil nocturne en moins).
Comment tout s'assemble
Sur une plateforme web typique que nous opérons, le flux ressemble à ceci :
CloudFront en frontal sert les assets statiques et le contenu cacheable, et applique WAF/Shield.
Les requêtes dynamiques passent par un Application Load Balancer…
…qui les répartit sur un Auto Scaling Group d'instances EC2 Graviton (ou de conteneurs Fargate).
La persistance s'appuie sur RDS Multi-AZ, avec des read replicas si la lecture domine, et RDS Proxy côté connexions.
Les fonctionnalités d'IA appellent Bedrock, avec recherche vectorielle (OpenSearch ou pgvector).
Le socle de compute est couvert par des Savings Plans, le reste en On-Demand/Spot.
Résultat : une architecture résiliente (tolérante à la panne d'une zone), performante (latence faible grâce au edge), intelligente (IA intégrée proprement) et économiquement maîtrisée (engagement sur la base, élasticité sur les pics).
La puissance d'AWS s'accompagne d'une exigence : sans discipline d'architecture et de coûts, la facture et la complexité dérapent. Le cloud bien fait, c'est moins de services, mieux choisis, et une gouvernance FinOps continue. C'est exactement ce que nous opérons pour nos clients eninfogérance AWS.
Questions fréquentes
Faut-il toujours mettre CloudFront devant son application ?
ALB ou NLB ?
Savings Plans ou Reserved Instances ?
Comment intégrer l'IA générative sans exploser les coûts ?
Peut-on automatiser la gestion des incidents avec l'IA ?
VOID vous accompagne dans votre migration vers AWS
Que vous partiez d'un hébergement classique, d'un autre cloud ou d'un AWS mal optimisé, nous concevons et opérons votre plateforme de bout en bout — architecture, migration, IA et FinOps.
Une méthode éprouvée
Assessment et cartographie, stratégie des « 7 R » (rehost, replatform, refactor…), landing zone sécurisée, migration par vagues avec plan de rollback, puis optimisation des coûts.
Du run, pas seulement du conseil
Infogérance 24/7, observabilité, sécurité, sauvegardes testées et gouvernance FinOps continue — nous restons aux côtés de vos équipes après la bascule.
À propos de l’auteur
Mehdi Najeddine
Fondateur & Directeur de VOID
Fondateur et directeur de VOID, Mehdi Najeddine cumule plus de 20 ans d'expérience dans le développement web et l'architecture de plateformes cloud à fort trafic. Il accompagne des groupes du CAC 40 et de grandes institutions financières africaines sur l'ensemble du cycle de vie d'une plateforme — conseil d'architecture AWS, migration cloud, FinOps et intégration de l'IA générative — jusqu'au run en production.
Cet article vous a été utile ?
Partagez-le à votre réseau — en particulier aux équipes qui conçoivent, migrent ou exploitent une infrastructure cloud.
Aller plus loin
Infogérance AWS au Maroc
Conception, migration, run et FinOps de vos plateformes cloud par VOID.
Panne AWS & cloud souverain
Ce qu'une panne majeure nous apprend sur la résilience et la souveraineté.
Performance web
Core Web Vitals, CDN, cache : la performance comme levier business.
Parler de votre projet cloud
Audit d'architecture, migration ou optimisation de coûts AWS.