- Un cas où une erreur de configuration du réseau VPC AWS et de la NAT Gateway a entraîné près de 900 $ de frais de transfert de données en une seule journée, dépassant 1 000 $ sur le cumul mensuel
- On pense souvent que le transfert d’EC2 vers S3 est gratuit, mais si le trafic passe par une NAT Gateway dans le VPC, des frais de traitement de données payants s’appliquent
- La cause du problème était l’absence d’un VPC Gateway Endpoint pour S3, c’est-à-dire l’absence de configuration permettant une connexion directe à S3 sans passer par la NAT Gateway
- Le Gateway Endpoint est gratuit et n’entraîne aucun frais de transfert de données ; il peut être configuré simplement avec Terraform, entre autres
- Un exemple qui montre, lors de l’exploitation d’une infrastructure AWS, l’importance de la surveillance des coûts et de la vérification de la configuration des VPC Endpoint
Contexte du problème
- Geocodio utilise AWS pour répliquer dans S3 de volumineux fichiers internes de données géographiques
- Ces données comprennent des points d’adresses, des données de limites administratives, des informations de recensement, etc., pour des volumes allant de quelques Go à plusieurs centaines de Go
- Une synchronisation régulière est nécessaire entre une plateforme ETL hébergée chez Hetzner et l’infrastructure de traitement sur AWS
- Le coût élevé des transferts de données sur AWS est une plainte largement partagée dans l’industrie, et Cloudflare comme Corey Quinn ont déjà pointé ce problème
- Avant de lancer le projet, l’auteur a examiné la structure tarifaire pour estimer les coûts en vérifiant que
- les transferts EC2–S3 dans la même région sont gratuits
- les uploads vers S3 (trafic entrant) sont gratuits
Apparition de coûts inattendus
- Après le déploiement du processus de synchronisation vers S3, une alerte d’anomalie a été reçue via AWS Cost Anomaly Detection
- En une journée, le volume de données transférées via la NAT Gateway a atteint 20,167.32GB, pour un coût de 907.53 $
- Le coût cumulé du mois dépassait déjà 1 000 $
- L’auteur a alors cherché à comprendre pourquoi des frais de NAT Gateway étaient facturés alors qu’il pensait que les transferts EC2–S3 étaient gratuits
Analyse de la cause : passage par la NAT Gateway
- Lorsqu’un VPC utilise une NAT Gateway, le trafic vers S3 est lui aussi routé par défaut via la NAT Gateway
- Même pour des requêtes vers un service AWS situé dans la même région, le passage par la NAT entraîne des frais de traitement de données de 0.045 $ par Go
- Résultat : bien que le transfert entre EC2 et S3 soit gratuit, des coûts de NAT Gateway ont tout de même été facturés
- La solution consiste à créer un VPC Gateway Endpoint pour S3
- Cela permet une connexion directe du VPC vers S3, sans passer par une NAT Gateway ni une Internet Gateway
- C’est entièrement gratuit, sans frais horaires ni frais de transfert
Processus de résolution
- L’infrastructure étant gérée avec Terraform, il a suffi d’ajouter la ressource Gateway Endpoint et de l’associer à la table de routage
- AWS met alors automatiquement à jour le routage pour envoyer le trafic S3 vers l’Endpoint plutôt que vers la NAT Gateway
- Après cela, la facturation liée à la NAT Gateway a cessé
Enseignements et recommandations
- Malgré de longues années d’utilisation d’AWS, l’omission de la configuration d’un VPC Endpoint pour S3 a tout de même provoqué des coûts inattendus
- Le réseau AWS est complexe, et la structure des coûts peut varier fortement selon la manière dont l’infrastructure est configurée
- Recommandations pour éviter une récidive
- Activer AWS Cost Anomaly Detection : permet de détecter rapidement des coûts anormaux
- Utiliser des VPC Endpoint : indispensable pour l’accès à S3 et DynamoDB dans les VPC qui utilisent une NAT Gateway
- Vérifier les hypothèses : ne pas se contenter de l’idée que « le transfert EC2–S3 est gratuit » ; faire un petit test puis surveiller les coûts
- Le cloud est complexe : même les utilisateurs de longue date doivent rester vigilants
- L’article mentionne aussi un cas similaire où Recall.ai a payé 1 million de dollars par an en coûts de traitement de données WebSocket
Mesures de suivi
- Geocodio a vérifié les chemins de communication S3 de tous ses VPC et a terminé la configuration des Gateway Endpoint
- Il est recommandé aux utilisateurs AWS de vérifier la configuration de leurs VPC Endpoint
- En résumé : le trafic vers les services AWS via une NAT Gateway peut lui aussi être facturé, et l’utilisation de VPC Endpoint permet d’éviter ces coûts
Ressources complémentaires
1 commentaires
Avis Hacker News
Je vois souvent ce type de facture surprise apparaître environ une fois par jour sur trois grands subreddits liés au cloud
Les fournisseurs cloud ne proposent que des alertes toujours retardées, et les utilisateurs n’ont plus qu’à prier et demander un geste commercial
En plus, certains affirment qu’il est « techniquement impossible » de proposer des comptes avec un plafond strict, alors qu’Azure en a déjà
J’utilise AWS depuis plus de 10 ans, et les ruptures de conception entre services ainsi que la mise en silos de l’organisation étaient flagrantes
Dans une grande organisation, aucun dirigeant ne veut résoudre un problème qui détériorerait ses KPI ; à la place, on préfère accumuler des points pour une promotion en lançant des services à la mode comme l’IA ou la blockchain
On peut choisir entre des offres mensuelles à 0 $, 15 $ ou 200 $, ce qui permet d’éviter les factures explosives causées par une hausse imprévue des requêtes ou du transfert de données
Lien vers le blog officiel d’AWS
Fil HN associé
Il est certes difficile de fixer un plafond de coût tout en maintenant la stabilité du service, mais ce cas prouve que c’est techniquement possible
C’est pour éviter le risque réputationnel lié à une interruption de service ou à une panne d’infrastructure
Mais le problème vient peut-être du cloud lui-même. Pour les petites structures qui ont besoin d’une structure de coûts prévisible, le cloud n’est peut-être pas adapté
Comme cela arrive beaucoup trop souvent, je pense que les endpoints S3 VPC devraient être activés par défaut lors de la création d’un VPC
Et utiliser une alternative comme fck-nat au lieu d’une NAT Gateway peut faire économiser les frais de trafic par Go
L’accès Internet devrait être refusé par défaut et seulement autorisé explicitement ; sinon, un attaquant pourrait exfiltrer des données
J’ai déjà fait une erreur similaire moi aussi
J’ai envoyé des données de test dans l’algorithme de recommandation AWS puis je les ai oubliées, avant de recevoir quelques mois plus tard une alerte de découvert de ma banque
L’algorithme continuait à tourner et facturait plus de 1 000 dollars par mois, si bien qu’au final 5 000 dollars se sont envolés
Je vérifie mon solde chaque jour et je marque tous les e-mails de facturation comme importants
Et j’ai pris l’habitude de fixer une limite de carte virtuelle pour chaque service
J’ai aussi fait la même erreur et perdu 60 000 dollars
Je ne comprends pas pourquoi les endpoints S3 ne sont pas déployés par défaut
On me demande souvent « pourquoi la facture AWS a explosé ? », et dans la plupart des cas c’est une combinaison NAT + S3 + mauvaise hypothèse
Le transfert EC2→S3 est gratuit, mais il devient payant s’il passe par NAT
Du coup, je donne cette checklist
Heureusement, Cost Anomaly Detection a réagi à temps. Perdre 1 000 dollars fait mal, mais c’est toujours mieux que 20 000
J’ai été surpris d’apprendre qu’il faut payer 0,09 $ par Go pour télécharger ses données depuis AWS
L’upload est gratuit, mais pour les récupérer il faut payer ?
Dans ce cas précis, c’était une situation particulière où une erreur de configuration NAT a fait compter un transfert interne comme un transfert externe
Je me demande si Amazon rembourse ce genre d’erreur
La VPC NAT Gateway a une très mauvaise réputation
J’ai eu un problème similaire quand je travaillais chez Amazon, mais comme c’était un compte d’entreprise, je n’ai pas eu à payer
Ceux qui doivent réellement sortir l’argent sont vraiment à plaindre
Cela n’aide pas directement dans ce cas-ci, mais AWS a lancé hier des forfaits à tarif fixe pour le CDN
Il existe aussi une offre à 0 $ incluant le stockage S3 et la bande passante
Lien associé
J’espère que cela sera étendu à d’autres services à l’avenir
Moi aussi, à 22 ans, en touchant à l’infrastructure pour la première fois, je me suis pris 300 dollars de facture en deux jours
AWS est excellent, mais pour les débutants, le calcul des coûts est bien trop opaque