Un e-commerce sur un seul serveur mutualisé, ça marche — jusqu’au jour où ça compte. Un pic de trafic (une promo, un post qui marche), une panne disque, une base corrompue : chaque incident se paie en commandes perdues. AWS ne rend pas le problème magique, mais il te donne les bons outils pour chaque risque.
Black Friday, une story qui explose : le trafic x10 en une heure. Tu veux pouvoir grossir puis redescendre — et ne payer que ce que tu consommes.
Le panier et le paiement ne doivent jamais tomber. Multi-AZ, réplicas, bascule automatique : la panne d’une machine ne coupe pas la boutique.
Sauvegardes, patchs, réplication : délégués à AWS. Tu passes ton temps sur la boutique, pas sur l’admin système.
À l’usage, taggable, optimisable. Bien géré, tu paies moins qu’un gros serveur dédié qui tourne à vide la nuit.
Le vrai gain n’est pas « le cloud c’est mieux », c’est de découpler : chaque brique (site, base, images) devient un service qu’on dimensionne et qu’on sécurise séparément.
Quatre services, chacun sur son rôle. Une requête entre par le CDN, le site tourne sur EC2, les données vivent dans RDS, et les photos sont servies depuis S3 — optimisées au passage par Lambda.
EC2, c’est une machine que tu contrôles entièrement. C’est le bon choix quand tu as du PHP historique (WooCommerce, PrestaShop) ou une app Next.js en rendu serveur : tu installes ce que tu veux, tu maîtrises la configuration.
Le principe de déploiement (Docker, reverse proxy, HTTPS) est le même que dans mon guide déployer Langfuse sur AWS EC2. Pour tenir les pics, on met plusieurs EC2 derrière un load balancer, en auto-scaling.
La règle numéro un : la base ne tourne pas sur l’EC2. Une base sur la même machine que le site, c’est une panne disque = commandes perdues, et zéro sauvegarde le jour où il faut. RDS gère MySQL ou PostgreSQL pour toi.
Ne mets jamais RDS en accès public. Il reste dans le réseau privé (VPC), et seul l’EC2 du site peut lui parler.
Les images produit n’ont rien à faire sur le disque de l’EC2 : ça ne scale pas, ça se perd au redéploiement, et ça sature la machine. Elles vont dans S3 — un stockage objet quasi infaillible et bon marché — et sont servies via CloudFront.
C’est la brique qui change tout côté vitesse. Les commerçants uploadent des JPEG de 5 Mo sortis du téléphone. On ne sert jamais ça au visiteur. À chaque dépôt dans S3, un événement déclenche une Lambda qui convertit en WebP et génère plusieurs tailles.
Résultat : une image de 5 Mo devient trois WebP de quelques dizaines de Ko, servies par CloudFront avec un cache d’un an. La page produit passe de lente à instantanée — sans que le commerçant n’ait rien à faire.
Le piège classique : la Lambda réécrit dans le même bucket, se redéclenche, et boucle à l’infini. Filtre sur le suffixe (ici original.jpg), ou écris les variantes dans un préfixe séparé.
Un EC2 unique, même bien dimensionné, finit par saturer un jour de pic. La vraie parade, ce n’est pas une plus grosse machine, c’est un Application Load Balancer devant un groupe d’auto-scaling : le trafic se répartit sur plusieurs EC2 identiques, et le groupe ajoute ou retire des machines tout seul selon la charge.
Je pilote le groupe en target tracking : je fixe une cible (par exemple 50 % de CPU moyen, ou un nombre de requêtes par instance) et AWS crée les alarmes CloudWatch qui montent puis redescendent la capacité. Pour un e-commerce, la métrique la plus parlante est `ALBRequestCountPerTarget` — le nombre moyen de requêtes par instance derrière le load balancer. Détail cité par la doc AWS : mets une cible aussi haute que possible, avec une marge pour les à-coups, et le groupe garde juste ce qu’il faut de machines.
Piège classique du pic : le scale-out prend quelques minutes (démarrage EC2 + warmup). Si tu attends Black Friday pour tester, tu découvres trop tard que ta cible est trop haute. Je répète le pic avec un test de charge une semaine avant, et je règle le warmup pour ne pas compter une instance encore froide.
Dès qu’il y a plusieurs EC2, un problème surgit : le panier d’un visiteur ne doit pas vivre dans la mémoire d’une seule machine, sinon le prochain clic tombe sur une autre instance et le panier est vide. La session et les données chaudes (catalogue, prix) sortent donc de l’EC2 vers un cache partagé. J’utilise Amazon ElastiCache (Redis/Valkey) : chaque EC2 lit et écrit la même session, et les requêtes catalogue les plus fréquentes ne tapent plus RDS à chaque page.
L’ordre des amortisseurs compte : CloudFront encaisse le statique, ElastiCache encaisse le dynamique chaud, les read replicas encaissent les lectures restantes, et seul le strict nécessaire (écritures de commande) atteint le primaire RDS. Chaque couche protège la suivante.
Sur CloudFront, tout se joue dans les cache behaviors : un même site n’a pas un seul comportement de cache, mais un par type de contenu. Je découpe au minimum en deux : les assets (images, CSS, JS) qu’on cache fort, et les pages dynamiques (panier, compte) qu’on ne cache pas.
images WebP, CSS, JS
tout ce qui est personnel
Les valeurs exactes des policies managées sont documentées : `CachingOptimized` monte à un an de TTL max, `CachingDisabled` reste à zéro. Je m’appuie sur elles plutôt que d’écrire mes propres policies — moins de config à maintenir. Détails dans la doc des managed cache policies.
Toute l’archi vit dans un VPC découpé en sous-réseaux. Les EC2 sont dans un sous-réseau public (joignables via l’ALB), RDS et ElastiCache dans un sous-réseau privé, sans route vers Internet. Les security groups font le reste : le SG de RDS n’accepte le port 3306 que depuis le SG des EC2, rien d’autre.
Je ne fais jamais transiter un numéro de carte par mes EC2. Le paiement part chez un prestataire PCI (Stripe, Adyen…) via un champ hébergé côté client : la carte ne touche pas mon infra, donc mon scope PCI DSS fond. Quand une partie doit rester chez moi, la logique AWS est claire — isoler les données cardholder dans un compte dédié, séparé du reste, pour « dé-scoper » le non-PCI. C’est exactement l’approche décrite dans ce billet sécurité AWS sur le PCI en serverless.
Même avec un champ hébergé, le script du prestataire vit dans TA page. Les scripts servis depuis ton S3 ou ton EC2 peuvent rester dans le scope PCI (SAQ A-EP). Vérifie ce que ton prestataire attend avant de te croire hors-scope.
Sortir l’agent de la boîte noire : instrumenter chaque étape, mesurer le coût, et le noter avec un LLM-as-a-judge.
Mon premier agent LangGraph, et pourquoi un bon prompt ne suffit plus quand la tâche devient réelle.