Coûts dans le cloud : le cloud permet-il vraiment des économies ?
28 February 2019
Le cloud nous promet des économies quasi-miraculeuses, et pourtant, on entend souvent dire que le cloud est cher. Qu'en est-il vraiment ? Peut-on faire des économies avec le cloud ou est-ce un argument commercial sans fondement ? Et comment faire ? Pour le savoir, nous allons faire un rapide tour d'horizon des coûts dans votre data center et dans le cloud, pour comprendre les différences majeures, puis nous verrons comment optimiser les coûts du cloud pour les réduire et peut-être faire des économies ?
Les coûts d'infrastructure dans un data center
Les principales catégories de coûts dans un data center en propre ("on-premises") ou en colocation sont :
1. les coûts d'hébergement
Les coûts d'hébergement comprennent le coût des surfaces de data center et les coûts d'électricité pour alimenter les équipements. Les coûts de surface incluent la sécurité physique, la climatisation, la mise à disposition d'alimentations électriques ininterruptibles redondantes, etc...et les coûts d'électricité sont en général si importants que vous pouvez considérer payer le prix de l'équipement en 3 années de consommation d'énergie.
2. les coûts d'achat et les coûts d'opportunité
Les coûts d'achat regroupent tous les coûts d'acquisition, y compris ceux du processus de procurement : la sélection des appareils, la sélection des fournisseurs, les éventuelles activités de due diligence ou de mise à l'épreuve des fournisseurs (PoC ou installations pilotes), et l'acquisition elle-même. Entre les serveurs, les équipements de stockage, les équipements de communication, les équipements de sécurité, ... l'addition grimpe très très vite.
Je profite pour mettre dans les coûts d'achat les coûts d'opportunité que représentent l'immobilisation de cash pour des actifs à livrer (couramment 6 à 8 semaines de délais de livraison, pour des sommes qui peuvent être conséquentes) et le sur-dimensionnement des appareils pour tenir les 3 années à venir.
3. les coûts de maintenance
Lorsque vous achetez un équipement, votre fournisseur ne vous laisse pas vous en tirer sans un contrat de maintenance qui coûte généralement un bon 20% du prix de l'équipement, suivant le niveau de services. Rajoutez éventuellement encore des pièces de rechange sur site pour permettre une intervention rapide et minimiser l'interruption de service et vous avez des sommes d'argent engagées -- et immobilisées -- qui peuvent être importantes.
4. les coûts de mise en place
La mise en place des équipements prend du temps et nécessite parfois l'intervention de spécialistes qui peuvent coûter très cher. Le délai entre la livraison et la mise en exploitation des équipements vient ajouter encore au coût d'opportunité.
5. les coûts d'opération
Dernière catégorie : les coûts d'opération. Ces coûts recouvrent les gens dont vous avez besoin pour entretenir les machines et les maintenir en état de fonctionnement sur leur durée de vie. Ce sont vos équipes techniques, mais aussi les prestataires externes qui vont intervenir sur les domaines les plus pointus. On peut considérer qu'un bon 30% du temps de vos équipes techniques est passé à l'entretien des machines (mises à jour, patches de sécurité, débugging suite à mises à jour, patches de sécurité suite à mise à jour, et on recommence...).
Les coûts dans le cloud
Avant d'aborder les coûts dans le cloud, un petit mot de mise en garde : les coûts que je vais évoquer ici, et les économies potentielles, ne s'appliquent que pour les cloud publics. Les clouds privés sont une autre histoire : leur fonctionnement les rend plus proches de l'outsourcing ou de la colocation que du cloud public. Les modèles de facturation sont souvent variés et incluent parfois une composante forfaitaire en plus de la consommation à l'usage. C'est le prix à payer pour un matériel dédié.
Les coûts dans le cloud (public) sont plus simples : il n'y a plus de coûts d'hébergement, plus de coûts d'infrastructures plus de coûts d'opportunité, plus de coûts de maintenance...Oui, bien-sûr, ces coûts existent toujours et sont à la charge du prestataire qui se dépêche de les passer aux clients, mais si les coûts subsistent, la responsabilité n'est plus là (c'est toujours ça), et le coût est mutualisé entre tous les clients. Enfin, pour ce qui concerne le coût des équipements, le client bénéficie des économies d'échelle de son prestataire : je suis certain que Google, Amazon ou Microsoft paient les serveurs bien moins chers que nous !
Il y a cependant de nouveaux coûts qui apparaissent et qui, en plus d'être difficiles à estimer, prennent les responsables d'infrastructure par surprise par leur nature inhabituelle :
les coûts de transfert de données
- le traffic internet : les données vers le cloud sont gratuites, mais les données qui quittent le cloud sont facturées $0.09/GB,
- le trafic sortant de la région : $0.02/GB,
- le trafic au sein d'une même région mais entre AZ ou inter-VPC : $0.01/GB.
les coûts de stockage et d'I/Os
Les coûts de stockage sont généralement bon marché. Selon les cas, le stockage est facturé en fonction du volume provisionné (et non du volume consommé) et les performances I/O supplémentaires peuvent être facturées en sus. Si les performances proposées sont moyennes et conviennent à 80% des charges de travail, les performances supérieures sont payantes. Voici un exemple des tarifs proposés par AWS pour un stockage similaire à des volumes SAN (les prix sont par GB-mois dans la région de Francfort, une région que j'ai choisie car elle est proche de la Suisse et se situe dans la moyenne des tarifs) :
- EBS General Purpose SSD : $0.119 (I/O inclus),
- EBS Provisioned IOPS SSD : $0.149 par GB-month de stockage provisionné + $0.078 par IOPS-mois provisionné,
- EBS Throughput Optimized HDD : $0.054 par GB-mois de stockage provisionné (I/O inclus),
- EBS Cold HDD : $0.03 (I/O inclus),
- EBS Snapshots vers Amazon S3: $0.054.
- le calculateur AWS, section EC2 : https://calculator.s3.amazonaws.com/index.html
- la page de prix EBS : https://aws.amazon.com/ebs/pricing/?nc1=h_ls
Il est à noter que pour le stockage de type S3, le volume facturé correspond au volume consommé, et que contrairement aux volumes EBS ou aux volumes de votre SAN, il n'y a pas à se soucier de la différence entre la capacité provisionnée et la capacité exploitable : ce qui est consommé est exactement ce qui est facturé (pas de perte de capacité due au formatage ou à la mise en RAID).
les autres coûts d'utilisation
Certains services ont des coûts d'utilisation variés et de nouveau très difficiles à estimer. Par exemple :
- les connexions VPN et les connexions directes de type AWS Direct Connect ont un coût à l'heure et au volume de données transférées,
- les connexions de type AWS PrivateLink ont un coût à l'heure et au volume de données traitées,
- les gateways NAT ont un coût à l'heure, au volume de données transférées et au volume de données traitées,
Certainement, les coûts unitaires peuvent sembler faibles mais c'est l'accumulation qui peut entrainer des surprises de facturation.
Quels autres problèmes ?
Le cloud, par sa nature même, pose un certain nombre de problèmes. En effet, les ressources sont "on -demand" : autant dire hors de contrôle ! On peut créer des réseaux, provisionner des bases de données, lancer de grosses machines, rien que parce que c'est possible !
Et les ressources sont dématérialisée, et donc invisibles. Les ressources créées sont oubliées et le compteur continue à tourner jusqu'à ce que vienne la facture mensuelle qui rappelle aux bons souvenirs de tous ces dizaines d'instances ou ces grosses machines lancées "pour des tests".
Comment contenir les coûts dans le cloud ?
1. créez une culture de gestion des coûts
Sensibilisez les équipes IT et les développeurs aux gestes d'économie. Pour créer cette culture des coûts :
mettez en place les bonnes pratiques
Ne pas multiplier les ressources, éviter de laisser tourner des infrastructures devenues inutiles, éteindre les machines de test durant la nuit si elles ne sont pas utiles...autant de gestes simples qui peuvent éviter un dérapage des coûts. Cimentez ces pratiques en les intégrants dans les procédures opérationnelles. Favorisez le rightsizing, c'est-à-dire l'utilisation de la ressource appropriée et non de la plus grosse ressource disponible pour "faire le job" et décrétez que l'état par défaut d'une machine est OFF.
Pensez aussi à faire "tagger" les infrastructures pour permettre l'allocation des coûts.
mettez en place des formations
De la même façon que pour la sensibilisation à la sécurité informatique, mettez en place des formations de sensibilisation aux coûts du cloud et répétez-les une à deux fois chaque année pour que la répétition devienne culture.
mettez en place un reporting rapide
Inutile d'attendre la facture qui tue : mettez en place des alertes en cas de dépassement avéré ou d'anticipation de dépassement de seuils de consommation et utilisez les outils de gestion des coûts pour obtenir tous les jours un rapport des en-cours (AWS Cost Explorer, AWS Trusted Advisor, etc sont là pour vous aider).
N'hésitez pas à faire circuler les rapports dans les équipes pour renforcer la sensibilisation et créer l'appropriation : les coûts sont l'affaire de tous et partager leur aspect concret (non, je n'ai pas dit "prélever sur les salaires", ce n'est pas ça "partager l'aspect concret" !) participe à la sensibilisation. Eventuellement, dans les grandes équipes, créez un dashboard par équipe auquel tout le monde aura accès, avec une évolution des coûts dans le temps pour identifier les tendances.
allouez les coûts par équipes
Si votre façon de travailler le permet, allouez les coûts par équipes et prélevez-les sur leurs budgets de fonctionnement. Pas de raison que le manque de disciplines de certaines équipes ou leurs besoins excessifs par rapport à d'autres n'impacte tout le monde.
établissez un profile-type par service
Avec le temps, les infrastructures qui ont migré vers le cloud se stabilisent et leur profile de consommation devient connu. Etablissez un profile-type et comparez régulièrement les dépenses engendrées avec ce profile-type. Ainsi, si un service devait déraper, il serait identifié rapidement (auto-scaling de services, sur-dimensionnement des instances).
faites des revues de services et architectures
Effectuez des revues régulières des services qui tournent dans le cloud afin d'adapter la taille des machines aux exigences réelles (rightsizing) et faites revoir les architectures pour tirer parti des dernières évolutions de l'offre du prestataire (nouveaux types d'instances disponibles, nouveaux services, nouvelles limites, etc...) qui peuvent contribuer à diminuer les coûts.
contrôlez les droits d'accès
C'est un classique, mais la meilleure façon d'empêcher les dérapages est de contrôler les droits d'accès et le droit de création de certains types d'infrastructures ou d'utilisation des instances les plus coûteuses.
utilisez les principes de l'Infrastructure as Code
Les ressources dans le cloud ne sont pas faites pour être exploitées manuellement mais de façon programmatique. Cela permet de les répliquer facilement, un peu comme à l'emporte-pièce et surtout, cela permet de les détruire toutes ensemble, d'une seule commande. Ainsi, il n'est plus possible d'oublier une instance ou un service ici ou là qui continuerait à être facturé.
L'Infrastructure as Code permet aussi de mettre à disposition un catalogue de ressources-types ou de templates qui construisent des sous-ensembles parfaitement maîtrisés. Ces catalogues excluent l'utilisation de ressources hors-catalogue et participent donc à la maîtrise des coûts.
utilisez les principes du cloud
Lors du design des nouvelles applications et lors de la migration des applications existantes, utilisez tant que possible les apports du cloud : élasticité (mise à l'échelle automatique en fonction de la charge), services managés, et server-less computing qui peuvent contribuer à contenir les coûts.
Lorsque les infrastructures déployées sont stables (fraîches migrations, nouvelles applications), remplacez les instances à la demande par des instances réservées sur 3 ans pour diminuer significativement les coûts.
2. créez un poste de responsable des coûts
Créez un poste de responsable des coûts qui sera en charge :
- de tirer les rapports,
- d'affecter les coûts,
- de créer et donner les formations,
- d'établir des budgets,
- de s'assurer que les bonnes pratiques soient suivies,
- sera garants des droits d'accès,
- définira le catalogue de ressources avec les responsables d'infrastructures et des applications,
- challengera les équipes techniques à diminuer leurs coûts lors des revues de services.
Cette activité peut être confiée à un membre des équipes techniques, des achats ou de la finance suivant la structure de votre entreprise et son point de vue sur les coûts. Et elle peut facilement être cumulée avec d'autres tâches, ce qui évite la création d'un poste à plein temps.
Enfin, et pour conclure, tout n'est pas qu'une question de coûts : l'autre versant des coûts est le retour sur investissement, qui peut parfois être difficile à calculer, voire composé d'intangibles. Je reprends ici des éléments de mon article sur le TCO :
Selon Accelerate (*), les entreprises qui ont mis en place les méthodes devOps et les mécanismes Cloud, en moyenne (toutes tailles, industries et géographies confondues ) :
- déploient du code 46 fois plus fréquemment,
- ont un temps entre le "commit" et le déploiement du code 440 fois plus court,
- ont un temps de reprise après incident 170 fois plus rapide,
- ont un taux d'échec des changements IT 5 fois plus faible,
que les autres entreprises.
Je vous rappelle que si vous avez besoin d'aide pour effectuer votre analyse de TCO ou pour migrer dans le cloud, je me tiens à votre entière disposition pour vous assister.
(*) Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations (Forsgren PhD, IT Revolution Press) (lien Amazon vers le livre)