Simuler un projet Cloud avec Excel

Simuler un projet Cloud d’envergure nécessite en amont de travailler sur son “business case”. Au delà de la valeur du projet et des services que l’on va obtenir, simuler les aspects financiers est important certes, mais il vous faut les maitriser.

En effet, en raison du modèle Cloud ou le paiement est à l’usage (par exemple une VM peut être facturé à la minute, préservée à 1 ou 3 ans, ..) cela donne de nombreuses opportunités d’optimisations. Si je garde volontairement l’exemple d’une VM (mais ceci est identique pour tous les autres services), déplacer une VM sans changer les pratiques ne fait pas sens.

En suivant la logique du Cloud (financière et technique, comme par exemple arrêt des machines la nuit et le WE pour le dev test, réserver ses “instances” pour les 24x7) on perçoit l’ensemble des opportunités, mais aussi les nécessités d’adaptation de ces bonnes pratiques : on ne peut plus laisser “tourner” ses machines sur la base d’aucune logique technique, et on se doit très souvent de se demande si la puissance mise dans un service est la bonne.

Dans le cadre de mon rôle d’accompagnement de clients dans ces transformations digitales (et pas seulement des VMs), j’ai très souvent l’occasion de les aider à simuler ce type de projet, et voulais vous partager quelques bonnes pratiques et astuces sur l’approche d’analyse financière via Excel.

Pour cet article, et afin de bien comprendre la logique, prenons un projet classique de déplacement d’infrastructure dans Azure (appelé aussi “Lift and Shift”), et partons du principes - pour bien comprendre l’intérêt de cette approche - que nous avons 2000 Machines dans l’environnement source.

La complexité

Dans l’interface hyperv ou Vmware de votre environnement, vous avez la possibilité d’exporter facilement des informations intéressantes pour effectuer la simulation comme le nom de la machine, le nombre de cœurs, la RAM, etc. Même si ce n’est pas suffisant (nous affinerons tout cela à la fin de cet article) c’est un très bon départ.

Très simplement, ces données seront alors disponibles dans un simple fichier XLS. Disons que nous avons une structure comme ceci :

* Colonne A : le nom de la machine

* Colonne B: le nombre de cœurs

* Colonne C : la RAM

* Colonne D : Go utilisé pour les disques

Si l’on doit simuler une 10zaine de machines, c’est alors très simple de regarder dans la calculatrice Azure, trouver la machine la plus proche (CPU/RAM), et donc de créer une colonne “E”, contenant le type dans Azure.

Par exemple une “A2_V2”.

Mais dans notre scénario nous en avons 2000 !

Faut-il le faire à la main, ligne par ligne ? : humainement impossible.

CHALLENGE 1 : comment identifier pour 2000 machines (donc 2000 lignes) le bon type de machines dans Azure ?

Imaginons pour évoquer un second scénario, que cette colonne “E” est maintenant disponible (déjà remplie), comment alors sur ces 2000 Lignes indiquer le prix, et ensuite calculer les différentes hypothèses de travaille (paiement à la minute, instances réservées.. Windows ou Linux, valorisation AHUB).

CHALLENGE 2 : connaissant le type de machine, comment indiquer en colonne “F” le prix de celle-ci ?De plus, on peut migrer cette VM, la garder pendant quelques jours/semaines en “paiement à la minute”, puis après avoir figé sa configuration la passer en “instances réservées” vont baisser drastiquement le prix.

AUTRES CHALLENGES : de nombreuses autres options peuvent impacter votre simulation. Par exemple, si vous êtes propriétaire de licences Windows Serveur avec Software Assurance, vous payerez dans Azure le prix “Machine seule (Linux)” et non pas “machine + Windows”. Ce bénéfice est appelé AHUB, et la aussi va baisser le coût du projet.

Au regard de la liste des “Challenges”, on peut voir qu’il est impossible de réaliser cette tâche à la main : c’est long, chaque modification de la logique nécessite de refaire tout, et avec toute la bonne volonté du monde, c’est source d’erreur : humainement impossible.

Même si l’on peut utiliser des fonctions Excel comme RECHERCHEV, l’usage est très limité.

Par exemple, “rechercher le prix pour une A2_V2, prendre le prix Linux si il reste des usages AHUB, sinon prendre le prix Windows” : impossible avec ce type de Macro.

Nous devons donc utiliser quelque chose de plus adaptatif : faire un programme en VBA (Visual Basic pour Application).

Vous n’avez pas besoin d’être un développeur aguerri, juste de connaître quelques concepts de base en programmation.

Je vous partage maintenant la logique a travers quelques exemples.

Logique de calcul dans un programme VBA

Partons dans ce scénario sur la base d’un fichier XLS comme évoqué en amont (extrait HyperV ou Vmware).

1) ouvrez votre ficher XLS et sauvegardez le de nouveau mais avec l’extension “autorisant les macros” :

image

2) Dans le menu développeurs de Excel (à activer dans votre ruban, dans la section Option) vous voyez maintenant apparaître ce volet développeur, le fichier en cours d’utilisation, et dans “This Workbook” vous pouvez dans la partie droite créer une fonction.

image

Dans cette image, vous pouvez voir une fonction vide commençant par “Sub <nom>” et finissant par “End Sub”.

Passons maintenant au code.

Le premier exemple va balayer les lignes, sortir tous les “types” de machines et fabriquer le “code” VBA permettant par la suite de trouver le bon prix (nous utiliserons une fonction appelée CASE, permettant de lister une par une les hypothèse de type de machine).

Voici le code :

Sub ListeTypeMachines()
ToutesVMs = ""
For I = 3 To 2000
TypeMachine = Range("I" + Trim(Str(I)))
ret = InStr(1, ToutesVMs, TypeMachine)
If ret = 0 Then
'Type non déjà trouvé, on l'ajoute
ToutesVMs = ToutesVMs + vbCrLf + "case """ + TypeMachine + """"
Else
End If
Next I

MsgBox ToutesVMs

End Sub

Pour les non informaticiens, voici la logique

* Tout d’abord nous allons lire les unes après les autres les lignes du fichier Excel. Ceci est réalisé par une “boucle”. Le début est la ligne “For i=1 to 2000” (comprendre faire cela pour 2000 lignes) et la fin est le “Next I” (comprendre ligne suivante). Tout ce qui est entre les deux va être exécuté pour chaque ligne du fichier.

* On récupère dans la colonne “I” de la ligne en cours (I) la valeur. Ceci correspond en fait au type de machine. Maintenant nous avons une variable “TypeMachine” qui contient ce type au format texte (A1_V2 par exemple)

* Ensuite on ajoute dans une autre variable appelée ToutesVMs tous les “types” trouvés.

En fait, il être un peu fainéant, ce code va générer le “code” que nous allons ajouter dans la prochaine fonction.

Voici le résultat de cette première fonction :

Case "A2m_v2"

case "A1_v2"

case "A2_v2"

case "A4_v2"

case "D5_v2"

case "A4m_v2"

case "A8_v2"

case "A11"

case "A8m_v2"

case "D4_v2"

case "H16m"

case "D14_v2"

Maintenant passons à la macro 2, dans laquelle nous allons copier coller ce “code”, et ainsi enrichir avec des données détectées. Le but de la macro maintenant est de mettre à jour le fichier XLS, avec les bonnes valeurs dans la colonne “prix”. Ce “prix” peut résulter d’une certaine logique que seul du code peut traiter. Par exemple “si il me reste des AHUB le prix est celui Linux, si je n’en ai plus c’est le Prix Windows” :

Sub miseAjourPrix()

'Logique du code :
' 1) regarder ligne par ligne le fichier XLS (de ligne 3 à ligne 2000): For I=3 to 782 (ici de la ligne 3 à 782)
' 2) récupérer le type de machine se trouvant en colonne “I”
' 3) en fonction du type , déterminer le prix récupéré dans la calculette "En ligne", et inséré à la main dans cette fonction : Select CASE
' 4) ajouter en colonne J du fichier XLS le prix trouvé via la macro
' 5) injecter les différents prix pour comparaison à partir de la colonne AA : permet de comprendre les options.
'=> Calculette : tarifs sur :

https://azure.microsoft.com/en-us/pricing/calculator/

For i = 3 To 782

    TypeMachine = Range("I" + Trim(Str(i)))
'Prix amachine par minute, machine seule (Linux).. ou windows mais avec bénéfice AHUB (Software Assurange)
PrixLinux = 0
'prix machine par minute, machine + Windows
PrixWindows = 0
'Idem en Reserved Instance (RI) 1 an
PrixLinuxRI1 = 0
'Idem en Reserved instance 3 ans
PrixLinuxRI3 = 0
'Idem RI Windows 1 an
PrixWindowsRI1 = 0
'Idem RI Windows 3 ans
PrixWindowsRI3 = 0
Select Case TypeMachine
'Attention pas de Reserved Instance pour les séries "A"
'pas de RI pour les séries A
Case "A1_v2"
PrixLinux = 25.31
PrixWindows = 38.27
PrixLinuxRI1 = PrixLinux
PrixLinuxRI3 = PrixLinux
PrixWindowsRI1 = PrixWindows
PrixWindowsRI3 = PrixWindows

'RI disponible
Case "D5_v2"
PrixLinux = 651.86
PrixWindows = 1146.94
PrixLinuxRI1 = 371.61
PrixLinuxRI3 = 253.46
PrixWindowsRI1 = 825.94
PrixWindowsRI3 = 707.79

Case "??"
‘convention avec le client : si je ne sais pas quelle machine, ou si je ne sais pas elle devra bouger, le type est ??
PrixLinux = 0
PrixWindows = 0
PrixLinuxRI1 = 0
PrixLinuxRI3 = 0
PrixWindowsRI1 = 0
PrixWindowsRI3 = 0
Case Else
MsgBox "machine non trouvée : " + TypeMachine
pause = 1
End Select

'Maintenant on a le prix de la machine sur cette ligne

'On va mettre à jour le fichier XLS avec les bons prix

'Logique ci dessous : Prix Linux en reserved instance 3 ans.

‘colonne prix

Range("J" + Trim(Str(i))) = PrixLinuxRI3 * 12

‘Colonnes permettant d’ajouter toutes les autres hypothèses a titre indicatif.

Range("AA" + Trim(Str(i))) = PrixWindows

Range("AB" + Trim(Str(i))) = PrixWindowsRI1

Range("AC" + Trim(Str(i))) = PrixWindowsRI3

Range("AD" + Trim(Str(i))) = PrixLinux

Range("AE" + Trim(Str(i))) = PrixLinuxRI1

Range("AF" + Trim(Str(i))) = PrixLinuxRI3

Next i

'Fin du traitement.

MsgBox "fin"

End Sub

(J’ai volontairement retiré des CASE, pour ne pas alourdir le code).

Dans ce code j’ai mis “en dur” les prix. Il est évident que l’on pourrait rajouter quelques lignes afin d’aller chercher ces données directement via des API disponibles dans Azure. Mais faisons simple, nous ne sommes pas des experts en “développement”.

Ce code, pour traiter toutes les lignes va prendre quelques secondes : combien de temps cela prendrait-il pour le faire à la main ?

De plus, comme on peut changer ses hypothèse (plus ou moins de lignes (de machines), changer le type de VM dans Azure)… on doit relancer ce traitement assez souvent : impossible à la main.

Exemple de nouvelle hypothèse : client a le droit à 300 AHUB.

Etre capable de décrémenter ligne par ligne les bénéfice, et jusque 0 donner le prix Linux et non Windows, nécessite forcément de passer par du code.

Avant de conclure, je reviens sur une des hypothèses : comment faire pour remplir la colonne du type de machine Azure ? A la main et ligne par ligne ? : certainement pas.

En fait il s’agit du même algorithme que pour calcule le prix (pour chaque ligne, faire qqchose sur la base de “CASE”).

Il faut juste récupérer la colonne coeur et RAM, et faire des If du type “If CPU=2 and RAM=4 then machine=”A2V2”.

Vous avez maintenant les bases pour faire ce traitement et surtout être autonome. Un projet Cloud implique impérativement la compréhension du modèle de prix, et vous devez impérativement – en tant qu’architecte – maitriser au quotidien ce mode de fonctionnement lorsque vous bâtissez vos infrastructure.

Ne pas oublier : outils et optimisations

Dans cet article, je parle de AHUB et aussi des Reserved Instances. Vous devez impérativement connaître ces bénéfices car ils réutilisent vos investissements passés et optimisent vos coûts.

Microsoft met à disposition de ses clients des outils puissants pour les phases d’assessment, de migration et également de consolidation : https://azure.microsoft.com/fr-fr/migrate/virtual-machines-migration/

Dans la liste des solutions à utiliser en parallèle de cette simulation financière vous avez :

Azure Migrator : la solution va analyser un hyperviseur, les machines qui s’exécutent et répondre à plusieurs questions : quel type de machine il vous faut sur azure (sur la base de l’usage, et pas seulement du couple CPU/RAM), les machines éligibles à la migration (si il y a des incompatibilités, vous indiquer comment les régler)

Azure Log Analytics : permet d’analyser la bonne santé de vos serveurs, le respects de recommandations (AD, SQL, sécurité), le patch management, la cartographie applicative, le réseau).

Bonne mise en œuvre !