Je n’apprendrai à personne que le mode de consommation du Cloud Computing est basé sur la consommation de vos ressources, ce qu’on appelle le Pay As You Go (PAYG), c’est d’ailleurs l’un de ses avantages.
L’une des bonnes pratiques avant de déployer dans le Cloud, est évidemment d’estimer les coûts des ressources que vous aller déployer, tout simplement pour avoir une idée approximative, de ce qu’elles vous couteront. Le problème c’est que l’estimation est rarement réalisée.
Du coup, pour certaines entreprises, les coûts explosent et il peut être difficile de savoir par où commencer pour tenter d’inverser la tendance.
Il n’est pas rare, également, que certaines d’entre elles, après une mauvaise expérience sur l’aspect financier, décident de tourner le dos au Cloud public, l’estimant trop cher.
D’autres vont définir des règles strictes, et parfois trop strictes, qui vont à l’encontre de l’innovation, ce qui peut pénaliser le quotidien des équipes Innovation et R&D.
Pour éviter cette situation, voyons ensemble, les leviers qui vous permettront de réduire votre facture Azure, grâce à l’implémentation de principes FinOps, qui est la contraction de Finance et Opération.
La Fondation FinOps définit le FinOps comme :
Une discipline et une pratique culturelle de gestion financière dans le cloud en évolution qui permet aux organisations d’obtenir une valeur commerciale maximale en aidant les équipes d’ingénierie, de finance, de technologie et d’affaires à collaborer sur des décisions de dépenses basées sur les données.
Comme tout fournisseur Cloud, Azure propose plusieurs services et solutions afin de réduire votre emprunte financière, et faire en sorte que les coûts associés à vos ressources ne soient plus un frein à l’adoption du Cloud.
Azure Calculator
Je l’évoquais en préambule, pour éviter les mauvaises surprises et découvrir le coût des ressources déployées, à la réception de votre facture, l’une des bonnes pratiques est d’estimer à l’avance vos coûts.
Alors je vous vois venir, une estimation reste une estimation, mais cela peut vous donner un ordre d’idée sur le budget d’une application ou d’un projet.
Imaginons que le business souhaite déployer un nouveau service permettant de commander des plats à emporter. Evidemment une fois que vous avez récoltés les différents éléments, comme les besoins, les contraintes techniques, légales, et financières, vous pouvez passer à la phase de définition de votre architecture. Une fois définie, il sera temps de l’estimer, car il est fort à parier que le business ne vous donnera pas un chèque en blanc.
C’est à ce moment précis que Azure Calculator prend tout son intérêt.
Pour estimer le coût de vos services, il suffit de les sélectionner dans la liste et de saisir leur configuration que vous envisagez.
Evidemment plusieurs paramètres entrent en considération pour l’estimation, et certains ne sont pas faciles a établir comme le trafic entrant/sortant au niveau de votre application, la bande passante, ou le stockage nécessaire, mais on ne souhaite pas avoir un montant précis, ce qui est impossible à obtenir, mais un ordre de grandeur.
N’hésitez pas à vous faire accompagner d’un Architecte Cloud, qui aura définit la solution, pour vous rapprocher le plus possible d’une estimation cohérente.
Et comme le disait Léonard de Vinci :
Ne pas prévoir, c’est déjà gémir.
Supprimer des ressources inutilisées/orphelines
Un autre moyen de réduire simplement votre facture, est de supprimer les ressources que vous n’utilisez pas.
Gardez en tête que vous êtes facturé même lorsque vous n’utilisez pas un service. Il faut donc faire la chasse aux ressources non utilisées.
Alors au premier abord cela parait simple, lorsque vous avez une équipe réduite qui déploie les ressources, mais imaginez, lorsque vous êtes dans une grande organisation avec des dizaines, voir des centaines de personnes qui déploient des ressources quotidiennement, là, cela devient un vrai casse tête.
Une autre bonne pratique à mettre en place sur Azure est de tagger vos ressources. Les tags permettent d’ajouter des informations sous forme de clés/valeurs, afin d’identifier par exemple, le propriétaire d’une ressource, la personne qui l’a déployé, ou bien encore le projet auquel est rattaché cette ressource.
A défaut de savoir si la ressource est encore utilisée, vous pourrez, à minima, vous rapprocher du propriétaire de la ressource ou de celui qui l’a déployé afin d’obtenir les informations nécessaires, et voir si vous pouvez faire du ménage.
Pensez à également supprimer les différentes ressources orphelines.
Par ressources orphelines, j’entends celles qui ne sont attachées à aucun service mais pour lesquelles vous êtes toujours facturés. Cela peut être des disques de VMs, des adresses IPs publiques, ou encore des App Services Plan, qui vous sont facturés bien que ces ressources ne soient plus utilisées.
Voici par exemple la commande pour lister les disques durs non associés :
Get-AzDisk | where-object {$_.Diskstate -eq ‘Unattached’}
Ou encore la commande pour lister les adresses IPs publiques non associées à une ressource :
Get-AzPublicIpAddress | Where-Object {$_.IpConfiguration -eq $null}
Il peut être intéressant de réaliser un script, qui s’exécute périodiquement pour supprimer ces ressources inutilisées.
Arrêt et démarrage de vos VMs
Pour celles et ceux qui utilisent des VMs, l’une des solutions assez simple à mettre en place pour réduire votre facture est l’arrêt et le démarrage de vos ressources.
Si on fait un parallèle avec votre électricité, surtout en ces périodes plus que compliquées, lorsque vous n’êtes pas chez vous, vous éteignez vos lampes, et bien c’est pareil avec Azure et le Cloud en général.
Alors vous allez me répondre, oui mais je fais comment avec mes VMs de Production ?
Et bien justement, notre cible n’est pas forcément l’environnement de Production mais les autres, comme l’environnement de Développement, de Recette, d’UAT, de Staging, … Il est à peu près certain que les VMs de ces environnements n’ont pas à être allumées en permanence, on peut donc envisager de les arrêter la nuit et même le weekend. Et mine de rien, ce sont des coûts non négligeables que vous pouvez éliminer.
Bien entendu, il est possible d’arrêter et redémarrer les VMs de manière automatique, soit directement au niveau de la VM pour l’arrêt avec l’option Auto-Shutdown. Evidemment, le démarrage peut aussi s’automatiser un compte Automation, au travers de modèles qui se basent sur les fameux tags, réduisant considérablement vos efforts.
Dimensionner correctement vos ressources
Vous n’êtes pas sans savoir, que sur de nombreux services Azure, le prix est en partie calculé, en fonction de la quantité de ressources attribuées comme le calcul, le réseau, et le stockage. Ainsi, plus il y a de ressources, plus le prix est élevé.
Il faut donc être vigilant pour dimensionner correctement vos ressources, en fonction du service, ou des besoins que vous avez.
Il est ainsi, inutile, de provisionner 8vCPU et 16Go de Mémoire pour héberger un serveur Web sur une VM, ou bien prévoir un cache de 26Go de mémoire pour un Azure Cache for Redis, si vous n’avez que 4Go de données à stocker !
Prenons un nouvel exemple concret, je travaille à 10km de chez moi. J’ai le choix entre une petite voiture électrique, et un gros 4×4 diesel, évidemment j’opte pour la petite voiture car c’est elle qui semble la plus adaptée à mon besoin.
Sur Azure c’est pareil, dimensionnez vos ressources en fonction de leur utilisation.
Vous pouvez évidemment, prévoir une marge supplémentaire qui sera utilisée lors de pics supplémentaires de charges de travail.
Versions de types d’instance de VMs
Azure vous propose, également, différents types d’instances de VMs comme l’usage général, la mémoire optimisée, le calcul haute performance pour ne citer qu’eux, avec leurs déclinaisons selon les ressources dont vous avez besoin, en fonction de vos charges de travail.
Mais ce n’est pas tout. Nous parlons de Cloud Computing avec Azure, les services proposés sont hébergés sur des serveurs physiques. Ces serveurs physiques sont disposés en racks, et ces racks sont stockés dans les Datacenter de Microsoft. Et comme tout matériel physique, il faut évidemment le maintenir, mais aussi le remplacer en cas de pannes.
Et bien sachez que lorsque les équipes Microsoft ajoutent du matériel ou remplacent le matériel obsolète ou défectueux, ce nouveau matériel est en général plus puissant, et plus accessible financièrement que celui installé précédemment. (Evidemment, cela vaut lors de périodes économiques stables, pas comme aujourd’hui avec un contexte de guerre en Europe de l’Est, mais aussi avec la pénurie de composants électriques, ou l’explosion des prix liés à l’énergie comme c’est le cas en ce moment).
C’est ainsi qu’apparaissent de nouvelles versions de types d’instance, suffixées en v2, v3, v4, v5, et bien en période normale, les versions les plus récentes offres des tarifs plus intéressants que les anciennes.
Et ce n’est pas tout car vous pouvez également trouver de temps à autres des types d’instances en Promo sur une période de temps limitée qui sont en général sur du matériel qui sera décommissionné.
Azure VM Spot
Microsoft propose aussi, d’utiliser la capacité de calcul inutilisée à un instant T, pour réaliser des économies pouvant aller jusqu’à 90% des prix publics sur les VMs, avec la fonctionnalité Azure VM Spot.
Comment cela fonctionne exactement ?
Il arrive par moment, que l’infrastructure d’Azure ne soit pas complètement utilisée, et plutôt que de voir son Infrastructure non utilisée, Microsoft a décidé de proposer cette puissance de calcul à un prix inférieur.
Je vois déjà pointer une question sur le bout de vos lèvres « Qu’est-ce qui se passe quand Azure à de nouveau besoin de cette puissance de calcul ? »
C’est simple, en fonction de la configuration que vous aurez définie, soit votre VM s’arrête, soit elle est supprimée.
Sachez que vous pouvez même définir un prix plancher, en dessous du prix public, que vous êtes prêt à payer. Une fois ce prix atteint, soit votre VM s’arrête, soit elle est supprimée.
Si vous envisagez d’utiliser cette option, vous pouvez vous aider de Azure Resource Graph qui vous permettra d’obtenir l’historique des prix lors des 90 derniers jours et les taux d’éviction au cours des 28 derniers jours et ainsi vous aider à définir ce prix.
Alors vous l’aurez compris, les VMs Spots, ne peuvent pas être utilisées pour tous types de scénarii, et encore moins pour les environnements critiques ou de production.
En revanche, elles s’appliquent parfaitement aux cas d’usage des charges de travail capables de gérer les interruptions, comme les travaux de traitement par lots, les environnements de développement, de tests, entre autres.
Une notification 30 secondes avant l’éviction de votre VM, est envoyée au système afin de le prévenir et anticiper l’arrêt ou la suppression de celle-ci.
La fonctionnalité, Azure VM Spot, s’applique aux VMs Linux, Windows, ainsi qu’au service Virtual Machine Scale Set (VMSS).
Le prix varie en fonction des régions
Autre facteur qui interfère sur le prix d’un service, c’est la région dans laquelle il est déployé.
Mais comment cela s’explique ?
Le prix d’un service est évidemment calculé sur le coût du matériel sur lequel il s’exécute, mais d’autres paramètres rentrent en considération comme :
- Le coût du travail du pays où est implanté le Datacenter
- Le coût de l’énergie qui permet le fonctionnement du Datacenter
Mais d’autres éléments peuvent influer sur le prix, comme :
- Les aides financières accordées par certains pays pour favoriser l’implantation
- Le contexte économique national, ou mondial
- Mais aussi la stabilité géopolitique d’une région
Alors évidemment ce facteur ne doit pas être celui qui définit la région dans laquelle vous allez déployer votre application, mais au moins maintenance vous savez qu’un service n’a pas le même coût si il est déployé aux US ou au Brésil.
Les mécanismes de mise à l’échelle
La mise à l’échelle ou autoscaling en Anglais, est ce qui permet à un service ou une application de s’adapter à un pic de trafic, de requêtes, de consommation CPU/mémoire, en provisionnant de nouvelles ressources pour absorber ce surplus de charge de travail.
Deux modes de mise à l’échelle existent :
- La mise à l’échelle horizontale ou scale-out, c’est lorsqu’on provisionne de nouvelles instances d’un service ou d’une application. Cela peut être une mise à l’échelle manuelle ou automatique.
- La mise à l’échelle verticale ou scale-up, c’est lorsqu’on augmente les capacités d’une instance existante. Cette action est généralement manuelle, car elle peut entrainer une interruption de service, notamment au niveau des VMs.
Le choix du mode de mise à l’échelle, dépendra de votre application.
Le scale-out est généralement utilisé, lorsque l’application est dite sans état ou stateless, c’est à dire qu’elle ne stocke pas de données applicatives au niveau de l’instance qui exécute la charge de travail.
A l’inverse, le scale-up est utilisé lorsque des données sont stockées au niveau de l’instance on parle alors d’application avec état ou statefull.
Voici un lien qui expliquera davantage la différence entre une application stateless et une application statefull.
Evidemment, la mise à l’échelle horizontale peut être manuelle, mais bien souvent automatique. Cette dernière s’appuie sur des critères que vous définissez en amont, comme par exemple, une règle qui va déployer deux nouvelles instances de votre application, si le CPU moyen est supérieur à 70% lors des dix dernières minutes.
Mais le plus intéressant, c’est qu’on peut également définir des règles pour dé-provisionner, c’est-à-dire supprimer des instances sur le même principe, mais pour les applications stateless évidemmet. Ainsi lorsque le CPU moyen sera inférieur 40% sur les quinze dernières minutes, on pourra supprimer une instance. Et comme aucune donnée n’y est stockée, cela n’a aucun impact sur votre application.
D’autres critères sont disponibles, comme la planification horaire pour ajouter ou supprimer le nombre d’instances. Ce critère peut être utilisé si vous êtes capable d’identifier votre trafic en amont, avec par exemple les serveurs de jeux vidéo, qui sont davantage prisés, le soir et les week-end, ce qui n’est pas le cas en pleine journée de semaine.
Bref, les mécanismes de mise à l’échelle, sont de précieux alliés dans la quête de réduction des coûts, à condition que vous définissiez les bons seuils de déclenchement, et tout cela bien sûr, sans impacter le niveau de service de votre application.
Les Reserved Instances
L’un des leviers les plus utilisés pour maitriser vos coûts dans Azure, est sans doute celui des Reserved Instances ou RI.
L’idée, toute simple, est de s’engager contractuellement sur une période de 1 à 3 ans sur l’utilisation d’un service, afin de bénéficier de remises très importantes, pouvant parfois atteindre plus de 70% du prix initial sur certains services.
Evidemment, plus la période d’engagement est longue, plus les réductions sont intéressantes.
Ainsi en effectuant une réservation, cela ne sera plus le prix public qui vous sera facturé, mais le nouveau prix « négocié » qui dépendra de votre engagement.
Plusieurs services sont aujourd’hui disponibles pour les réservations, comme les VMs, les bases données (SQL, MySQL , PostgreSQL, Redis), des ressources de calculs mais aussi du stockage.
Attention tout de même lors de la mise en place de réservations. Comme vous vous engagez sur une période de 1 à 3 ans, veillez à ce que la réservation couvre un service dont la durée de vie, sera supérieure à votre engagement, car une fois la réservation effectuée, vous payez même si votre ressource n’est pas utilisée.
Azure Hybrid Benefit
Azure Hybrid Benefit est une solution qui vous permet d’utiliser vos licences existantes, comme Windows Server, Microsoft SQL, mais aussi Red Hat Enterprise Linux (RHEL) ou encore SUSE Linux Enterprise Server (SLES), pour réduire considérablement vos coûts de licences de vos VMs hébergées sur Azure, mais aussi sur le service SQL Database.
Comment ça marche concrètement ?
Sur la partie Windows Server ou Windows SQL (sur VM ou sur SQL Database), il faut posséder l’une des licences mentionnées ci-dessous pour pouvoir en bénéficier sur Azure :
- Windows Server Datacenter Edition avec Software Assurance.
- Windows Server Standard Edition avec Software Assurance.
- Licences SQL Server Enterprise Edition Core avec Software Assurance ou licences d’abonnement éligibles.
- Licences SQL Server Standard Edition Core avec Software Assurance ou licences d’abonnement éligibles.
Microsoft décrit la Software Assurance comme étant « Un programme complet qui inclut un ensemble de technologies, de services et de droits uniques pour vous permettre de déployer, gérer et utiliser les produits Microsoft de manière efficace ».
L’idée est aussi de vous permettre de déplacer certaines charges de travail sur Azure, car la Software Assurance, propose 180 jours d’utilisation simultanée entre Azure et votre environnement On-Premise, ce qui est super pour réaliser une migration tout en douceur.
Le principe est à peu de chose près similaire pour RHEL et SUSE en venant sur Azure avec vos propres licences.
De plus, lors du Microsoft Ignite qui s’est déroulé du 12 au 14 Octobre 2022, Microsoft a même étendu Azure Hybride Benefit en offrant la possibilité de déployer le service Azure Kubernetes Service sur Windows Server et Azure Stack HCI sans frais supplémentaires dans vos environnements On-Premise si vous possédez une Software Assurance.
Et le top du top, c’est qu’il est en plus possible de combiner Azure Hybrid Benefit et les Reserved Instances, pour réduire davantage vos coûts.
Azure savings plan for compute
Toujours au cours de ce même Microsoft Ignite, Microsoft annonçait une nouvelle façon d’optimiser vos coûts, avec le service Azure savings plan for compute.
Ce dernier et qui comme son nom l’indique, ne concerne que les ressources de calcul, est un engagement à dépenser, un montant horaire fixe, sur une période de 1 à 3 ans comme pour les réservations. D’ailleurs il est possible de le combiner avec les Reserved Instances mais aussi avec Hybrid Benefit.
Selon la documentation Microsoft avec un engagement sur 3 ans, Azure savings plan for compute pourrait vous permettre de réduire vos coûts jusqu’à 65% par rapport aux prix publics.
Prenons un exemple concret, dans lequel vous optez pour un montant horaire de 5€ par heure. Si vous dépassez ce montant de 5€, les coûts supplémentaires seront calculés sur les prix publics. A l’inverse si vous n’utilisez pas suffisamment de puissance de calcul pour atteindre vos 5€, alors vous paierez tout de même les 5€.
Mais ce qui est intéressant ici, c’est que ce montant, que vous avez défini, ne s’applique pas à une seule ressource, mais à l’ensemble de vos services exécutant des ressources de calculs, avec une petite limitation tout de même, les services pris en charge.
A l’heure où nous écrivons ces quelques lignes, Azure savings plan for compute s’applique sur l’ensemble de vos ressources déployées mondialement pour les services ci-dessous :
- Azure VM
- Azure Container Instances
- Azure Functions pour les plans Premium
- Azure App Service
- Et Azure Dedicated Host
Donc si je reprends mon exemple précédent, mes 5€ seront alloués pour l’ensemble de mes ressources utilisant les services ci-dessus.
Azure DevTest Lab
Comme vous le savez, l’un des avantages du Cloud est aussi de pouvoir rapidement tester un service ou une fonctionnalité en déployant ce dont vous avez besoin. Il est par exemple très simple et rapide de déployer des environnements identiques, qui peuvent être destinés à des sessions de formation ou du training.
Alors dans ces cas précis, nous n’allons pas vraiment pouvoir réduire les coûts associés aux ressources déployées, mais surtout pourvoir les contrôler.
Azure DevTest Lab, vous permet de déployer des ressources, parmi un référentiel existant, qui peuvent être des VMs Linux, Windows, des App Service, des bases de données Oracle ou SQL ou encore des instances Dynamics pour ne citer qu’elles. Evidemment vous pourrez si vous le souhaitez, déployer vos propres images.
Je parlais tout à l’heure du contrôle des coûts. Si je reprends mon exemple de formation, nous allons pouvoir par exemple définir le type d’instance à déployer, ou encore leur nombre. Ce qui est intéressant, c’est que vous pouvez planifier l’arrêt et le démarrage, que nous avons évoqué un peu plus tôt, mais aussi une date d’expiration.
Cette date d’expiration, permettra de supprimer automatiquement les ressources, une fois la date atteinte, et ainsi éviter d’avoir des ressources non utilisées pour lesquelles vous serez facturés en cas d’oubli de suppression.
Azure Cost Management + Billing
Azure Cost Management + Billing est une suite d’outils qui vous aident à analyser, gérer et optimiser les coûts de vos charges de travail très simplement.
Nous avons évoqué précédemment l’intérêt des tags, et bien vous pourrez ici, identifiez le coût de vos ressources par tag, par type de ressources ou encore par ressource groupes par exemple.
Vous avez déjà reçu une facture Azure. On est d’accord, ce n’est pas toujours simple à déchiffrer, et bien Azure Cost Management + Billing, va vous aider à raccrocher les wagons.
Il vous offre également la possibilité de créer des budgets, mensuels, trimestriels ou annuels et recevoir des alertes lorsqu’un seuil que vous aurez configuré est atteint.
Bien évidemment si le budget est dépassé, aucune ressource ne sera arrêtée ou supprimée, nous sommes ici sur un système de notifications.
C’est également Azure Cost Management + Billing qui vous permettra de récupérer vos factures, et de visualiser les informations concernant les sujets de Reserved Instances, Hybrid Benefit et Azure savings plan for compute.
Bref, c’est LE service qui vous permettra de suivre vos coûts Azure.
Azure Advisor
Un autre service qui peut vous aider à réduire votre facture est Azure Advisor.
Ce dernier vous propose des recommandations sur les bonnes pratiques à mettre en œuvre sur différents aspects :
- Les coûts
- La sécurité
- La fiabilité
- L’excellence opérationnelle
- Les performances
Concentrons nous, sur ce qui nous intéresse aujourd’hui, à savoir les coûts.
Vous retrouverez des recommandations pour vous aider à optimiser et à réduire vos coûts en identifiants les ressources inactives, les ressources surdimensionnées ou celles pour lesquelles, les Reserved Instances pourraient être envisagées.
Pour cela, Azure Advisor, s’appuie sur l’historique d’utilisation de vos ressources et des métriques associées, afin de vous proposer la meilleure solution. Il faut donc un minimum d’utilisation avant que les recommandations soient pertinentes.
En plus, vous pouvez modifier les critères de base sur lesquels, il s’appuie afin d’obtenir des conseils qui correspondent encore davantage à votre activité.
Une architecture cohérente
Il peut arriver parfois, que des architectures proposées ou définies, soient disproportionnées pour un besoin simple.
Prenons l’exemple d’une BU qui souhaite créer un nouveau micro-service qui tourne sur le framework .Net 6 pour héberger une API :
- Après une analyse rapide de son côté, l’architecte applicatif estime que le service AKS est idéal pour héberger son besoin son besoin.
- En tant qu’architecte Cloud, la première chose, est de comprendre le besoin et les contraintes de la BU pour la challenger.
- Après différents échanges, il s’avère que les points critiques pour la BU, sont la scalabilité de la plateforme, ainsi que les déploiement de nouvelles versions de son API.
- L’architecte Cloud peut ainsi challenger le service AKS, en proposant l’utilisation d’une Azure App Service en mode container, qui répond à la scalabilité avec la prise en charge native du scale-out, mais aussi de la livraison de nouvelles versions de l’API, avec la prise en charge de slots de déploiement qui vont éviter les interruptions de services au cours des livraisons.
Bref, l’idée est toujours de faire au plus simple en fonction des inputs du client pour concevoir l’architecture dont il a besoin, et pas celle qui fait rêver, ou qui est « sexy », et qui va entrainer des coûts qui ne sont finalement pas légitimes.
Se faire accompagner par un partenaire
Et si vous n’êtes pas en mesure de challenger vos interlocuteurs, n’hésitez pas à vous faire accompagner d’un partenaire, qui pourra d’une part challenger, mais d’autre part, réaliser une analyse complète afin de vous aider à réduire votre facture.
Chez Grow Una, nous accompagnons nos clients sur l’écosystème Azure, sur différents niveaux d’expertise :
- L’accompagnement au quotidien
- La définition d’architecture
- Déploiement et MCO de vos environnements Cloud
- Migration de votre patrimoine applicatif vers Azure
- Formation Azure ou la montée en compétence de vos équipes
- Tout en implémentant les méthodologies DevOps et les principes FinOps.