Réduire drastiquement les coûts de transfert de données sur AWS
(bitsand.cloud)- Sur AWS, le transfert entre zones de disponibilité d’une même région est facturé $0.01/Go à l’émission comme à la réception, soit environ $20 pour transférer directement 1 To, mais utiliser S3 comme relais temporaire peut faire tomber le coût à quelques centimes
- Un bucket S3 standard fonctionne à l’échelle de la région, et AWS le réplique sur au moins 3 zones de disponibilité de la région, ce qui le rend accessible de la même façon depuis plusieurs AZ d’une même région
- Si une instance EC2 téléverse vers S3 dans la même région et qu’une autre AZ télécharge ensuite, les frais de transfert de données sont nuls ; le coût réel se limite alors au stockage S3 sur une très courte durée et aux coûts des requêtes API
- Dans
us-east-1, conserver 1 To moins d’une heure coûte environ $0.03 avec S3 Standard à $23/TB-month, soit 1/720 du tarif mensuel ; même 1 Po tombe à environ $32 au lieu de $20,000 en transfert direct - Cette méthode n’est pas un remplacement drop-in d’un code de transfert réseau et peut augmenter la latence, mais pour les transferts cross-AZ massifs où le coût prime sur tout le reste, elle peut réduire la facture de plus de 99 %
Là où les coûts de transfert de données AWS explosent
- Sur AWS, déplacer des données sans précaution peut faire grimper très vite la facture de transfert
- À la date de rédaction, les principaux tarifs de transfert de données sont les suivants
- Le trafic sortant d’AWS vers l’Internet public coûte $0.09/Go dans
us-east-1, jusqu’à $0.154/Go dansaf-south-1, soit $90 à $154 pour 1 To - Le trafic sortant d’une région AWS vers une autre coûte $0.02/Go dans
us-east-1, jusqu’à $0.147/Go dansaf-south-1; même sans quitter le réseau AWS, 1 To peut donc coûter $20 à $147 - Le trafic entre zones de disponibilité différentes d’une même région est facturé $0.01/Go par sens ; envoyer 1 To de
us-east-1aversus-east-1brevient donc à $10 à l’envoi et $10 à la réception, soit $20 au total
- Le trafic sortant d’AWS vers l’Internet public coûte $0.09/Go dans
- Le trafic Internet et le trafic inter-régions ne paient que les frais d’egress sur les données sortantes, alors que le trafic inter-AZ dans une même région est facturé dans les deux sens
- Déployer des ressources sur plusieurs zones de disponibilité améliore la résilience et la disponibilité, mais si ces ressources échangent des données entre AZ différentes, des coûts cross-AZ apparaissent
Points d’attention sur PrivateLink et les VPC endpoints
- Si une instance EC2 envoie 1 To vers un bucket S3 public situé dans une autre région, la facture peut être de $90 d’egress Internet au lieu des $20 attendus pour un transfert inter-régions
- AWS PrivateLink et les VPC endpoints sont utiles, côté coût et sécurité, car ils garantissent que les données inter-régions ne quittent pas le réseau AWS
- En revanche, ces fonctionnalités ne sont pas gratuites et ont leurs propres limites et détails tarifaires
- Ressources associées
Contourner les coûts de transfert cross-AZ avec S3
- La plupart des classes de stockage S3 stockent les buckets à l’échelle de la région, et non d’une zone de disponibilité
- L’utilisateur téléverse dans un bucket
us-east-1, pas dans un bucketus-east-1aouus-east-1b - AWS réplique ensuite les données en interne sur au moins 3 zones de disponibilité de la région
- L’utilisateur téléverse dans un bucket
- Les données d’un bucket S3 standard sont accessibles de manière identique depuis toutes les zones de disponibilité de la même région ; pour S3, qu’un téléchargement vienne de
us-east-1aou deus-east-1bne change rien - Avec S3 Standard, les téléchargements dans la même région sont gratuits ; les téléchargements vers une autre région ou vers l’Internet public restent soumis aux tarifs normaux de transfert de données
- Les téléversements vers S3 sont gratuits en frais de transfert de données, quelle que soit la classe de stockage
- Les coûts des requêtes API S3 s’appliquent toutefois
- Ces coûts de requêtes restent relativement faibles
Calcul des coûts pour 1 To et 1 Po
- Envoyer directement 1 To depuis une instance EC2 de
us-east-1avers une instance EC2 deus-east-1bcoûte $20 - Si les mêmes données sont téléversées vers S3 puis téléchargées par l’instance dans l’autre AZ, les frais de transfert de données à l’upload comme au download sont nuls
- Le coût restant est donc celui du stockage S3
- Le stockage S3 Standard dans
us-east-1coûte $0.023/Go/mois, soit $23/TB-month - La facturation se fait à l’heure
- Si l’architecture garantit que les données restent moins d’une heure dans S3, le coût tombe à environ $0.03, soit 1/720 de $23
- Il faut supprimer l’objet S3 après le transfert
- Le stockage S3 Standard dans
- Dans ce calcul, le coût de transfert tombe de $0.02/Go à $0.000032/Go, soit environ 0.15 % du tarif initial
- À l’extrême, un transfert de 1 Po revient à environ $32 avec cette méthode, au lieu de $20,000 en mode standard
Scalabilité et limites
- S3 est très scalable, ce qui convient aussi à un schéma où un objet téléversé depuis une AZ est téléchargé simultanément par de nombreuses instances dans une autre AZ
- Des milliers d’instances dans une seconde AZ peuvent télécharger le même objet S3
- Le coût de stockage S3 reste identique
- Le coût de téléchargement reste lui aussi nul
- Il existe des limites sur la taille des objets S3
- Un objet unique ne peut pas dépasser 5 To
- Un fichier de plus de 5 To doit être découpé
- Un upload simple ne peut pas dépasser 5 Go ; au-delà, un upload multipart est nécessaire
aws s3 cpgère l’upload multipart en interne
- S3 One Zone-Infrequent Access et S3 Express One Zone ne stockent les données que dans une seule zone de disponibilité
- Le coût de stockage est plus faible, mais avec une contrepartie sur la disponibilité
- Dans
us-east-1, S3 One Zone-Infrequent Access coûte $0.01/Go, contre $0.0125/Go pour S3 Infrequent Access - S3 One Zone-Infrequent Access vise 99.5 % de disponibilité, contre 99.99 % pour S3 Infrequent Access
Configuration de l’expérience et coûts observés
- L’expérience a utilisé 2 nouveaux comptes AWS pour chaque partie afin de réduire le bruit sur les coûts
- Chaque compte contenait 2 instances EC2, l’une en
us-east-1aet l’autre enus-east-1b, et l’instance deus-east-1agénérait un fichier aléatoire de 1 To - Deux approches ont été comparées
- La première consistait à lancer un serveur netcat sur l’instance
us-east-1bdans un VPC avec des sous-réseaux privés dans les deux AZ, puis à transférer directement le fichier de 1 To depuis l’instanceus-east-1a - La seconde consistait à créer un bucket S3 dans un VPC avec un S3 Gateway endpoint, puis à faire téléverser le fichier de 1 To par l’instance
us-east-1a, avant téléchargement et suppression par l’instanceus-east-1b
- La première consistait à lancer un serveur netcat sur l’instance
- Le free tier AWS a pu légèrement influencer les résultats
- Le free tier S3 offre 5 GB-months pendant 12 mois
- 5 GB-months est inférieur à 1 TB-hours, mais l’écart reste limité
- Après mise à jour de Cost Explorer, l’expérience de transfert direct affichait $21.49, proche des $20 attendus
- Le fait d’avoir interrompu puis relancé une fois le transfert explique une partie du surcoût
- Le fichier généré faisait techniquement 1024 Go, ce qui porte le coût de base à $20.48
- L’expérience basée sur S3 a d’abord été observée à $0.08, sans apparition de frais de transfert de données
- Il a ensuite été confirmé que les coûts de stockage S3 sont remontés par bucket sur une base quotidienne et apparaissent dans Cost Explorer plus tard que les autres coûts
- Comme prévu, le coût de stockage remonté n’était que de quelques centimes
- Le free tier de stockage S3 a été entièrement consommé
- Cette possibilité a été signalée par Dieter Matzion de la communauté FinOps
Quand cette approche vaut le coup
- AWS réplique en interne les données S3 entre zones de disponibilité, et ce coût est déjà inclus dans le coût de stockage S3 payé par l’utilisateur
- L’approche via S3 exploite donc le fait que le coût cross-AZ a déjà été payé indirectement au moment du téléversement
- Si les données restent longtemps dans S3, cette méthode peut devenir bien plus coûteuse qu’un transfert direct cross-AZ
- En supprimant l’objet immédiatement après le transfert, il devient possible d’atteindre la réduction de coût de 99 % recherchée
- Les inconvénients sont nets
- Ce n’est pas un remplacement drop-in du code de transfert existant
- La latence peut être bien plus élevée qu’avec une connexion réseau directe
- Quand le coût est la priorité absolue, cela peut devenir une méthode pratique pour réduire de plus de 99 % les coûts de transfert de données cross-AZ sur AWS
1 commentaires
Avis sur Hacker News
Pour partager mon astuce, on peut utiliser une instance Lightsail pour « proxyfier » les données d’autres ressources AWS, par exemple une instance EC2 ou un bucket S3.
Chaque instance Lightsail inclut un volume de transfert de données dans son prix : l’instance à 3,50 $ offre 1 To, celle à 5 $ 2 To, celle à 10 $ 3 To, celle à 20 $ 4 To, et celle à 40 $ 5 To.
En prix par volume transféré, l’instance à 10 $ avec 3 To est la plus intéressante.
D’après les données de l’article, 3 To de trafic depuis EC2 coûtent 276,48 $ en us-east-1, et 69 $ depuis un bucket S3.
L’inconvénient est que, dans Lightsail, le trafic entrant comme sortant est comptabilisé comme du « trafic ».
Selon la clause 51.3 des conditions AWS, il est interdit d’utiliser Amazon Lightsail d’une manière visant à éviter les frais de données d’autres services.
Cela couvre par exemple le fait de proxyfier du trafic réseau depuis d’autres services vers l’Internet public ou d’autres destinations, ou de traiter des volumes excessifs de données via des services de load balancing/CDN ; en cas de violation, AWS peut limiter les services de données ou suspendre le compte.
Il suffit de définir S3, ou le serveur HTTP de son choix, comme origine.
Auparavant, c’était 50 Go par mois pendant les 12 premiers mois, mais juste après la publication par Cloudflare de https://blog.cloudflare.com/aws-egregious-egress, c’est devenu 1 To gratuit de manière permanente.
GCP a aussi bouché une faille similaire en 2023, probablement parce que certains clients en abusaient.
Si cette méthode se répand suffisamment, je pense qu’AWS fera la même chose.
https://cloud.google.com/storage/pricing-announce#network
La « faille » que GCP a bouchée était la possibilité de faire gratuitement des transferts de données entre régions du même continent via GCS ; chez AWS, c’est déjà payant.
Le billet d’origine explique que même les transferts entre zones de disponibilité au sein d’une même région coûtent 0,02 $ par Go, et qu’il est possible de les contourner.
Je me demande si je pourrais trouver un acheteur pour cette information.
En revanche, ce n’est peut-être pas censé servir de canal de transfert ; ils s’attendent plutôt à ce que vous y mettiez les données et les y laissiez.
Il existe énormément d’astuces de ce genre pour réduire les coûts et obtenir des ressources gratuitement.
C’est ingénieux, mais pas fiable.
C’est du même ordre que les hacks consistant à faire du minage de cryptomonnaie dans GitHub Actions via des dépôts OSS.
À traiter comme un exercice de hacking intéressant, mais mieux vaut ne pas déployer ce genre de solution en production.
Il faudrait au minimum obtenir l’accord de son account manager ; sinon, on risque de se réveiller un matin avec son compte AWS résilié.
Passer par S3 est aussi généralement plus efficace que de lancer un processus de synchronisation pour distribuer les données vers plusieurs destinations.
Le coût de stockage S3 est facturé en Go-mois ; donc 1 To × 0,023 $ par Go ÷ 730 heures par mois devrait donner environ 3 cents si les données restent une heure dans le bucket.
Cela dit, elles semblent avoir été supprimées presque immédiatement ; si les données sont restées environ une minute, on serait plutôt autour de 0,03 ÷ 60.
En général, je m’attendrais à ce qu’AWS arrondisse cela à 0,01 $.
La valeur TimedByteStorage dans le rapport de coûts et d’utilisation fait foi.
https://handbook.vantage.sh/aws/services/s3-pricing/
S3 est aussi une bonne astuce, et il y en a d’autres.
Les gros clients AWS, par exemple ceux qui dépensent plus d’un million de dollars par an, peuvent demander des remises.
À une époque, les remises sur les transferts entre zones de disponibilité étaient très importantes.
Regrouper autant que possible dans une seule zone de disponibilité est aussi une option.
Une configuration où la base de données est en zone « b » et l’unique serveur en zone « a » est même pire que de simplement standardiser sur une seule zone.
Quand on utilise plusieurs zones de disponibilité, il faut faire de l’équilibrage par zone en tenant compte de la charge.
Pour des raisons de coût ? Pourtant ça ne semble même pas réduire les coûts.
Ça ressemble à de l’optimisation fiscale version tech.
Si trop de gens font ça, AWS va « simplement refermer la faille ».
AWS n’est pas une entité unique : c’est plutôt des dizaines, voire des centaines d’AWS, chacun avec ses propres KPI.
Certaines équipes veulent que vous réduisiez vos dépenses, mais elles n’iront pas jusqu’à vous expliquer concrètement comment le faire.
Quand on construit quelque chose d’aussi complexe qu’AWS, tout finit par s’imbriquer, et il devient impossible pour un client d’optimiser un seul élément isolément.
AWS veut que certains services soient utilisés d’une certaine manière, et les rend donc très bon marché quand on les utilise ainsi.
Utiliser les endpoints S3 fait partie des façons dont AWS souhaite que l’on utilise le service S3.
CloudFront en est un autre exemple.
AWS veut que l’on utilise CloudFront ; il rend donc CloudFront moins cher que les autres sorties de données.
L’alternative à un système complexe de minimisation des coûts cloud, c’est tout simplement de ne pas utiliser le cloud
Il suffit de s’auto-héberger, ou d’utiliser Cloudflare, dont les frais de sortie sont de 0 centime par Go
Ou alors de louer des serveurs cloud chez plusieurs hébergeurs VPS bien moins chers, et d’éviter les services cloud coûteux et compliqués qui aspirent 9, 12 ou 17 centimes par Go et encouragent le lock-in
Sérieusement, si vous en êtes au point de devoir analyser finement vos coûts cloud, vous devriez envisager d’abandonner le cloud
Parce qu’ailleurs, ce type d’analyse est tout simplement impossible
Les gens qui recommandent de passer à l’on-premise semblent ignorer combien coûte le personnel nécessaire pour gérer un datacenter autrement que comme un homelab
Même Apple iCloud utilise AWS et GCP parce que c’est économiquement rationnel
C’est soit qu’on pense devoir revenir à l’on-premise parce qu’on ne sait pas utiliser le cloud, soit qu’on ne s’intéresse pas vraiment à la fiabilité
Commencez par calculer le coût de la protection DDoS au-delà de 10G, puis dites que le cloud est plus cher
Nous dépensons plus de 100 000 dollars en bande passante AWS, mais comme nous n’avons pas à payer des ingénieurs réseau pour gérer 3 zones de disponibilité, cela reste moins cher qu’une liaison Internet dédiée
Beaucoup d’organisations migrent vers l’hébergement cloud parce que, parmi d’autres avantages, cela permet de faire du FinOps et du contrôle des coûts de manière beaucoup plus approfondie
Selon l’infrastructure, si les besoins en stockage ou en calcul varient, une solution cloud peut être bien adaptée
Au final, ce n’est qu’un outil
J’ai travaillé dans des environnements où l’on se connectait en SSH à des serveurs bare metal de production pour mettre à jour les logiciels, gérer le pare-feu et vérifier le stockage, ainsi que dans des environnements où l’essentiel de l’hébergement passait par des fournisseurs cloud, et j’ai aussi participé à des migrations de l’un vers l’autre
Le « cloud » n’est pas meilleur ni pire que des serveurs bare metal ou des VPS : cela dépend du cas d’usage
Il suffit de faire une due diligence pour comprendre pourquoi l’un convient mieux que l’autre, puis de réévaluer à chaque changement d’environnement
Cette attitude du type « le cloud, c’est mal » est puérile
Si vous êtes déjà lock-in chez AWS, en sortir peut coûter assez cher, et dans certains cas cette approche peut constituer un bon compromis
Dans bien des cas, ce coût peut facilement annuler, voire dépasser, les économies réalisées
C’est aussi l’une des grandes raisons pour lesquelles le choix du cloud est devenu une décision si évidente pour les entreprises
AWS semble exploiter ce cas à perte
L’auteur a trouvé une faille dans la tarification d’AWS, et c’est pour cela que c’est aussi bon marché
Le faire soi-même aurait probablement coûté plus cher
On ne peut que spéculer sur les raisons de cette tarification chez AWS, mais il est très probable que l’objectif soit d’inciter à utiliser un service plutôt qu’un autre
Si vous êtes un gros consommateur de bande passante, cela vaut la peine de regarder du côté de Leaseweb, PhoenixNAP, Hetzner, OVH
Les prix de la bande passante y sont ridiculement plus bas
J’ai déjà vu une situation étrange où les commerciaux d’AWS refusaient totalement de baisser le prix de la bande passante, alors qu’aux tarifs standard l’entreprise n’aurait pas pu être viable
Les coûts de transfert semblent généralement négociables
Une autre astuce consiste à utiliser ECR
On peut transférer gratuitement 5 To par mois vers Internet
Les images de conteneurs doivent être publiques, mais leur contenu peut être chiffré
C’est utile pour stocker des archives média dans Glacier
Je ne comprends pas comment AWS peut continuer à soutirer de l’argent aux gens avec ces frais de transfert de données absurdes
Juste à côté, Cloudflare R2 propose des conditions 100 fois meilleures
Elles vous attachent à l’endroit où elles se trouvent, et comme pour échapper à la gravité, déplacer des données coûte de l’argent
S’il y a une perte de données ou des transferts lents avec R2, on me le reprochera, ou à tout le moins on me demandera de l’aide
En revanche, si S3 perd des données ou se montre lent dans certains cas, les gens penseront que nous l’utilisons mal et trouveront un moyen d’améliorer les choses
Personne ne sera blâmé
Honnêtement, si l’activité crée la moindre valeur, les frais de transfert de données sont négligeables et ne méritent pas forcément d’être optimisés
Les économies sont vraiment importantes
Nous utilisons tel quel AWS-SDK(Node.js), simplement avec l’endpoint R2
Une fois les données dans AWS, toutes les applications de la même région peuvent les utiliser sans frais de transfert
De plus, les prix cités dans l’article sont les prix affichés, et lorsqu’un client préachète de la bande passante par contrat, cela devient beaucoup moins cher
Je ne sais pas vraiment quels sont ses niveaux de performance et de disponibilité en production réelle
La durabilité, en particulier, est difficile, voire presque impossible, à évaluer
S3 a l’avantage d’une histoire et d’un bilan beaucoup plus longs
Si tout est déjà dans AWS, garder les données à proximité présente aussi des avantages
Selon la manière dont les données sont utilisées, les coûts de sortie ne sont pas forcément toujours si importants
En revanche, dès que l’on commence vraiment à générer un trafic sortant significatif, cela devient absurdement cher
Si des concurrents comme R2 parviennent à offrir une fiabilité et des performances raisonnablement compétitives, je m’attends à ce qu’ils gagnent des parts de marché