Nouveau Azure File Share

Vous avez vu passer l’annonce Microsoft parlant d’une file share comme une ressource Azure de premier niveau et vous vous dites : mais attendez, les partages de fichiers existent depuis des années dans Azure, où est la nouveauté ? Cet article est fait pour vous. On va partir du modèle historique : le compte de stockage pour dérouler ce que change vraiment le nouveau provider Microsoft.FileShares, passé en GA en 2026, et surtout vous aider à trancher : vous migrez, ou pas encore ?

Azure Files introduit une nouvelle expérience de gestion des services de partage de fichiers, désormais généralement disponible, dans laquelle les partages sont déployés en tant que ressources Azure indépendantes et de niveau supérieur via le Microsoft.

Chaque partage de fichiers a des performances dédiées, la sécurité, la mise en réseau et la facturation, ce qui permet une meilleure isolation, des performances prévisibles et un suivi précis des coûts.

L’expérience améliore également considérablement la mise à l’échelle et l’efficacité, prenant en charge jusqu’à 10 000 partages par abonnement par région, un provisionnement plus rapide et une automatisation native cloud via des modèles ARM, des Bicep et des flux de travail CI/CD.

Il est actuellement disponible pour les partages NFS 4.1.

Source : Microsoft Learn

Pour vous guider plus facilement dans cet article, voici des liens rapides :

1. Le malentendu : un type file share existe déjà

C’est la première confusion qu’il faut lever, parce qu’on l’entend partout : « des partages de fichiers, Azure en propose depuis longtemps ». Vrai… et faux. Jusqu’ici, le partage de fichiers n’a jamais été une ressource Azure à part entière. C’était toujours un objet enfant, créé à l’intérieur d’un compte de stockage. La ressource Azure, celle que vous voyiez dans votre groupe de ressources, c’était le compte de stockage et pas le partage :

Cette nuance n’est pas de la sémantique : c’est elle qui explique 90 % des frictions qu’on va voir. Tant que le partage était un sous-objet, il héritait de tout ce qui appartenait au compte. Le nouveau modèle casse précisément cet héritage.

2. Avant : tout partait du compte de stockage

Pour rappel, jusqu’ici le schéma était le suivant : vous créiez un compte de stockage, vous choisissiez un SKU (général avec blobs/queues/tables, ou un SKU dédié file storage), puis vos partages SMB ou NFS sous ce compte. Tout partait de là, et c’est là que les ennuis commençaient.

  • Les limites sont partagées. IOPS, capacité provisionnée, débit : c’est le compte qui porte les plafonds, et tous les partages se les répartissent. Un partage gourmand peut pénaliser les autres.
  • Le control plane aussi est mutualisé. Créer, modifier, supprimer des partages, gérer les snapshots : ces opérations tapent dans des quotas au niveau du compte. À plusieurs administrateurs sur le même compte, ça devient un point de contention :
  • Le réseau est hérité. C’est le compte de stockage qui porte la configuration réseau. Vos private endpoints, vos règles, vous les héritez du compte, donc pas de granularité par partage :
  • La facturation est au niveau du compte. Bon courage pour faire du showback / chargeback propre par partage : il faut décortiquer une facture agrégée :
  • La clé de compte est toute-puissante. La fameuse account key donne accès à tout ce qui vit dans le compte de stockage. Côté sécurité, c’est un secret à très large rayon d’action :
Le piège classique : au moment de créer un compte de stockage, le nombre d’options (SKU, type, redondance, protocoles…) est tel qu’on ne sait plus exactement ce qu’on configure. Beaucoup de comptes finissent surdimensionnés ou mal typés « au cas où ».

3. Après : Microsoft.FileShares, ressource de premier niveau

Concrètement, ça donne quoi ? Microsoft introduit un nouveau provider de ressources, Microsoft.FileShares, et avec lui un nouveau type de ressource top-level : le partage de fichiers lui-même. Pas d’enfant, pas de parent compte de stockage. Vous créez directement un file share dans un groupe de ressources et un abonnement, vous lui donnez un nom, et c’est tout.

Nous annonçons la mise à disposition générale d’une nouvelle expérience de gestion des services pour les partages de fichiers SSD Premium (NFS), qui permet de créer, sécuriser, faire évoluer et facturer chaque partage de fichiers de manière indépendante, sans être lié à un compte de stockage.

  • Gestion familière et intuitive des partages de fichiers : l’expérience utilisateur s’aligne sur les modèles des NAS et des serveurs de fichiers sur site, ce qui améliore la convivialité par rapport au modèle classique.
  • Infrastructure-as-Code : définissez la nomenclature, la capacité, les IOPS, la mise en réseau, les balises et la sécurité dans des modèles Bicep ou ARM pour une automatisation simplifiée avec vos outils DevOps préférés.
  • Évoluez en fonction de la charge de travail : prise en charge de jusqu’à 10 000 partages de fichiers par abonnement et par région, avec une expérience de provisionnement des partages de fichiers 2,5 fois plus rapide.
  • Sécurité et réseau au niveau des partages : restrictions réseau, instantanés et chiffrement limités au partage individuel, ce qui permet de faire correspondre les limites d’isolation aux limites de la charge de travail.
  • Visibilité des coûts par partage : les compteurs de facturation s’affichent sous la ressource de partage de fichiers, ce qui permet aux équipes d’effectuer des refacturations précises, de suivre les coûts par charge de travail et d’améliorer la refacturation sans avoir recours à des solutions de contournement.

Source : Microsoft Techcommunity

Au jour du GA, le périmètre est volontairement resserré :

  • Tier SSD uniquement
  • Protocole NFS 4.1 uniquement
  • Facturation alignée sur le modèle provisioned v2 SSD
  • Côté résilience, vous choisissez LRS ou ZRS
  • Capacité, IOPS et débit se provisionnent indépendamment

Azure file share using Microsoft.FileShares is now generally available… shares are deployed as independent, top-level Azure resources through the Microsoft.FileShares resource provider, removing the dependency on storage accounts.

Source : Microsoft Learn

4. La démo : on crée un partage, écran par écran

Assez de théorie, passons aux mains dans le cambouis. Le mieux pour comprendre ce qui change, c’est de dérouler la création d’un partage dans le portail. Vous allez voir : il n’y a plus jamais le mot « compte de stockage » dans le parcours.

Étape 0 : Le nouveau point d’entrée « File shares »

Depuis l’accueil du portail, vous cherchez directement File shares. C’est un hub à part entière, qui liste vos partages comme des ressources autonomes :

Étape 1 : Les bases : abonnement, groupe de ressources, nom

On clique sur Create. Et là, surprise par rapport au monde d’avant : on vous demande un abonnement, un groupe de ressources et un nom de partage. Point. Exactement comme pour n’importe quelle ressource Azure de premier niveau :

Étape 2 : Tier, protocole et résilience

Au GA, le choix est volontairement cadré : tier SSD et protocole NFS 4.1 imposés. La seule décision de résilience se fait ici, au niveau du partage : LRS (redondance locale) ou ZRS (redondance inter-zones) selon la région Azure choisie :

Étape 3 : Le cœur du sujet : capacité, IOPS et débit séparés

C’est l’écran le plus important. Vous provisionnez la capacité, les IOPS et le débit de façon indépendante. Plus de « budget commun » réparti entre tous les partages du compte : ce que vous réglez ici, ce sont les limites de ce partage, et de lui seul :

Le Calculateur de prix Azure vous permet de travailler ces valeurs, tout en mesurant l’impact sur le prix :

Étape 4 : L’onglet Advanced : root squash, chiffrement et nom de montage

C’est l’onglet qu’on a tendance à survoler, et c’est dommage, parce qu’il porte trois réglages qui changent la vie côté NFS :

  • Protocol → Root squash. C’est le mapping de l’identité root côté client NFS. Vous choisissez entre no root squash, root squash et all squash selon le niveau de confiance que vous accordez aux clients qui montent le partage.
  • Security → Require encryption in transit. Vous imposez le chiffrement du flux entre le client et le partage. À garder activé sauf raison impérieuse.
  • Other → Mount name. Vous donnez au partage un nom de montage différent du nom de la ressource Azure. Pratique pour garder des chemins de montage propres côté clients NFS sans vous imposer la convention de nommage Azure.
Mon retour terrain : le Mount name est le petit réglage que je règle systématiquement. Découpler le chemin de montage du nom de la ressource Azure vous évite de trimballer une convention de nommage cloud jusque dans vos fstab et vos scripts. Vos clients NFS gardent des chemins courts et lisibles.

Étape 5 : Le réseau, au niveau du partage

Autre changement de fond : la configuration réseau se fait ici, pas sur un compte parent. Vous décidez pour ce partage s’il est exposé en public endpoint ou enfermé derrière des private endpoints. Chaque partage a donc sa propre posture réseau :

Étape 6 : Review + create, le moment de vérité

On valide, on crée. Et là, magie : le partage apparaît dans le groupe de ressources comme une ressource Microsoft.FileShares à part entière, avec ses propres tags, son propre coût, son propre control plane :

Aucune clé de compte à aller récupérer quelque part, parce qu’il n’y en a tout simplement pas :

Du côté des performances et de la taille, tout est toujours rectifiable :

Et c’est là que le bât blesse. Du côté de la sauvegarde, un menu Snapshots est bien présent, mais il ne permet que des déclenchements manuels :

Plus inquiétant : le service de sauvegarde Azure Recovery Services vault ne le voit même pas :

Même chose pour les Backup vaults, qui ne sauvegardent pas ce type de stockage :

Et même le service Resiliency ne le détecte pas :

Attention ! la sauvegarde, c’est LE gros angle mort du GA : côté protection des données, on est à l’os. Le menu Snapshots existe, mais en déclenchement manuel uniquement : pas de planification, pas de rétention automatique. Pire, la ressource est invisible pour Azure Backup, ni le coffre Recovery Services, ni les Backup vaults ne la voient et elle n’apparaît même pas dans Resiliency. Autrement dit : aucune sauvegarde managée au GA. Si votre donnée a la moindre valeur, prévoyez votre propre stratégie (snapshots scriptés + copie hors-partage) en attendant que Microsoft branche la protection native.

Étape 7 : On monte le partage : la lame Connect

Mais avant d’aller plus loin dans la connexion, l’intégration réseau est obligatoire :

Mon réseau est à présent configuré sur celui de ma machine Linux via un Service Endpoint :

Reste à le monter côté client. La lame Connect du partage vous donne directement la commande de montage NFS, avec le bon endpoint et les bonnes options pré-remplis : vous n’avez qu’à la copier sur votre client Linux :

Téléchargez le paquet Microsoft correspondant à votre version d’Ubuntu, afin d’ajouter le dépôt officiel Microsoft (nécessaire pour installer ensuite des outils comme aznfs) :

curl -sSL -O https://packages.microsoft.com/config/$(source /etc/os-release && echo "$ID/$VERSION_ID")/packages-microsoft-prod.deb 

Installez le paquet téléchargé, puis supprimez l’installeur :

sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb

La commande sudo apt-get update met à jour la liste des paquets disponibles, puis sudo apt-get install aznfs installe le client Azure NFS (aznfs) depuis le dépôt Microsoft :

sudo apt-get update
sudo apt-get install aznfs

Créez le dossier /mount/jloshare qui servira de point de montage pour le partage NFS :

sudo mkdir -p /mount/jloshare 

Montez le partage Azure Files en NFS sur votre point /mount/jloshare en utilisant le client optimisé aznfs, avec des options de performance et de compatibilité NFS 4.1 :

sudo mount -t aznfs fs-vlsw3zm2p5tvmn54j.z22.file.storage.azure.net:/fs-vlsw3zm2p5tvmn54j/jloshare /mount/jloshare -o vers=4,minorversion=1,sec=sys,nconnect=4

Affichez les systèmes de fichiers montés et filtrez pour vérifier que votre partage jloshare est bien monté :

df -h | grep jloshare

Depuis le portail Azure, la modification du volume du file share apparait immédiatement sur le partage :

5. Ce que vous gagnez concrètement

Le bénéfice tient en un mot : isolation. Tout ce qui était mutualisé au niveau du compte redescend au niveau du partage.

  • Performance dédiée : chaque partage a ses propres limites de capacité, d’IOPS et de débit. Plus de voisin bruyant qui mange votre budget perf.
  • Control plane par partage : les opérations (création, modification, suppression, snapshots) consomment un quota propre à chaque partage, sur un modèle de « seau » qui se recharge en continu. Les plafonds sont tellement hauts qu’en pratique, les blocages control-plane qu’on connaissait deviennent très improbables.
  • Réseau par partage : public endpoint, private endpoints : vous les configurez au niveau du partage, pas d’un compte parent qui impose ses règles à tout le monde.
  • Plus de clé de compte : il n’y a tout simplement pas d’account key toute-puissante. Le partage est sa propre ressource, avec sa propre surface de sécurité.
  • Facturation et tags granulaires : le coût est porté par le partage (capacité + IOPS + débit), avec ses propres tags. Le showback / chargeback devient enfin trivial.
Mon retour terrain : le gros gain au quotidien, ce n’est pas la perf brute, c’est la traçabilité des coûts et la fin de la clé de compte. Sur des environnements multi-équipes ou multi-projets, pouvoir taguer et facturer partage par partage change la vie des FinOps.

6. Les limites au jour du GA

Soyons honnêtes : « GA » ne veut pas dire « complet ». Le modèle est jeune, et plusieurs fonctionnalités qu’on tient pour acquises côté classique ne sont pas encore là. À l’heure où j’écris, il manque notamment :

  • La sauvegarde managée. C’est le point noir : au GA, vous n’avez que des snapshots manuels. Pas d’Azure Backup sur ce type de ressource, ni coffre Recovery Services, ni Backup vault ne le prennent en charge et il n’apparaît pas non plus dans Resiliency (voir la démo §4). La protection de la donnée est entièrement à votre charge.
  • SMB. C’est NFS 4.1 uniquement. Si vos workloads sont Windows/SMB (AVD + FSLogix, partages bureautiques…), ce modèle ne vous concerne pas encore.
  • CMK (clés gérées par le client), soft delete / corbeille, autres protocoles. Tout ça est annoncé comme « à venir », mais pas disponible au GA.
Attention ! FSLogix / AVD, ce modèle n’est pas pour vous aujourd’hui : au GA, c’est NFS 4.1 uniquement, et SMB n’est pas disponible. Or FSLogix exige du SMB (profils VHD/VHDX montés en SMB). Mécaniquement, vous ne pouvez pas poser vos profils FSLogix sur un partage Microsoft.FileShares pour l’instant. Pour de l’AVD, restez sur le compte de stockage classique en Azure Files SMB (provisioned v2 SSD). SMB est annoncé « à venir » sur ce nouveau modèle : le jour où il arrive, l’isolation par partage et la fin de l’account key deviendront très intéressantes pour de l’AVD multi-équipes, mais on n’y est pas.

7. Alors, je l’utilise ou pas ?

La règle est simple : si vos besoins rentrent dans le périmètre actuel, c’est le futur, foncez. Sinon, le classique fait toujours le job. Voici comment je le résume.

Votre besoinMicrosoft.FileShares (nouveau)Compte de stockage (classique)
Protocole NFS 4.1✅ Oui✅ Oui
Protocole SMB❌ Pas encore✅ Oui
Tier SSD / HDD✅ SSD / ❌ HDD✅ SSD / ✅ HDD
Isolation perf / réseau / coût par partage✅ Oui❌ Mutualisé
Sans clé de compte✅ Oui❌ Clé présente
Snapshots manuels✅ Oui✅ Oui
Sauvegarde managée (Azure Backup, Recovery vault, Backup vault) Pas encore✅ Oui
CMK / soft delete❌ Pas encore✅ Oui
IaC, CLI, PowerShell✅ Oui✅ Oui
Scale (partages / abo / région)✅ 10 0001 000

8. Conclusion

Voilà : cette « nouvelle ressource file share », ce n’est pas un énième renommage, c’est un vrai changement d’architecture. Le partage cesse d’être un sous-objet du compte de stockage pour devenir une ressource Azure de plein droit, avec sa perf, son réseau, sa sécurité et sa facture à lui. À la clé : une isolation propre, la fin de la clé de compte toute-puissante, un coût traçable partage par partage et une vraie compatibilité infrastructure-as-code.

Les trois pièges à retenir avant de vous lancer :

  1. La sauvegarde, c’est le gros trou du GA : Snapshots manuels uniquement, et aucune prise en charge par Azure Backup (Recovery Services vault, Backup vault) ni par Resiliency. La protection de la donnée est à votre charge, n’y mettez rien de critique sans stratégie maison.
  2. NFS 4.1 / SSD uniquement : pas de SMB (donc pas de FSLogix / AVD), pas de HDD.
  3. Facturation provisioned v2 : dimensionnez correctement capacité, IOPS et débit, vous payez le provisionné.

Si vous êtes sur du NFS, foncez tester en lab : c’est clairement la direction que prend Azure Files. Pour le reste, le classique a encore de beaux jours devant lui, le temps que la sauvegarde managée, SMB et les autres briques manquantes débarquent.

Dernier point, et il pèse lourd dès qu’on dimensionne du provisionné : la capacité réservée, vous la payez. Autant ne pas voir trop large « au cas où » et faire grossir le partage automatiquement quand le besoin arrive.

C’est exactement le sujet que je creuse côté FSLogix. À lire dans la foulée : Autoscalez le stockage FSLogix : faire grossir automatiquement le quota de vos partages Azure Files.

Nerdio simplifie FSLogix

Vous avez déployé Nerdio Manager for Enterprise (peut-être en suivant mon article précédent), vous avez coché en passant « FSLogix Profiles Storage Configuration » dans le wizard, mais vous n’avez jamais vraiment creusé ce que Nerdio fabrique derrière ? Cette suite logique est pour vous. On va dérouler, étape par étape, ce que Nerdio fait à votre place sur FSLogix et surtout ce que vous auriez à faire à la main sans lui. Parce que FSLogix, c’est probablement la brique d’AVD qui génère le plus de tickets support, et ça vaut la peine de comprendre pourquoi Nerdio fait baisser ce volume.

Pour vous guider plus facilement dans cet article, voici des liens rapides :

1. Pourquoi FSLogix à la main, c’est pénible

Avant d’entrer dans Nerdio, faisons l’inventaire de ce qu’il faut faire pour avoir un FSLogix qui tourne proprement sur un host pool AVD Entra-only. La liste, que vous pouvez retrouver dans cet article, se décompose dans cet ordre :

  1. Provisionner un storage account
  2. Activer l’authentification Entra Kerberos
  3. Grant admin consent
  4. Exclure cette app des policies Conditional Access MFA
  5. Créer le file share
  6. Distribuer les rôles RBAC
  7. Régler les ACL NTFS
  8. Pousser les clés registry FSLogix
  9. Maintenir tout ça dans le temps
Mon retour terrain : à la main, comptez une bonne demi-journée pour un déploiement propre, plus le temps de débuggage des permissions NTFS qui vient quasi systématiquement. L’étape 7 (ACL NTFS) est celle qui génère le plus de tickets support sur tout AVD. Une fausse manip d’héritage et vous y passez la journée d’anniversaire de votre fils.

Maintenant, voyons ce que Nerdio peut faire pour vous.

2. Le wizard Create Azure Files Share

Avant toute chose, je vous conseille de créer le groupe de ressources sur le portail Azure, puis de lier ce dernier dans votre console Nerdio :

Dans Nerdio, direction Settings → FSLogix Profiles → Add Azure Files Share. Vous avez le choix entre pointer un storage account existant ou laisser Nerdio créer le share complet, du SA jusqu’aux ACL NTFS. Et oui, ça inclut le scénario Entra ID joined, c’est ce qu’on va dérouler ensemble :

Le wizard se passe en seulement 5 étapes :

Étape 1 : Storage Account

Nom du SA, resource group, région, SKU (Standard ou Premium Files), réplication. Rien d’extraordinaire, mais tout se passe dans une seule fenêtre Nerdio plutôt que de naviguer dans quatre blades Azure différentes.

Étape 2 : Active Directory ou Entra ID

L’étape clé. Vous activez le toggle Join AD or Entra ID, puis vous choisissez Entra ID dans la liste déroulante. Et là, Nerdio vous met deux warnings honnêtes que vous devez lire avant de cliquer Next :

Attention : Nerdio vous prévient sur deux points avant de valider :

⚠️ Be sure to grant admin consent after storage account is joined to Entra ID.
⚠️ Entra ID Conditional Access MFA is not supported with Entra ID joined Azure Files storage accounts. The new Entra ID application must be excluded from CA MFA policies.

Ce sont les deux seules manips qu’il vous restera à faire à la fin. Nerdio s’occupe du reste : création de l’app registration, configuration Entra Kerberos sur le storage, le tout en une seule passe.

Étape 3 : Share & Permissions

Vous donnez un nom au share, sa capacité (entre 100 GB et 100 TB), et vous attribuez les rôles RBAC SMB Share Contributor aux groupes Entra ID concernés. Mais surtout, et c’est là le gros gain, vous avez un dropdown NTFS Permission Preset avec une option FSLogix.

Ce preset, c’est exactement la combinaison Authenticated Users / CREATOR OWNER / Administrators de la section 1, avec les bons héritages.

Bonus sécurité : la case Limit access to specific host pools vous permet de restreindre ce share à un ou plusieurs host pools précis. Pratique si vous avez plusieurs environnements (prod, dev, RH, finance…) et que vous voulez éviter qu’un host pool puisse écrire dans le profil d’un autre.

Étape 4 : Temporary VM Settings

Pour appliquer les ACL NTFS et finaliser le join, Nerdio doit mount le share quelque part. Il monte donc une VM temporaire dans votre vNet le temps de la config, puis la supprime automatiquement.

Vous renseignez ici la taille de VM (le défaut B2s suffit), le subnet et éventuellement l’image. C’est cette VM qui va faire le icacls du preset FSLogix sur le share, donc gardez bien le subnet AVD ou un subnet qui peut joindre le storage.

Étape 5 : Tags

Classique. Submit.

Le déploiement commence alors, et toutes les étapes sont indiquées dans le log :

  • Sur le portail Azure, on retrouve la machine virtuelle temporaire créée pour l’occasion :
  • Une fois le traitement terminé, toutes les étapes sont bien détaillées dans le log :
  • Le statut du compte de stockage est également visible dans le portail Azure :
  • Et la configuration de la gestion identitaire Entra Kerberos est faite :
  • Dans Entra, l’app registration est bien créée :
  • Les ACL de base sont bien appliquées (un durcissement des héritages NTFS reste possible si votre politique de sécurité l’exige) :
  • À l’issue de l’opération, la machine virtuelle temporaire se détruit automatiquement :

À la fin du traitement, trois actions restent à votre charge :

  • Allez dans Entra ID → Enterprise Applications, ouvrez la nouvelle app qui porte le nom de votre storage account, et cliquez sur Grant admin consent for [tenant].
  • Ajoutez également la prise en charge des groupes dans le manifeste de l’app :
  • Si vous avez des Conditional Access policies MFA, ajoutez cette app dans la liste d’exclusion :

C’est tout. Comparez avec la liste de la section 1 : on est passé de 9 étapes à 3 manips de 30 secondes.

3. Les FSLogix Profiles : templates réutilisables

Voilà la deuxième brique qui change la vie : les FSLogix Profiles au sens Nerdio du terme, à ne pas confondre avec les profils utilisateurs FSLogix !

Dans Settings → FSLogix, vous créez un profil, c’est-à-dire un template de configuration FSLogix, que vous pourrez ensuite appliquer à n’importe quel host pool.

Concrètement :

  1. Nom du profil : par exemple « Standard AVD Users » ou « Power Users with bigger profiles ».
  2. Excluded users group : un groupe Entra ID dont les membres ne seront PAS soumis à FSLogix. Best practice : y mettre vos admins. Comme ça, si FSLogix casse, vos admins peuvent toujours se logger en profil local et venir réparer.
  3. Profile path : un dropdown qui vous propose tous les shares que vous avez créés à l’étape précédente. Vous n’avez plus à retaper le path UNC à la main.
  4. Office Container (ODFC) : checkbox pour activer le container Office séparé. Honnêtement, dans la grande majorité des cas AVD vous n’en avez pas besoin (j’y reviens en section 5).
  5. Cloud Cache : à laisser de côté sauf scénario multi-région avec DR actif-actif.

Toujours sur l’écran de configuration FSLogix, vous tombez sur la vraie matrice des réglages FSLogix. Et là, Nerdio fait deux choses qui valent la mention.

  • Les eye icons. Chaque setting a une petite icône œil que vous pouvez survoler pour avoir la description complète de la clé registry correspondante. Plus besoin d’aller chercher dans la doc Microsoft à chaque fois. C’est bête mais c’est ce qui transforme FSLogix d’un truc obscur en quelque chose de réellement administrable.
  • Les valeurs par défaut « Not configured ». Tant que vous ne touchez pas, Nerdio ne pousse rien sur cette clé : la valeur par défaut FSLogix est utilisée. Vous ne tunez que ce que vous voulez vraiment changer, ce qui rend votre conf lisible.

Les best practices que je pousse personnellement (et qui sont presque toutes pré-suggérées par Nerdio) :

RéglageValeurPourquoi
DeleteLocalProfileWhenVHDShouldApplyEnabledSur un environnement neuf, ça évite l’accumulation de profils locaux qui se baladent à côté des VHDX. À ne PAS activer si vous migrez depuis une infra existante avec des profils locaux à préserver.
FlipFlopProfileDirectoryNameEnabledMet le username AVANT le SID dans le nom du folder. Indispensable pour s’y retrouver quand vous cherchez le profil d’un user dans le share.
VolumeTypeVHDXDisque dynamique, grandit au fil du temps. Sur Standard Files, c’est ce qui vous évite de réserver 30 Go par user dès le premier login.
IsDynamicEnabledIdem, le VHDX commence à quelques Mo et grandit en fonction de l’usage réel.
LockedRetryCount / LockedRetryIntervalDéfauts, à augmenter si réseau capricieuxSi le VHD est temporairement locké (réseau qui tousse, session précédente qui ne s’est pas fermée proprement), FSLogix réessaye au lieu de filer un profil temp.
PreventLoginWithFailureEnabledSi FSLogix n’arrive pas à monter le profil, l’utilisateur est BLOQUÉ au login plutôt que de se retrouver sur un profil temporaire. Préférable : un user qui appelle le support > un user qui bosse 4 h sur un profil qui sera jeté au logoff.
PreventLoginWithTempProfileEnabledMême logique, ceinture et bretelles.
ProfileType0Mount sur un seul host à la fois. Le multi-mount (type 3) est une plaie à débugger, à n’activer que si vous avez vraiment besoin.
SizeInMBs30000 (30 GB)Plafond raisonnable. Tracez les profils qui s’en approchent dans le monitoring (section 7).
Compression au logoffEnabledÀ chaque logoff, FSLogix compacte le VHDX. Vous économisez pas mal de stockage à long terme.

Et pour les puristes : le mode Advanced vous laisse taper directement les clés FSLogix par nom et valeur si vous voulez configurer quelque chose qui n’est pas exposé dans l’UI. Nerdio ne vous enferme pas :

"DeleteLocalProfileWhenVHDShouldApply"=dword:00000001
"FlipFlopProfileDirectoryName"=dword:00000001
"IsDynamic"=dword:00000001
"LockedRetryCount"=dword:00000012
"LockedRetryInterval"=dword:00000005
"PreventLoginWithFailure"=dword:00000001
"PreventLoginWithTempProfile"=dword:00000001
"ReAttachIntervalSeconds"=dword:00000010
"ReAttachRetryCount"=dword:00000060
"ProfileType"=dword:00000000
"SizeInMBs"=dword:00025000
"VolumeType"=string:"vhdx"
"VHDCompactDisk"=dword:00000001

Une fois le profil créé, vous cliquez sur les trois points → Set as default :

À partir de là, chaque nouveau host pool que vous créez héritera de cette config FSLogix automatiquement. Et bien sûr, vous pouvez override par host pool si vous avez besoin d’une config différente quelque part.

C’est ça le vrai gain par rapport à une approche GPO : ce que vous configurez une fois s’applique partout, sans recréer une GPO ni modifier votre image golden.

4. La config qui descend toute seule sur les session hosts

À la création (ou à la mise à jour) d’un host pool, Nerdio injecte la conf FSLogix via ses Scripted Actions au boot des session hosts :

Comme c’est magnifique, et tellement simple :

Les machines virtuelles sont bien visibles dans le pool d’hôtes :

Concrètement :

  • Pas besoin de GPO
  • Ça marche sur des hosts Entra-only ou joints à un domaine AD
  • Ça s’applique aussi bien sur les hosts existants que sur les nouveaux (auto-scale, re-image)

Si vous allez voir le registre d’un session host après le déploiement :

  • La version de FSLogix correspond à celle demandée :
  • Vous retrouverez bien tout sous HKLM\SOFTWARE\FSLogix\Profiles, mais cette fois sans que vous ayez touché à un seul reg add ni à une GPO :

Et bien sûr, le profil VHDX se crée au premier démarrage de l’utilisateur :

Mon retour terrain : si vous changez la config dans le FSLogix Profile Nerdio, vous pouvez redéployer la conf sur tous les hosts d’un host pool en un clic, sans rebuilder l’image. Nerdio relance simplement le Scripted Action sur chaque host. C’est l’inverse du modèle « je rebuild mon image dorée à chaque tuning FSLogix » qu’on voyait avec les GPO.

5. Exclusions, redirections.xml, ODFC, Cloud Cache

Exclusions registry. Toujours dans le FSLogix Profile, vous avez un onglet Profile Exclusions où vous gérez la liste des dossiers et fichiers que FSLogix doit ignorer (typiquement les caches Teams, les logs, les téléchargements). C’est l’équivalent de la clé HKLM\SOFTWARE\FSLogix\Profiles\Exclude List, mais éditable depuis une UI au lieu d’un import de fichier .reg.

Redirections.xml. Pareil, Nerdio gère l’upload et la synchronisation du redirections.xml sur le share. Vous le modifiez dans Nerdio, il est poussé automatiquement au prochain mount des profils.

Office Container (ODFC). Comme dit en section 3, dans la majorité des cas AVD vous n’en avez pas besoin. La doc Microsoft elle-même recommande de NE PAS mélanger Profile Container et ODFC sauf cas particulier (par exemple OneDrive en mode Files On-Demand avec beaucoup de fichiers). Si vous l’activez, comptez doubler la complexité de troubleshooting.

Cloud Cache. Outil puissant pour faire du multi-storage avec basculement automatique, mais à réserver aux scénarios DR actif-actif ou multi-région avec une vraie contrainte de continuité de service. Sur un host pool en région unique, Cloud Cache n’apporte rien que le Profile Container standard ne fasse déjà.

6. Multi-storage et scoping par host pool

Pour les déploiements qui grossissent, deux features valent le coup d’être mentionnées.

Plusieurs locations FSLogix. Vous pouvez déclarer plusieurs shares dans Nerdio (même un Azure NetApp Files si vous en avez un) et les pointer depuis différents FSLogix Profiles. Pratique pour séparer prod et dev, ou pour des shares dédiés par département.

Scoping par host pool. Souvenez-vous de la case Limit access to specific host pools à l’étape Share & Permissions (section 2). Couplée aux FSLogix Profiles par host pool, ça vous permet d’avoir une isolation stricte : un host pool « Finance » ne peut pas écrire dans le share « RH », et inversement. Tout ça géré dans la même UI, sans pondre des RBAC complexes à la main.

7. Monitoring et cleanup des profils orphelins

Plusieurs features moins glamour, mais qui paient leur licence Nerdio sur le long terme.

  • Monitoring des tailles de profil : Nerdio remonte pour chaque session active la taille du VHDX du user. Vous voyez tout de suite les profils qui gonflent (typiquement les boîtes OST Outlook, les caches Teams mal nettoyés). Vous pouvez tirer des alertes là-dessus.
  • Auto-Scale du file share : Manage Auto-Scale for FSLogix permet d’automatiser le dimensionnement des ressources et la gestion des profils utilisateurs afin d’assurer performance et optimisation des coûts sans intervention manuelle, de la même façon que mon article sur la méthode scriptée dans Azure :
  • Cleanup des profils orphelins : Nerdio propose une Scripted Action prête à l’emploi qui scanne votre share FSLogix, compare la liste des folders aux users existants dans Entra ID, et supprime les VHDX des users qui n’existent plus (départs, comptes supprimés). Vous la planifiez en récurrent (une fois par mois par exemple) et vous oubliez.

À la main : il faut écrire le script PowerShell, le planifier (Automation Account, Function App, ou serveur dédié), le maintenir quand l’API Graph change. Avec Nerdio : checkbox + planification.

8. Verdict

Si vous gérez un seul host pool sur une infra stable, FSLogix à la main reste tenable et vous payez l’effort une fois, vous oubliez. Mais dès que vous avez :

  • Plusieurs host pools avec des configs FSLogix différentes,
  • Des changements de conf réguliers (ajout d’exclusions, redirections, tuning),
  • Du multi-département avec isolation des profils,

… Nerdio paye sa licence rien que sur la partie FSLogix. La création du share avec preset NTFS, le push de la conf au boot, le monitoring et le cleanup, c’est plusieurs jours de travail PowerShell que vous n’avez plus à faire ni à maintenir.

Voilà, en 8 sections vous avez fait le tour de ce que Nerdio fait pour vous sur FSLogix. Concrètement, ça donne quoi ? Vos tickets support « profil temporaire » devraient chuter de manière significative. Ce qui, dans la vie d’un admin AVD, n’a pas de prix.

Foncez tester en lab : le wizard Create Azure Files Share en mode Entra-joined, c’est cinq minutes à dérouler, et vous verrez tout de suite la différence avec le manuel. Prochain article de la série : on attaquera l’auto-scaling avec Nerdio, l’autre grande raison de payer cette licence (et la moins évidente à découvrir tout seul).

Tests du disque OS éphémère NVMe

Je voulais vérifier un point : un disque OS éphémère (Ephemeral OS Disk) peut être placé sur Temp, NVMe ou Cache selon la série de votre VM. La documentation Microsoft indique que l’option de placement ne change pas la performance ni le coût de l’Ephemeral OS Disk, car la perf dépend du stockage local disponible sur le SKU.

Dans la vraie vie (et dans mes chiffres) : même si les trois restent “OS + éphémère”, le placement change le chemin I/O réel, et donc le comportement sous pression : la différence la plus visible n’est pas toujours l’IOPS moyen, mais la distribution de latence (p95/p99/p99.9) et la stabilité en charge soutenue.

Plusieurs articles ont déjà été écrits sur les performances de stockages Azure :

Et pour vous guider plus facilement dans cet article très (trop?) long, voici des liens rapides :

Mais avant d’aller directement dans les tests, prenons le temps de parcourir ensemble quelques notions concernant le stockage temporaire local attaché une machine virtuelle.

Qu’est-ce qu’un stockage temporaire local ?

Certaines tailles de machine virtuelle Azure incluent un stockage local temporaire éphémère, certaines des tailles les plus récentes utilisant des disques NVMe locaux temporaires.

Le stockage temporaire local utilise des disques supplémentaires approvisionnés directement en tant que stockage local sur un hôte de machine virtuelle Azure, plutôt que sur le stockage Azure distant. Ce type de stockage convient le mieux aux données qui n’ont pas besoin d’être conservées définitivement, telles que les caches, les mémoires tampons et les fichiers temporaires. 

Microsoft Learn

Le disque temporaire (souvent D: sous Windows) est un disque local éphémère classique : les données sont potentiellement perdues en si maintenance/redeploy/deallocate. Un disque OS éphémère peut être placé dessus (Temp placement, NVMe, ou sur le cache disk) selon le SKU de la machine virtuelle :

Étant donné que les données stockées sur ces disques ne sont pas sauvegardées, elles sont perdues lorsque la machine virtuelle est libérée ou supprimée. Le stockage éphémère est recréé au démarrage. Les disques éphémères locaux sont différents des disques de système d’exploitation éphémères.

Microsoft Learn

Qu’est-ce qu’un disque OS éphémère ?

Un disque OS éphémère est un disque système stocké localement sur l’hôte Azure, et non sur un stockage distant Azure Storage. Le point le plus important est que celui-ci est non persistant : en cas de redéploiement, de recréation, le disque OS éphémère revient toujours à l’image de départ.

Les disques de système d’exploitation éphémères sont créés sur le stockage local de la machine virtuelle (VM) et ne sont pas enregistrés dans le Stockage Azure à distance.

Microsoft Learn

Pourquoi utiliser un disque OS éphémère ?

Le premier avantage concerne le prix : On ne paye pas le volume de stockage du disque éphémère. Celui-ci est intégré au prix de la machine virtuelle. De plus, les performances sont bien meilleures que la plupart des disques :

Les disques OS éphémères conviennent parfaitement aux charges de travail sans état, dans lesquelles les applications tolèrent les pannes de machines virtuelles individuelles tout en restant sensibles aux délais de mise en service ou à la réimagerie d’instances spécifiques.

Comparé à un disque de système d’exploitation standard, un disque éphémère offre une latence plus faible pour les opérations de lecture/écriture et permet une réinitialisation plus rapide des machines virtuelles.

Microsoft Learn

Pourquoi ne pas utiliser un disque OS éphémère ?

Comme annoncé plus haut, le disque OS éphémère ne doit pas contenir de la donnée critique. De plus, des fonctionnalités basiques ne sont pas disponibles :

  • Arrêt / Démarrage de la VM
  • Capture d’image VM
  • Captures instantanées de disque
  • Azure Disk Encryption
  • Échanges de disques système d’exploitation

Sur le portail Azure, certains menus sont tout simplement grisés pour ce type de VM :

Les fonctionnalités de sauvegarde et de reprise d’activité après sinistres sont elles aussi désactivés :

Comment savoir si le SKU de ma VM dispose d’un stockage temporaire local ?

La doc détaille trois placements possibles selon les VM :

  • NVMe Disk Placement (GA sur des séries récentes v6+)
  • Temp Disk / Resource Disk Placement
  • Cache Disk Placement

La nature et le volume du stockage temporaire local dépend en effet de la famille et du SKU de votre machine virtuelle :

Attention, certaines machines virtuelles n’ont tout simplement pas de stockage temporaire local :

Quid de la SLA d’une VM avec un disque OS éphémère ?

Le base disk influence l’engagement contractuel et certaines phases de provisioning, mais il ne modifie pas le chemin I/O steady-state de l’OS.

Depuis peu, Azure permet de choisir le type de “base disk” associé à un disque OS éphémère : Standard HDD, Standard SSD ou Premium SSD.

Attention cependant, ce “base disk” ne correspond pas au support physique sur lequel l’OS s’exécute.

Dans le cas d’un disque OS éphémère, le système fonctionne toujours sur le stockage local de l’hôte (NVMe / Temp / Cache selon le placement). Le type de base disk désigne le type de disque managé logique utilisé par Azure lors du provisioning et pour l’engagement contractuel.

La prise en charge SSD est une nouvelle option qui permet aux clients de choisir le type de disque principal utilisé pour le disque d’OS éphémère. Auparavant, le disque de base ne pouvait être qu’un HDD standard. À présent, les clients peuvent choisir entre les trois types de disques : HDD Standard (Standard_LRS), SSD Standard (StandardSSD_LRS) ou SSD Premium (Premium_LRS). En utilisant SSD avec disque de système d’exploitation éphémère, les clients peuvent bénéficier des améliorations suivantes :

  • Contrat SLA amélioré : les machines virtuelles créées avec SSD Premium fournissent un contrat SLA supérieur à celui des machines virtuelles créées avec hDD Standard. Les clients peuvent améliorer le contrat SLA pour leurs machines virtuelles éphémères en choisissant SSD Premium comme disque de base.

Microsoft Learn

Concrètement :

  • Le choix du base disk peut améliorer la SLA contractuelle de la VM.
  • Il peut également influer sur certaines phases spécifiques (provisioning, re-imaging, lectures liées au backing managed disk).
  • En revanche, il ne modifie pas les performances steady-state du stockage local sur lequel tourne réellement l’OS.

Autrement dit :

Choisir Premium SSD comme base disk améliore la SLA et certains scénarios liés au provisioning,
mais ne transforme pas un placement NVMe ou Temp en Premium SSD local.

Pourcentage de disponibilité (SSD Premium, SSD Premium v2 et Ultra Disk)Pourcentage de disponibilité (disque géré SSD standard)Pourcentage de disponibilité (disque géré HDD standard)Avoir Service
< 99,9 %< 99,5 %< 95 %10 %
< 99 %< 95 %< 92 %25 %
< 95 %< 90 %< 90 %100 %

Quid des performances d’une VM avec un disque OS éphémère ?

Les disques temporaires locaux ne sont pas comptabilisés par rapport aux IOPS et aux limites de débit de la machine virtuelle. De plus, Microsoft nous indique que les performances du disque OS éphémère dépendent de la machine et non du type de stockage local :

Le disque OS éphémère exploite le stockage local intégré à la machine virtuelle. Étant donné que différentes machines virtuelles ont différents types de stockage local (disque de cache, disque temporaire et disque NVMe), l’option de placement définit l’emplacement où le disque de système d’exploitation éphémère est stocké. Le choix du placement n’influence ni les performances ni le coût du disque OS éphémère. Ses performances reposent sur le stockage local de la machine virtuelle. Selon le type de machine virtuelle, trois modes de placement sont proposés.

  • Placement de disque NVMe (généralement disponible) : le type de placement de disque NVMe est désormais en disponibilité générale (GA) sur la dernière série de machines virtuelles v6 de la dernière génération, comme Dadsv6, Ddsv6, Dpdsv6, etc.
  • Placement de disque temporaire (également appelé Placement de disque de ressources) : le type de placement de disque temporaire est disponible sur les machines virtuelles avec un disque temp comme Dadsv5, Ddsv5, etc.
  • Emplacement du disque de cache : le type de placement du disque de cache est disponible sur les anciennes machines virtuelles qui avaient un disque de cache tel que Dsv2, Dsv3, etc.

Microsoft Learn

La performance théorique dépend du SKU, pas du placement. En revanche, comme chaque placement repose sur un support physique différent (NVMe, temp disk, cache disk), le comportement réel sous charge peut varier sensiblement.

Mais cette seconde partie de la documentation Microsoft m’intrigue quand même :

Amélioration des performances : en choisissant SSD Premium comme disque de base, les clients peuvent améliorer les performances de lecture du disque de leurs machines virtuelles. Bien que la plupart des écritures se produisent sur le disque temporaire local, certaines lectures sont effectuées à partir de disques managés. Les disques SSD Premium fournissent 8 à 10 fois plus d’IOPS que hDD Standard.

Microsoft Learn

J’ai créé plusieurs machines virtuelles avec le SKU Standard_D32ads_v7, dont voici les performances pour le stockage local :

Pourtant, les deux différents type de disque OS éphémère créés indiquent exactement les mêmes performances sur le portail Azure :

En extrapolant naïvement à partir de la capacité totale locale (440 Go x4), j’aurais pu m’attendre qu’en faisant un produit en croix basé sur la taille totale des 4 disques locaux attachés à ma VM, je m’attendais à trouver les performances suivantes sur mon disque OS éphémère :

  • IOPS max : 43296 IOPS
  • Bande passante max : 323 Mo/sec

Passons maintenant à l’approche utilisée pour mes tests.

Protocole de test que j’ai déployé :

  • Machines virtuelles Azure :

Pour éviter toute ambiguïté, les 4 VMs utilisent toutes un disque OS avec Windows Server 2022, mais sur des placements différents :

Nom de VMSKUType de disque OS
perftempStandard_D32ads_v5Ephemeral OS Disk – Temp placement
perfnvme-vmStandard_D32ads_v7Ephemeral OS Disk – NVMe placement
perfcacheStandard_D32ds_v4Ephemeral OS Disk – Cache placement
perfssdStandard_D32ads_v7OS Disk Premium SSD (référence)
  • Outils de mesure :

Plusieurs outils de mesures ont été utilisés afin de mieux comprendre les performances :

Nom de l’outilMesures effectuéesURL de téléchargement
fioIOPS (read/write), bande passante (MB/s), latence moyenne, percentiles (p95, p99), tests steady-state, profils personnalisés (4K, 64K, queue depth, etc.)https://github.com/axboe/fio
CrystalDiskMarkIOPS séquentiel et aléatoire, débit (MB/s), tests QD1/QD32, 4K/8K/1Mhttps://crystalmark.info/en/software/crystaldiskmark/
AS SSD BenchmarkIOPS 4K read/write, latence d’accès, score global (read/write/total), test copie (ISO, Program, Game), test incompressiblehttps://www.alex-is.de/PHP/fusion/downloads.php?cat_id=4

CrystalDiskMark – Smoke Test :

L’outil a été laissé dans sa configuration de base. Cela permet de provoquer :

  • Meilleur profit des caches (OS, contrôleur, stockage local, cache host)
  • Meilleur visu du burst (très bon pendant un court moment)
  • Ne force pas steady-state

Comme attendu, cela donne des chiffres parfois “spectaculaires”, notamment en lecture. Et c’est exactement le biais évoqué plus haut qui en ressort :

  • Tests courts
  • Pas de warm-up réel
  • Influence potentielle du cache

CrystalDiskMark confirme les tendances générales, mais ne permet pas de juger la stabilité sous charge soutenue.

AS SSD Benchmark – Latence & Incompressible :

AS SSD Benchmark va un peu plus loin que CrystalDiskMark et donne d’autres infos : Seq / 4K / 4K-64Thrd + “Acc.time”. Cela donne dans les résultats une meilleure visibilité des différences d’écriture, parfois très forts selon le disque.

AS SSD est connu pour être très sensible à :

  • la façon dont le chemin I/O gère les écritures (flush, cache, barrières)
  • la latence (et il la met en avant via “Acc.time”)
  • et la façon dont le driver/stack de stockage réagit

AS SSD peut donc apparaître comme plus sévère que CrystalDiskMark sur les écritures quand il tombe sur un scénario où le stockage/driver applique davantage de contraintes (flush/ordering).

Les tests faits via AS SSD nous apporte donc ici deux éléments intéressants :

  • Mesure directe de latence d’accès
  • Test incompressible (moins biaisé par cache/compression)

Dans notre cas, on peut donc en déduire que disque éphémère NVMe domine clairement en latence pure, que le disque éphémère temporaire reste très proche, que le disque éphémère cache montre une latence un peu plus élevée, et que le disque Premium SSD affiche la latence la plus importante.

Le score global reflète davantage l’expérience “ressentie” qu’un simple IOPS max.

fio – tests soutenus proches d’un workload :

Contrairement à CrystalDiskMark (smoke test court) et AS SSD (latence & incompressible), fio permet de :

  • contrôler précisément le pattern I/O
  • imposer une durée suffisante
  • forcer le bypass du cache OS (–direct=1)
  • introduire une phase de warm-up
  • mesurer les percentiles élevés (p95, p99, p99.9)

Autrement dit, fio mesure le comportement soutenu proche d’un workload réel.

Je suis passé par Chocolatey pour installer fio sur mes 4 machines virtuelles Azure grâce au script PowerShell suivant :

Set-ExecutionPolicy Bypass -Scope Process -Force

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

choco --version

choco install fio -y

fio --version

J’ai ensuite lancé le script fio suivant sur chacun des machines virtuelles pour générer et centraliser mes résultats sur un Azure file share. Dans ce script, fio teste :

  • Random 4K en montée de charge (sweep de queue depth QD1→64) en lecture/écriture
  • Un “peak” comparable : random 4K QD32, 8 jobs (lecture + écriture).
  • Un run plus long “steady-state” : random write 4K QD32, 8 jobs (soutenu).
  • Le coût de la durabilité/synchronisation : random write 4K QD1, 1 job, fsync=1.
  • Le débit séquentiel : read/write 1M, QD32, 4 jobs.
  • Et il fait un warmup au début.
# =========================
# FIO -> Z:\fio-results\ (NO subfolders)
# VM name only in OUTPUT (filename + header), not in folder structure
# Tests:
#  - Scaling (QD sweep) : randread4k / randwrite4k (for graphs, not for "max" headline)
#  - Peak controlled    : randread4k / randwrite4k @ QD32 NJ8 (reference "max comparable")
#  - Steady-state       : randwrite4k @ QD32 NJ8 (longer run)
#  - Sync durability    : randwrite4k QD1 NJ1 fsync=1
#  - Throughput         : seq read/write 1m @ QD32 NJ4
#
# Notes:
# - Uses --direct=1 (bypass OS cache)
# - Uses time_based + ramp_time (warm-up)
# - Emits a CSV summary you can aggregate across VMs
# =========================

param(
  [string]$OutDir   = "Z:\fio-results",
  [string]$Target   = "C:\fio_test.dat",   
  [string]$FileSize = "32G",               # Bigger => fewer cache illusions
  [int]   $Runtime  = 60,
  [int]   $RampTime = 10,
  [string]$FioExe   = "fio"                # Or full path: C:\fio\fio.exe
)

$VmName = $env:COMPUTERNAME

function Ensure-Dir {
  param([string]$Path)
  try {
    New-Item -ItemType Directory -Path $Path -Force | Out-Null
    return $true
  } catch {
    return $false
  }
}

# Prefer Z:\fio-results, fallback to C:\fio-results if Z: not available
if (-not (Ensure-Dir -Path $OutDir)) {
  $OutDir = "C:\fio-results"
  if (-not (Ensure-Dir -Path $OutDir)) {
    Write-Host "ERROR: Unable to create output directory (Z:\fio-results or C:\fio-results)." -ForegroundColor Red
    exit 1
  }
}

# Ensure fio exists
try { & $FioExe --version | Out-Null } catch {
  Write-Host "ERROR: fio not found. Put fio.exe in PATH or set -FioExe to its full path." -ForegroundColor Red
  exit 1
}

function Run-FioTest {
  param(
    [Parameter(Mandatory=$true)][string]$TestName,
    [Parameter(Mandatory=$true)][string]$TestType,
    [Parameter(Mandatory=$true)][string[]]$Args
  )

  $ts = Get-Date -Format "yyyyMMdd-HHmmss"
  $outFile = Join-Path $OutDir "$($VmName)_$($TestName)_$ts.txt"

  @(
    "VM: $VmName"
    "Date: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
    "TestType: $TestType"
    "Test: $TestName"
    "Command: $FioExe $($Args -join ' ')"
    "----------------------------------------"
  ) | Out-File -FilePath $outFile -Encoding utf8

  & $FioExe @Args 2>&1 | Out-File -FilePath $outFile -Append -Encoding utf8
  return $outFile
}

function Parse-FioSummary {
  param(
    [Parameter(Mandatory=$true)][string]$FilePath,
    [Parameter(Mandatory=$true)][string]$TestType
  )

  $content = Get-Content $FilePath -Raw

  $readLine  = [regex]::Match($content, '^\s*read:\s*IOPS=([0-9\.]+[kKmM]?),\s*BW=([0-9\.]+[A-Za-z\/]+)', 'Multiline')
  $writeLine = [regex]::Match($content, '^\s*write:\s*IOPS=([0-9\.]+[kKmM]?),\s*BW=([0-9\.]+[A-Za-z\/]+)', 'Multiline')

  # fio prints percentiles when --percentile_list is used
    $p50  = [regex]::Match($content, '50\.00th=\[\s*([0-9]+)\]', 'Multiline')
    $p95  = [regex]::Match($content, '95\.00th=\[\s*([0-9]+)\]', 'Multiline')
    $p99  = [regex]::Match($content, '99\.00th=\[\s*([0-9]+)\]', 'Multiline')
    $p999 = [regex]::Match($content, '99\.90th=\[\s*([0-9]+)\]', 'Multiline')


  [PSCustomObject]@{
    VM         = $VmName
    TestType   = $TestType
    File       = Split-Path $FilePath -Leaf
    ReadIOPS   = if ($readLine.Success)  { $readLine.Groups[1].Value } else { "" }
    ReadBW     = if ($readLine.Success)  { $readLine.Groups[2].Value } else { "" }
    WriteIOPS  = if ($writeLine.Success) { $writeLine.Groups[1].Value } else { "" }
    WriteBW    = if ($writeLine.Success) { $writeLine.Groups[2].Value } else { "" }
    P50_usec   = if ($p50.Success)  { $p50.Groups[1].Value } else { "" }
    P95_usec   = if ($p95.Success)  { $p95.Groups[1].Value } else { "" }
    P99_usec   = if ($p99.Success)  { $p99.Groups[1].Value } else { "" }
    P999_usec  = if ($p999.Success) { $p999.Groups[1].Value } else { "" }
  }
}

# Common args (cache-light, more comparable)
$common = @(
  "--filename=$Target",
  "--size=$FileSize",
  "--direct=1",
  "--ioengine=windowsaio",
  "--runtime=$Runtime",
  "--ramp_time=$RampTime",
  "--time_based",
  "--group_reporting",
  "--thread",
  "--percentile_list=50:95:99:99.9"
)

$tests = @()

# ------------------------------------------------------------
# 0) Optional preconditioning (light warm-up) for consistency
# ------------------------------------------------------------
$tests += @{
  Type="warmup"
  Name="warmup_write1m_qd8_nj1_30s"
  Args=@(
    "--name=warmup",
    "--filename=$Target",
    "--size=$FileSize",
    "--direct=1",
    "--ioengine=windowsaio",
    "--bs=1m",
    "--iodepth=8",
    "--numjobs=1",
    "--rw=write",
    "--runtime=30",
    "--ramp_time=0",
    "--time_based",
    "--group_reporting",
    "--thread"
  )
}

# ------------------------------------------------------------
# 1) Scaling (QD sweep) - for graphs only
#    Keep it longer than micro-runs to reduce burst artifacts
# ------------------------------------------------------------
foreach ($qd in @(1,2,4,8,16,32,64)) {
  $tests += @{
    Type="scaling"
    Name="scaling_randread4k_qd$qd_nj8_90s"
    Args=@(
      "--name=rr_qd$qd",
      "--filename=$Target",
      "--size=$FileSize",
      "--direct=1",
      "--ioengine=windowsaio",
      "--bs=4k",
      "--iodepth=$qd",
      "--numjobs=8",
      "--rw=randread",
      "--runtime=90",
      "--ramp_time=15",
      "--time_based",
      "--group_reporting",
      "--thread",
      "--percentile_list=50:95:99:99.9"
    )
  }

  $tests += @{
    Type="scaling"
    Name="scaling_randwrite4k_qd$qd_nj8_90s"
    Args=@(
      "--name=rw_qd$qd",
      "--filename=$Target",
      "--size=$FileSize",
      "--direct=1",
      "--ioengine=windowsaio",
      "--bs=4k",
      "--iodepth=$qd",
      "--numjobs=8",
      "--rw=randwrite",
      "--runtime=90",
      "--ramp_time=15",
      "--time_based",
      "--group_reporting",
      "--thread",
      "--percentile_list=50:95:99:99.9"
    )
  }
}

# ------------------------------------------------------------
# 2) Peak controlled (reference values, comparable across disks)
# ------------------------------------------------------------
$tests += @{
  Type="peak"
  Name="peak_randread4k_qd32_nj8_120s"
  Args=@(
    "--name=peak_rr",
    "--filename=$Target",
    "--size=$FileSize",
    "--direct=1",
    "--ioengine=windowsaio",
    "--bs=4k",
    "--iodepth=32",
    "--numjobs=8",
    "--rw=randread",
    "--runtime=120",
    "--ramp_time=20",
    "--time_based",
    "--group_reporting",
    "--thread",
    "--percentile_list=50:95:99:99.9"
  )
}

$tests += @{
  Type="peak"
  Name="peak_randwrite4k_qd32_nj8_120s"
  Args=@(
    "--name=peak_rw",
    "--filename=$Target",
    "--size=$FileSize",
    "--direct=1",
    "--ioengine=windowsaio",
    "--bs=4k",
    "--iodepth=32",
    "--numjobs=8",
    "--rw=randwrite",
    "--runtime=120",
    "--ramp_time=20",
    "--time_based",
    "--group_reporting",
    "--thread",
    "--percentile_list=50:95:99:99.9"
  )
}

# ------------------------------------------------------------
# 3) Steady-state style (longer, to see sustained behavior)
# ------------------------------------------------------------
$tests += @{
  Type="steady"
  Name="steady_randwrite4k_qd32_nj8_180s"
  Args=@(
    "--name=steady_rw",
    "--filename=$Target",
    "--size=$FileSize",
    "--direct=1",
    "--ioengine=windowsaio",
    "--bs=4k",
    "--iodepth=32",
    "--numjobs=8",
    "--rw=randwrite",
    "--runtime=180",
    "--ramp_time=30",
    "--time_based",
    "--group_reporting",
    "--thread",
    "--percentile_list=50:95:99:99.9"
  )
}

# ------------------------------------------------------------
# 4) Sync durability penalty (OS-like durability semantics)
# ------------------------------------------------------------
$tests += @{
  Type="sync"
  Name="sync_randwrite4k_qd1_nj1_fsync1_60s"
  Args= $common + @(
    "--name=sync_rw",
    "--bs=4k",
    "--iodepth=1",
    "--numjobs=1",
    "--rw=randwrite",
    "--fsync=1"
  )
}

# ------------------------------------------------------------
# 5) Throughput (large blocks)
# ------------------------------------------------------------
$tests += @{
  Type="throughput"
  Name="seqread1m_qd32_nj4_60s"
  Args= $common + @(
    "--name=sr_1m",
    "--bs=1m",
    "--iodepth=32",
    "--numjobs=4",
    "--rw=read"
  )
}

$tests += @{
  Type="throughput"
  Name="seqwrite1m_qd32_nj4_60s"
  Args= $common + @(
    "--name=sw_1m",
    "--bs=1m",
    "--iodepth=32",
    "--numjobs=4",
    "--rw=write"
  )
}

# ------------------------------------------------------------
# Run + summary
# ------------------------------------------------------------
$results = @()

foreach ($t in $tests) {
  Write-Host "Running $($t.Type) / $($t.Name) ..." -ForegroundColor Cyan
  $file = Run-FioTest -TestName $t.Name -TestType $t.Type -Args $t.Args
  $results += Parse-FioSummary -FilePath $file -TestType $t.Type
}

$ts = Get-Date -Format "yyyyMMdd-HHmmss"
$summaryCsv = Join-Path $OutDir "fio_summary_$($VmName)_$ts.csv"
$summaryTxt = Join-Path $OutDir "fio_summary_$($VmName)_$ts.txt"

$results | Export-Csv -NoTypeInformation -Path $summaryCsv -Encoding UTF8
$results | Sort-Object TestType, File | Format-Table -AutoSize | Out-String | Out-File -FilePath $summaryTxt -Encoding utf8

Write-Host "Done. Outputs in: $OutDir" -ForegroundColor Green
Write-Host "Summary CSV: $summaryCsv" -ForegroundColor Green
Write-Host "Summary TXT: $summaryTxt" -ForegroundColor Green

Synthèse des résultats :

Cela nous donne les synthèses suivantes :

DiskPeak 4K ReadPeak 4K WriteSteady 4K WriteSeq ReadSeq WriteSync 4K Write
Temp (D32ads_v5)153k153k153k1951 MiB/s1950 MiB/s9.3k
Cache (D32ds_v4)98k93k94k1888 MiB/s1888 MiB/s7.9k
NVMe (D32ads_v7)146k60k60k1071 MiB/s536 MiB/s7.6k
Premium SSD10k4k3k152 MiB/s127 MiB/s507
DiskIOPSP50 (µs)P95 (µs)P99 (µs)P99.9 (µs)
Temp (D32ads_v5)153k212381523903
Cache (D32ds_v4)93k2694526281104
NVMe (D32ads_v7)60k2614376011048
Premium SSD4k40276110891827

Ce que peut en dire de ces tests :

Sur Temp, Cache et NVMe, on peut lire que Peak ≈ Steady. Cela signifie que :

  • Pas de burst artificiel
  • Pas d’effet cache court terme
  • Pas de chute après 30 secondes
  • Pas d’effondrement après warm-up

Le comportement observé est soutenu, et c’est extrêmement important, car beaucoup de benchmarks “rapides” montrent un pic initial qui s’effondre après 1 à 2 minutes.
Ici, ce n’est pas le cas.

  • NVMe vs Temp : contre-intuitif

Intuitivement, on pourrait penser que NVMe est supérieur à Temp. Or, en écriture 4K soutenue :

  • Temp : 153k IOPS
  • NVMe : 60k IOPS

Ce n’est pas un artefact. De plus : Peak = Steady sur NVMe Cela indique un plafond structurel, pas un effet transitoire. La performance dépend donc du chemin I/O exposé par le SKU, pas uniquement de la nature “NVMe” du support. C’est un point fondamental.

  • Premium SSD : changement de catégorie

Enfin, nous sommes dans un monde différent avec le premium ssd, En 4K write steady, le Premium SSD monte à 2 926 IOPS, avec un pique à 3500 IOPS. On n’est plus dans la même catégorie. Le disque managé respecte son cap IOPS contractuel :

Ce test montre très clairement la différence entre un stockage managé distant avec limite provisionnée et stockage local intégré au SKU.

Si un stockage persistant est nécessaire, à vous maintenant de voir quel disque correspondra mieux à vos besoins :

  • Pourquoi regarder p99/p99.9 et pas juste les IOPS ?

Microsoft documente les notions de limites cached/uncached et le fait qu’un workload peut être IO capped. Quand cela arrive :

  • Les IOPS plafonnent
  • La file d’attente sature
  • La latence augmente

Ton plateau write NVMe en 4K random (QD sweep) a exactement la signature d’une limite plateforme. Deux disques peuvent faire 100k IOPS :

  • L’un avec P99.9 à 10 ms
  • L’autre avec P99.9 à 50+ ms

Ils n’auront pas du tout la même sensation côté OS. Le P99.9 capture les moments où :

  • la queue est saturée
  • un flush bloque
  • un throttling intervient

C’est ce qui compte en production.

  • Comment le cache d’Azure nous trompe ?

Microsoft indique qu’un disque avec host caching peut temporairement dépasser la limite disque. Cela explique pourquoi :

  • CrystalDiskMark peut afficher des chiffres “incroyables”
  • Un bench court peut mesurer le cache plutôt que le support réel

Si un benchmark va “trop vite”, c’est souvent un cache. De plus :

  • Microsoft recommande un warm-up
  • Les cached reads atteignent leurs meilleurs chiffres après stabilisation

Le cache modifie donc la mesure. En write, ce n’est pas magique :

Quand le caching est en Read/Write, l’écriture doit être validée dans le cache et sur le disque.
Elle compte dans les limites cached et uncached. Le cache ne supprime pas la limite soutenue.

  • Pourquoi certains outils de mesure peuvent être trompeur lors de tests sur Azure ?

De ce fait, certains outils comme CrystalDiskMark, sont très bien pour un smoke test, mais :

  • Les durées courtes,
  • Les patterns,
  • et l’absence de phase de warm-up

font qu’ils mesurent souvent le cache, pas le support réel. Un chiffre « trop beau » est souvent… un cache.

  • La limite n’est pas le disque. C’est la VM :
VMvCPUPeak 4K ReadPeak 4K WriteSteady 4K WriteP99 Write (µs)P99.9 Write (µs)
D32ads_v732~146k~60k~60k~601~1048
D64ads_v764~291k~120k~120k~580~1010
VMSeq ReadSeq Write
D32ads_v7~1071 MiB/s~536 MiB/s
D64ads_v7~2144 MiB/s~1067 MiB/s

Ces nouveaux tests montrent un comportement très clair :

  • NVMe en D32 plafonne à ~60k IOPS write
  • Le même NVMe en D64 monte à ~120k IOPS
  • La latence reste comparable

Le support physique n’a pas changé. Le workload n’a pas changé. Le placement n’a pas changé.Ce qui a changé : le SKU, cela démontre que Le plafond de performance est imposé par la capacité I/O exposée par la VM, pas par le média NVMe lui-même.

Autrement dit, le NVMe ne “donne” pas 60k IOPS, la VM D32 expose 60k IOPS.

Mais attention, les chiffres donnés dans la documentation Microsoft décrivent le potentiel maximal du stockage local temporaire de la VM (souvent agrégé sur plusieurs disques). Un disque OS éphémère ‘NVMe placement’ n’est pas automatiquement équivalent à ce chemin I/O, et un test ‘fichier’ ajoute un overhead. On compare donc des plafonds de nature différente.

  • Pourquoi les tests “fsync=1” ne prouvent pas la durabilité ?

fsync=1 mesure le coût d’un flush côté OS, mais ne prouve pas la persistance réelle sur le média ou la résistance à un crash hôte. fio indique qu’en non-buffered I/O, il peut ne pas sync comme attendu :

  • fsync=1 force un flush côté OS
  • mais ça ne valide pas une persistance réelle côté hyperviseur / host
  • ce n’est pas un test de crash-consistency

Donc si tu veux un “durability test”, il faut une variante (ex : buffered ou job dédié) et mesurer la phase sync séparément.

Conclusion

Si je résume :

  • Les trois disques OS éphémères surpassent le Premium SSD managé
  • NVMe offre une latence très stable et évolue fortement avec le SKU
  • Temp placement reste le plus performant en écriture 4K soutenue dans ce test précis
  • Cache dépend davantage du comportement de file d’attente

Mais surtout, Microsoft a raison : la performance dépend du stockage local. Mais ce que la documentation ne met pas en avant, c’est que le stockage local n’est pas homogène selon le placement. Et c’est là que tout se joue :

  • Les différences ne sont pas toujours visibles sur l’IOPS moyen. Elles apparaissent dans les percentiles élevés (p99/p99.9)
  • C’est exactement ce que Microsoft ne détaille pas explicitement : la performance dépend du stockage local… mais le stockage local n’a pas la même nature physique selon le placement

D’un point de vue technique :

  1. Le placement ne change pas le coût
  2. Le placement ne change pas la “promesse marketing”
  3. Mais le placement change le chemin I/O réel

Et donc, en fonction de la charge de travail :

  • Pour une charge de travail sensible à la latence (SQL temporaire, build intensif, traitement parallèle), le NVMe placement est clairement le plus intéressant.
  • Pour des workloads stateless classiques, Temp reste un excellent compromis.
  • Le Cache placement, sur des générations plus anciennes, reste viable mais moins moderne.
  • Enfin, un Premium SSD managé reste plus simple opérationnellement, mais il est largement dépassé en performance pure par le stockage local éphémère.

Coûts des stockages Azure

Les récentes et excellentes vidéos postées par Travis Roberts sur sa chaîne YouTube m’ont motivé de faire des tests sur différents espaces de stockages Azure. Le choix de la forme de stockage sur le Cloud est primordial, car il détermine son prix et ses performances selon vos besoins. D’ailleurs, saviez-vous qu’il existe maintenant un compte de stockage provisionné v2 de type de standard ?

Sa première vidéo, visible ci-dessous, montre les 3 modèles de facturation disponibles sur le compte de stockage Azure :

  • Pay-As-You-Go (PAYG)
  • Provisionné V1
  • et le tout nouveau Provisionné V2 :

Sa seconde vidéo, disponible ci-dessous, vous fournit des conseils pratiques pour assurer un fonctionnement sans souci pour FSLogix, tout en mettant en lumière les mauvaises configurations pouvant entraîner des goulots d’étranglement très frustrants au niveau des performances :

Pour rappel, plusieurs articles sur ce blog ont déjà abordé le sujet du stockage sur Azure :

Enfin, Microsoft met à disposition plusieurs pages de documentation très intéressantes sur les stockages Azure et leurs performances, dont voici quelques liens :

Dans cet article, je vous propose donc un petit exercice de test de performances de différents espaces de stockages Azure, comprenant à la fois différents types de disques managés et comptes de stockages :

  • Disques :
    • Premium SSD
    • Standard SSD
    • Standard HDD
    • Premium SSD v2
  • Comptes de stockage :
    • provisionné v2
    • provisionné v1
    • PAYG – Optimisé aux transactions
    • PAYG – Chaud
    • PAYG – Froid

Maintenant, il nous reste plus qu’à tester tout cela 😎💪

Etape 0 – Rappel des prérequis :

Peu de prérequis sont nécessaires pour réaliser les tests de performances sur des espaces de stockage Azure :

  • Un tenant Microsoft
  • Une souscription Azure valide

Dans cet article, nous allons déployer une machine virtuelle Azure, et différents types de stockage. Cela nous permettra de comparer leurs performances, avec pour socle un environnement de test commun.

Etape I Déploiement de la machine virtuelle Azure :

Afin de tester différents types de disque, j’ai donc déployé une machine virtuelle sur Windows. J’ai choisi une machine virtuelle de type D32s v5 pour disposer de :

Depuis le portail Azure, commencez par rechercher le service des machines virtuelles :

Cliquez-ici pour créer votre machine virtuelle :

Renseignez tous les champs concernant la souscription Azure et la région adéquates :

Choisissez une image, puis taille de machine virtuelle présente dans la liste :

Renseignez les identifiants du compte administrateur local, cochez la case concernant la licence, puis cliquez sur Suivant :

Dans l’onglet dédié au stockage, ajoutez tous les disques que vous souhaitez comparer, puis cliquez sur Suivant :

Retirer l’adresse IP publique de votre machine virtuelle, puis lancez la validation Azure :

Quand la validation est réussie, lancez le déploiement de votre machine virtuelle de test :

Une fois le déploiement terminé, cliquez ici pour consulter votre machine virtuelle :

Activez les insights de votre machines virtuelles afin de récupérer quelques métriques de performance :

Configurer le stockage de ces insights sur un LOA :

Déployez également le service Azure Bastion pour vous y connecter plus facilement en RDP de façon sécurisée :

Notre machine virtuelle est maintenant déployée, nous pourrons nous y connecter quand le service Azure Bastion sera entièrement déployé.

En attendant, nous allons pouvoir continuer les déploiements des autres stockages Azure.

Etape II Déploiement des comptes de stockages Azure :

Depuis le portail Azure, commencez par rechercher le service des comptes de stockage :

Cliquez-ici pour créer votre premier compte de stockage :

Nommez ce dernier, spécifiez le SKU voulu, puis lancez la validation Azure :

Une fois la validation Azure réussie, lancez la création de votre premier compte de stockage :

Comme le montre la copie d’écran ci-dessous, j’ai créé plusieurs compte de stockage afin de comparer les éléments suivants :

  • Les performances IOPS bande passante
  • Les performances de bande passante
  • Les prix

J’ai donc configuré les comptes de stockage Azure selon les caractéristiques suivants :

J’ai souhaité créer autant de comptes de stockage que de partage Azure Files afin de ne pas créer d’interférences dans leurs performances :

Voici le compte de stockage avec un Azure File dont le niveau d’accès est optimisé pour les transactions :

Voici le compte de stockage avec un Azure File standard en provisionnement v2 :

Voici le compte de stockage avec un Azure File de type premium :

Voici le compte de stockage avec un Azure File dont le niveau d’accès est chaud :

Voici le compte de stockage avec un Azure File dont le niveau d’accès est froid :

Pour chacun des comptes de stockage, j’ai récupéré le script de connexion en utilisant leur clef d’accès respective afin de monter les partages en lecteurs réseaux sur ma machine virtuelle de test :

La suite se passe directement sur la machine virtuelle de test.

Etape III – Configurations des stockages :

Connectez-vous à votre machine virtuelle de test avec le compte d’un administrateur local :

Une fois connecté à votre session à distance, ouvrez le gestionnaire de disque Windows :

Le gestionnaire de disque Windows vous propose automatiquement de lancer l’initialisation des nouveaux disques de données ajoutés, cliquez sur OK :

Ajoutez un volume simple sur chacun des disques ajoutés :

Nommez au besoin les disques afin de les identifier plus rapidement :

Ouvrez Windows Terminal afin de monter les différents Azure File créés sur les comptes de stockages :

Contrôlez la présence de tous les stockages dans l’explorateur de fichier, encore une fois, renommez-les au besoin :

Etape IV – Installation de l’outil de mesure Diskspd :

DISKSPD est un outil que vous pouvez personnaliser pour créer vos propres charges de travail synthétiques. Nous utiliserons la même configuration que celle décrite ci-dessus pour exécuter des tests d’évaluation. Vous pouvez modifier les spécifications pour tester différentes charges de travail.

Microsoft Learn

Microsoft recommande d’utiliser l’utilitaire DiskSpd (https://aka.ms/diskspd) pour générer une charge sur un système de disques (stockage) et … pour mesurer les performances du stockage et obtenir la vitesse maximale disponible en lecture/écriture et les IOPS du serveur spécifique.

Windows OS Hub

Sur votre machine virtuelle de test, téléchargez l’exécutable via ce lien Microsoft, puis ouvrez l’archive ZIP téléchargée :

Copiez le contenu de l’archive dans un nouveau dossier créé sur le disque C :

L’exécutable se trouve dans le sous-dossier amd64 :

Les 2 étapes suivantes sont dédiées aux tests de performances des disques via l’application Diskspd. Microsoft met d’ailleurs à disposition un protocole similaire de tests juste ici :

  • Deux séries de tests sont conseillées pour exploiter le deux caractéristiques suivantes :
    • IOPS
    • Débit
  • Le changement entre ces deux séries se fera au niveau de la taille des blocs.

Etape V – Tests des IOPS des stockages Azure :

Commencez une première salve de tests pour déterminer les IOPS max pour chacun des espaces de stockage.

Ouvrez Windows PowerShell ISE, puis lancez les commandes des test suivantes, une à une ou à la chaîne, en modifiant les paramètres si besoin :

C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b8K -Sh -L -c50G D:\diskpsdtmp.dat > IOPS-PremiumSSD.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b8K -Sh -L -c50G G:\diskpsdtmp.dat > IOPS-StandardSSD.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b8K -Sh -L -c50G H:\diskpsdtmp.dat > IOPS-StandardHDD.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b8K -Sh -L -c50G F:\diskpsdtmp.dat > IOPS-PremiumSSDv2.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b8K -Sh -L -c50G V:\diskpsdtmp.dat > IOPS-jlostov2std.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b8K -Sh -L -c50G W:\diskpsdtmp.dat > IOPS-jlostov1prm.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b8K -Sh -L -c50G X:\diskpsdtmp.dat > IOPS-jlostopaygopt.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b8K -Sh -L -c50G Y:\diskpsdtmp.dat > IOPS-jlostopayghot.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b8K -Sh -L -c50G Z:\diskpsdtmp.dat > IOPS-jlostopaygcool.txt

Les arguments utilisés pour diskspd.exe sont les suivants :

  • -d900 : durée du test en secondes
  • -r : opérations de lecture/écriture aléatoires
  • -w100 : rapport entre les opérations d’écriture et de lecture 100%/0%
  • -F4 : nombre de threads max
  • -o128 : longueur de la file d’attente
  • -b8K : taille du bloc
  • -Sh : ne pas utiliser le cache
  • -L : mesure de la latence
  • -c50G : taille du fichier 50 GB (il est préférable d’utiliser une taille de fichier importante pour qu’il ne parte pas dans le cache du contrôleur de stockage)
  • E:\diskpsdtmp.dat : chemin du fichier généré pour le test
  • > IOPS-PremiumSSD.txt : fichier de sortie des résultats

Une fois tous les tests terminés, retrouvez les fichiers des résultats :

Ouvrez chacun des fichiers de résultats, puis descendez au paragraphe suivant :

Continuons avec les tests sur les débits maximums des espaces de stockage Azure.

Etape VI – Tests des débits des stockages Azure :

Continuez avec une seconde salve de tests pour mesurer les débits maximums des types de disque Azure.

Toujours sur Windows PowerShell ISE, puis lancez les commandes des test suivantes, une à une ou à la chaîne, en modifiant les paramètres si besoin :

C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b64K -Sh -L -c50G D:\diskpsdtmp.dat > Throughput-PremiumSSD.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b64K -Sh -L -c50G G:\diskpsdtmp.dat > Throughput-StandardSSD.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b64K -Sh -L -c50G H:\diskpsdtmp.dat > Throughput-StandardHDD.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b64K -Sh -L -c50G F:\diskpsdtmp.dat > Throughput-PremiumSSDv2.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b64K -Sh -L -c50G V:\diskpsdtmp.dat > Throughput-jlostov2std.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b64K -Sh -L -c50G W:\diskpsdtmp.dat > Throughput-jlostov1prm.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b64K -Sh -L -c50G X:\diskpsdtmp.dat > Throughput-jlostopaygopt.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b64K -Sh -L -c50G Y:\diskpsdtmp.dat > Throughput-jlostopayghot.txt
C:\SPD\amd64\diskspd.exe -d900 -r -w100 -F4 -o128 -b64K -Sh -L -c50G Z:\diskpsdtmp.dat > Throughput-jlostopaygcool.txt

Les arguments utilisés pour diskspd.exe sont les suivants :

  • -d900 : durée du test en secondes
  • -r : opérations de lecture/écriture aléatoires
  • -w100 : rapport entre les opérations d’écriture et de lecture 100%/0%
  • -F4 : nombre de threads max
  • -o128 : longueur de la file d’attente
  • -b64K : taille du bloc
  • -Sh : ne pas utiliser le cache
  • -L : mesure de la latence
  • -c50G : taille du fichier 50 GB (il est préférable d’utiliser une taille de fichier importante pour qu’il ne parte pas dans le cache du contrôleur de stockage)
  • E:\diskpsdtmp.dat : chemin du fichier généré pour le test
  • > IOPS-PremiumSSD.txt : fichier de sortie des résultats

Une fois tous les tests terminés, retrouvez les fichiers des résultats :

Ouvrez chacun des fichiers de résultats, puis descendez au paragraphe suivant :

Pour plus de clarté, j’ai synthétisé tous mes résultats de IOPS et DEBITS dans l’étape suivante.

Etape VII – Synthèse des résultats :

Voici un tableau synthétique des différentes mesures faites sur 5 essais :

  • v1 premier essai à la chaîne (Les IOPS, puis les DEBITS)
  • v2 second essai à la chaîne (Les IOPS, puis les DEBITS)
  • v3 troisième essai en même temps (Tous les IOPS, puis tous les DEBITS)
  • v4 quatrième essai en même temps (Les IOPS, puis les DEBITS)
  • v5 dernier essai à la chaîne (Les IOPS, puis les DEBITS)

Les performances IOPS et DÉBITS sont différentes, car les configurations des espaces de stockages sont différentes.

J’ai souhaité comparer les chiffres de Diskspd avec ceux donnés par Azure Monitor.

Pour les disques de la machine virtuelles, nous sommes sur les mêmes chiffres entre les 2 sources :

  • IOPS :
  • Débits :

Pour les comptes de stockages, c’est plus difficile à vérifier, car seuls des volumes de transactions sont disponibles en tant que métriques Azure :

Mais le compte de stockage de type v1 (premium) affiche bien les mêmes IOPS :

En revanche, pour les débits sur ce même compte de stockage de type v1 (premium), j’avais obtenu via Diskspd des chiffres correspondant à la moitié de ceux donnés par Azure Monitor :

Etape VIII – Analyse des coûts :

Tous les stockages Azure listés dans cet articles fonctionnent sur différentes grilles tarifaires. Azure Pricing Calculator nous donne malgré tout un premier point de comparaison grossier.

Le tableau ci-dessous reprend toutes les options de base des stockages Azure, sans y inclure de transactions, et en prenant que pour paramètre une taille de 1024 Go :

A titre d’information, le disque Premium SSD v2 semble meilleur marché que le disque Premium SSD quand les performances configurées sont les mêmes :

Enfin, ayant testé Diskspd de façon 100% identique sur tous les stockages testés, je trouvais intéressant de vous montrer l’impact financier via le Gestionnaire des coûts Azure.

Diskspd a donc été lancé au total 10 x 15 minutes sur les 9 espaces de stockage Azure, et cela donne les coûts suivants :

Malgré des performances très honorables, les comptes de stockages de type PAYG sont à proscrire si les opérations d’écriture et de lecture sont très fréquentes :

  • Coûts sur le compte de stockage froid : les opérations d’écritures représentent 99.99% du coût total !
  • Coûts sur le compte de stockage chaud : les opérations d’écritures représentent 99.99% du coût total !
  • Coûts sur le compte de stockage optimisé pour les transactions : les opérations d’écritures représentent 99.90% du coût total !
  • Le tarif élevé du compte de stockage standard v2 s’explique par la configuration très poussée sur ce dernier

Mais Diskspd n’aura pas été capable de les atteindre :

  • Quant aux disques de la machine virtuelles, leurs coûts semblent pour eux très contenus :

Et cela malgré la configuration très performante renseignée sur le disque Premium SSD v2 :

C’est à se demander si les profils FSLogix n’auraient pas leur place sur un disque Premium SSD v2, en lieu et place d’un compte de stockage Premium, mais sans oublier bien sûr d’y ajouter le prix de la machine virtuelle :

Conclusion

En conclusion, les comptes de stockage et les disques managés Azure offrent tous deux des solutions robustes et flexibles pour répondre à divers besoins de performance. Les nouvelles options de SKU permettent de personnaliser les débits et les IOPS, offrant ainsi une adaptabilité précieuse pour des exigences spécifiques. La visualisation des performances via Azure Monitor ajoute une couche de transparence et de contrôle appréciable.

Cependant, au-delà des performances, le coût reste un facteur crucial à considérer. Les frais peuvent rapidement augmenter en fonction du type de stockage et des opérations effectuées. Il est donc essentiel de garder à l’esprit les coûts associés et de toujours se référer aux caractéristiques des disques, aux options de stockage disponibles, ainsi qu’aux fonctionnalités de récupération et de réplication.

Ces éléments sont déterminants pour faire un choix éclairé et optimiser l’utilisation des ressources Azure.

Apprivoisez le stockage Azure

Le stockage de données est présent dans toute infrastructure IT. Il peut se présenter sous différentes formes selon le besoin. Une base de données ou un serveur de fichiers sont les exemples les plus connus. Mais il est possible d’en avoir besoin sous d’autres formes, comme pour du stockage objet (sauvegardes) ou des services de messageries (transitoires) entre applications.

Quel que soit son type, les fournisseurs de Cloud disposent d’une flexibilité inégalée, car leur offre de stockage peut s’adapter aux besoins dans la forme et dans le temps. Pour cela, les calculateurs de prix, comme Azure Pricing Calculator, sont d’une grande aide pour estimer au mieux le coût du stockage.

Prenons en exemple le compte de stockage Azure. Il s’agit est une ressource régulièrement utilisée car elle couvre justement plusieurs types de stockage :

Voici d’ailleurs quelques articles de ce blog parlant du stockage Azure, ainsi qu’une très bonne vidéo d’introduction en français :

Enfin, cet article s’inscrit dans la continuité des précédents exercices ateliers, dont voici les liens directs :

Afin de vous familiariser avec le compte de stockage Azure, je vous propose de suivre cet exercice dédié. La version originale de Microsoft est également disponible en anglais sur la page GitHub juste ici. Voici la liste des tâches que nous allons réaliser :

  • Tâche 1 : Préparez votre environnement Azure
  • Tâche 2 : Créez votre compte de stockage Azure
  • Tâche 3 : Testez le stockage Azure blob
  • Tâche 4 : Créez un partage de fichiers Azure
  • Tâche 5 : Gérer l’accès au réseau du compte de stockage Azure
  • Tâche 6 : Joignez le compte de stockage à un Active Directory

Je me répète souvent, mais une ressource déployée entraîne un début de facturation de la part de Microsoft. Il est donc important de correctement dimensionner les ressources, et de les supprimer quand elles ne sont plus utilisées.

Rappel des prérequis :

Pour réaliser cet exercice Azure, il vous faudra disposer de :

  • Un tenant Microsoft
  • Une souscription Azure active

Tâche 1 – Préparez votre environnement Azure :

Commencez par télécharger localement les fichiers de scripts Microsoft disponibles juste ici :

Décompressez cette archive ZIP sur votre poste local :

Depuis votre portail Azure, ouvrez Azure Cloud Shell via l’icône situé en haut à droite :

Configurez si besoin les options liées à la création du compte de stockage utilisé pour Azure Cloud Shell :

Attendez que le compte de stockage soit créé et que la ligne de commande d’Azure Cloud Shell vous soit accessible :

Dans la barre d’outils d’Azure Cloud Shell, cliquez sur l’icône pour téléverser des fichiers vers le compte de stockage :

Commencez par téléverser le premier fichier présent dans l’archive précédemment décompressée :

\Allfiles\Labs\07\az104-07-vm-template.json

Puis téléversez le second fichier suivant :

\Allfiles\Labs\07\az104-07-vm-parameters.json

Copiez la commande suivante en modifiant si besoin la région Azure souhaitée :

$location = 'West Europe'

Faites-en de même pour une seconde variable, en modifiant si besoin le nom du groupe de ressources à créer :

$rgName = 'az104-07-rg0'

Exécutez la commande suivante dans votre Azure Cloud Shell pour créer le groupe de ressources qui hébergera la machine virtuelle créée juste après :

New-AzResourceGroup -Name $rgName -Location $location

Attendez quelques secondes, puis constatez le succès de la création :

Exécutez ensuite la commande suivante pour déployer une machine virtuelle grâce aux deux fichiers précédemment téléversés :

New-AzResourceGroupDeployment `
   -ResourceGroupName $rgName `
   -TemplateFile $HOME/az104-07-vm-template.json `
   -TemplateParameterFile $HOME/az104-07-vm-parameters.json `
   -AsJob

Spécifiez un mot de passe pour le compte de l’administrateur local de votre Windows Server :

La création de la machine est alors effectuée en tâche de fond. Il n’est donc pas nécessaire d’attendre que le déploiement se termine :

Fermez le volet d’Azure Cloud Shell.

Suivez l’avancement du déploiement de votre VM depuis le groupe de ressources :

Quelques minutes plus tard, retrouvez les ressources créées dans la page principale du groupe de ressources :

Recherchez dans vos machines virtuelles celle créée à l’instant par le script :

Afin de préparer une connexion future, cliquez-ici pour déployer le service Azure Bastion :

Cliquez-ici pour déployer un Azure Bastion en utilisant une configuration par défaut :

Le déploiement d’Azure Bastion a commencé, inutile d’attendre la fin de son déploiement. Nous allons pouvoir nous intéresser au compte de stockage Azure.

Tâche 2 – Créez votre compte de stockage Azure :

Depuis le portail Azure, recherchez puis sélectionnez le service comptes de stockage :

Cliquez sur Créer pour ajouter un second compte de stockage :

Sur le premier onglet, commencez par créer un nouveau groupe de ressources Azure :

Donnez à votre compte de stockage un nom, unique dans tout l’environnement Azure :

Prenez du temps pour passer en revue les options disponibles, puis cliquez sur Suivant :

Prenez du temps pour passer en revue les options disponibles, puis cliquez sur Suivant :

Prenez du temps pour passer en revue les options disponibles, puis cliquez sur Suivant :

Prenez du temps pour passer en revue les options disponibles, puis cliquez sur Suivant :

Prenez du temps pour passer en revue les options disponibles, puis cliquez sur Valider :

Une fois la validation terminée, lancez la création de votre compte de stockage :

Environ une minute plus tard, la création de votre compte de stockage est terminée. Cliquez-ici pour accéder directement à votre compte de stockage :

Dans la section Redondance, notez l’emplacement secondaire, présent grâce à l’option GRS laissée lors de la création de votre compte de stockage :

Un compte de stockage vide ne coûte rien. Le volume de données et les transactions vont générer les coûts.

Tâche 3 – Testez le stockage Azure blob :

Cliquez sur Conteneurs, puis cliquez sur Créer pour en créer un nouveau :

Créez un conteneur blob avec les options suivantes, puis cliquez sur Créer :

Dans la liste des conteneurs blob, cliquez sur le conteneur az104-07-container nouvellement créé :

Cliquez sur Téléverser pour déposer un fichier depuis votre ordinateur vers votre conteneur :

Retrouvez les fichiers de l’archive décompressée, puis choisissez le fichier LICENCE :

Dans l’onglet Avancée, ajoutez le dossier licenses, puis cliquez sur Téléverser :

Environ une seconde plus tard, Azure vous confirme le succès de l’envoi du fichier et la création du dossier :

Retrouvez sur la page le dossier nouvellement créé, puis cliquez dessus :

Dans ce dossier, constatez le tier utilisé par le fichier LICENSE précédemment téléversé :

Cliquez sur le fichier LICENSE, puis copiez l’URL du blob comme ceci :

Ouvrez un navigateur privé depuis votre poste local :

Collez l’URL du blob copiée précédemment dans la barre d’adresse, puis constatez le message erreur d’accès, dû à un manque d’autorisations :

Afin de pouvoir accéder au blob, générez un accès SAS, en y indiquant une date de validité supérieure à la date du jour :

Copiez l’URL générée par votre accès SAS de votre blob LICENSE :

Voici en exemple URL avec mon accès SAS :

https://jlosto2.blob.core.windows.net/az104-07-container/licenses/LICENSE?sp=r&st=2023-04-25T19:34:42Z&se=2023-04-27T03:34:42Z&spr=https&sv=2021-12-02&sr=b&sig=YQUFaXmpBJhi7E3bt5WmmuF%2FmszjQ29UP46YS9747zU%3D

Rouvrez à nouveau un navigateur privé depuis votre poste local :

Collez l’URL précédemment copiée, puis constatez le téléchargement ou l’affichage du fichier LICENSE :

Ouvrez le fichier LICENSE si celui-ci ne s’est pas affiché :

Dans un autre registre, un serveur de fichiers est aussi remplaçable par un service Azure PaaS. Déjà cité plus haut, l’article Stockez vos données sur un service PaaS vous explique également quelques notions importantes.

Tâche 4 – Créez un partage de fichiers Azure :

Sur votre compte de stockage, cherchez le menu Partages de fichiers afin d’en créer un nouveau :

Nommez ce partage de fichiers az104-07-share conservant les propriétés par défaut :

Une fois créé, cliquez sur votre partage de fichiers :

Cliquez sur le bouton Connecter :

Sur la partie de droite, choisissez de vous connecter via la clef du compte de stockage, puis affichez le script de connexion afin de le copiez dans votre presse-papier :

Retournez sur la machine virtuelle créée précédemment, puis allez dans le menu suivant :

Collez le script précédemment copié, puis lancez l’exécution du traitement :

Attendez environ deux minutes, puis constatez sa bonne exécution :

Ce script lancé à distance sur la machine virtuelle a monté un lecteur réseau Z. La connexion est passée par l’URL publique via une session HTTPS.

Copiez les deux lignes de code ci-dessous dans votre presse-papier :

New-Item -Type Directory -Path 'Z:\az104-07-folder'

New-Item -Type File -Path 'Z:\az104-07-folder\az-104-07-file.txt'

Encore une fois, collez ce code, puis lancez l’exécution du traitement :

Attendez environ deux minutes, puis constatez sa bonne exécution :

Ce second script lancé à distance a créé dans le partage un dossier et un fichier txt depuis la machine virtuelle.

Retournez sur le partage de fichiers depuis le compte de stockage Azure :

Cliquez sur le dossier nouvellement créé :

Constatez la bonne présence du fichier txt :

Intéressons-nous maintenant à la configuration réseau de votre compte de stockage. Les URLs précédemment utilisées pour le blob et le partage de fichiers reprenaient l’accès publique de votre compte de stockage.

Un filtrage réseau est possible pour bloquer l’accès en plus de l’authentification déjà en place.

Tâche 5 – Gérer l’accès au réseau du compte de stockage Azure :

Sur votre compte de stockage, activez la restriction firewall à des réseaux virtuels connus, ainsi que votre adresse IP publique comme ceci :

Ouvrez à nouveau un navigateur internet privé :

Collez l’URL précédemment générée pour l’accès SAS de votre blob dans la barre d’adresse :

https://jlosto2.blob.core.windows.net/az104-07-container/licenses/LICENSE?sp=r&st=2023-04-25T19:34:42Z&se=2023-04-27T03:34:42Z&spr=https&sv=2021-12-02&sr=b&sig=YQUFaXmpBJhi7E3bt5WmmuF%2FmszjQ29UP46YS9747zU%3D

Constatez le téléchargement ou l’affichage du fichier LICENSE :

Ouvrez Azure Cloud Shell via l’icône situé en haut à droite du portail Azure :

Reprenez la commande suivante et ajoutez-y l’URL précédemment générée pour l’accès SAS de votre blob :

Invoke-WebRequest -URI '[blob SAS URL]'

Cela donne dans mon cas la commande suivante :

Invoke-WebRequest -URI 'https://jlosto2.blob.core.windows.net/az104-07-container/licenses/LICENSE?sp=r&st=2023-04-25T19:34:42Z&se=2023-04-27T03:34:42Z&spr=https&sv=2021-12-02&sr=b&sig=YQUFaXmpBJhi7E3bt5WmmuF%2FmszjQ29UP46YS9747zU%3D'

Exécutez la commande, puis constatez l’erreur dû un blocage du firewall configuré précédemment sur le compte de stockage :

Retournez sur la configuration réseau et firewall de votre compte de stockage, puis ajoutez un réseau virtuel :

Sélectionnez le réseau virtuel et le sous-réseau rattaché à la machine virtuelle créée :

Attendez quelques secondes que le service endpoint s’active sur le sous-réseau sélectionné :

Une fois activé, ajoutez-le à la configuration :

N’oubliez pas de sauvegarde la configuration réseau du compte de stockage :

Si votre réseau virtuel n’apparait pas, exécutez les deux commandes PowerShell suivantes sous Azure Cloud Shell and modifiant les variables :

Get-AzVirtualNetwork -ResourceGroupName "myresourcegroup" -Name "myvnet" | Set-AzVirtualNetworkSubnetConfig -Name "mysubnet" -AddressPrefix "10.0.0.0/24" -ServiceEndpoint "Microsoft.Storage.Global" | Set-AzVirtualNetwork
$subnet = Get-AzVirtualNetwork -ResourceGroupName "myresourcegroup" -Name "myvnet" | Get-AzVirtualNetworkSubnetConfig -Name "mysubnet"
Add-AzStorageAccountNetworkRule -ResourceGroupName "myresourcegroup" -Name "mystorageaccount" -VirtualNetworkResourceId $subnet.Id

Nous avons vu certaines restrictions possibles pour bloquer des connexions réseaux non souhaitées. Dans la prochaine tâche, nous allons voir comment joindre un compte de stockage à un domaine AD.

Tâche 6 – Joindre le compte de stockage à un Active Directory :

A l’heure actuelle, il existe 3 méthodes de joindre un compte de stockage Azure à un domaine. Dans notre exercice, nous utiliserons la première méthode, grâce à la machine virtuelle créée précédemment :

Connectez-vous à la machine virtuelle créée précédemment via le script en reprenant comme identifiant Student, et comme mot de passe celui renseigné lors de la création de la VM :

Une fois connecté à la machine virtuelle, ajoutez des rôles à votre Windows Server :

Cliquez sur Suivant :

Cliquez sur Suivant :

Cochez les deux rôles AD DS et DNS, puis cliquez sur Suivant :

Cliquez sur Suivant :

Cliquez sur Suivant :

Cliquez sur Suivant :

Cliquez sur Installer :

Attendez environ deux minutes que l’installation des 2 rôles se termine :

Cliquez-ici pour promouvoir votre machine virtuelle en tant que contrôleur de domaine :

Créez une nouvelle forêt et nommez votre domaine AD comme vous le souhaitez, puis cliquez sur Suivant :

Créez un mot de passe pour la DSRM, puis cliquez sur Suivant :

Cliquez sur Suivant :

Cliquez sur Suivant :

Cliquez sur Suivant :

Cliquez sur Suivant :

Cliquez sur Installer :

Cliquez sur Fermer puis fermez l’onglet Azure Bastion :

Copiez l’adresse IP privée de votre machine virtuelle :

Sur le réseau virtuel de votre VM, renseignez l’adresse IP privée dans la section DNS :

Dans la section des partages de fichiers de votre compte de stockage, constatez l’absence de configuration Active Directory :

Rouvrez une session sur votre machine virtuelle via Azure Bastion :

Attendez la fin de l’ouverture de session plusieurs minutes :

Dans Server Manager, désactivez la sécurité renforcée d’Internet Explorer :

Désactivez la sécurité pour les utilisateurs ayant un profil administrateur :

Ouvrez Microsoft Edge :

Ouvrez l’URL suivante :

https://github.com/Azure-Samples/azure-files-samples/releases

Téléchargez l’archive ZIP contenant le script de jointure AD :

Décompressez l’archive ZIP :

Décompressez cette archive dans un dossier à la racine du disque C :

Ouvrez Windows PowerShell ISE :

Positionnez-vous dans le dossier contenant l’archive extraite :

Commencez par exécutez les commandes suivantes pour préparer votre environnement

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser

.\CopyToPSPath.ps1

Validez toutes les alertes de sécurité :

Installez les modules nécessaires à la configuration :

install-Module -Name Az
Import-Module -Name AzFilesHybrid

Validez toutes les alertes de sécurité :

Patientez plusieurs minutes avant l’installation complète des modules AZ :

Fermez puis rouvrez la session PowerShell si celui-ci vous le demande :

Connectez à vous à votre compte Azure AD :

Connect-AzAccount

Renseignez les variables suivantes depuis la page de votre compte de stockage Azure :

$SubscriptionId = "<your-subscription-id-here>"
$ResourceGroupName = "<resource-group-name-here>"
$StorageAccountName = "<storage-account-name-here>"

Select-AzSubscription -SubscriptionId $SubscriptionId 

Join-AzStorageAccount `
        -ResourceGroupName $ResourceGroupName `
        -StorageAccountName $StorageAccountName

Le résultat de la commande devrait être le suivant :

En cas de souci, la commande de debug peut vous aider à comprendre ce qui se passe :

Debug-AzStorageAccountAuth -StorageAccountName $StorageAccountName -ResourceGroupName $ResourceGroupName -Verbose

Enfin vérifiez la bonne jointure de votre compte de stockage à Azure Active Directory avec le changement de statut en Configured :

Il reste bien évidemment quelques étapes pour finaliser la configuration afin que les utilisateurs puissent accéder à un partage de fichier via leur compte AD :

Conclusion

Dans cet atelier dédié au stockage et conçu par Microsoft, vous avez :

  • Préparé votre environnement Azure
  • Créé votre compte de stockage Azure
  • Testé le stockage Azure blob
  • Créé un partage de fichiers Azure
  • Géré l’accès au réseau du compte de stockage Azure
  • Joint le compte de stockage à un Active Directory

J’espère que toutes opérations vous ont montré la facilité de déploiement d’un compte de stockage Azure. Enfin, pensez à supprimer les ressources une fois cet atelier terminé afin d’éviter les surcoûts inutiles :

Suppression des ressources Azure :

Que valent les disques Azure ?

Microsoft vient d’annoncer il y quelques jours la disponibilité générale des disques Ultra dans plusieurs régions Azure, dont Suisse Nord. Depuis quelques mois déjà, un nouveau type de disque, appelé Premium SSD v2, a également fait son apparition sur Azure.

Au total, 5 types de disque managé sont disponibles pour les machines virtuelles Azure. SLA, IOPS, débit, taille, région ou encore sauvegarde sont quelques-uns des paramètres à prendre en compte lors de ce choix.

Dans cet article, nous allons aborder quelques points définissant les différents types de disque Azure, et nous ferons également quelques tests de performances IOPS et Débit. Durant mes tests, j’ai relevé des valeurs de latence très hautes. Je ne pense pas qu’elles représentent la réalité, et c’est pour cela qu’elles vous seront affichées mais pas commentées.

Compte-tenu de mes possibilités, à l’heure où ces lignes sont écrites, les tests ne porteront que sur les 4 types de disque suivants :

  • Premium SSD
  • Standard SSD
  • Standard HDD
  • Ultra disk

A quoi correspondent les IOPS d’un disque ?

IOPS (input/output operations per second en anglais, opérations d’entrée-sortie par seconde) est une unité de mesure commune en informatique. Elle est utilisée dans les tests de performance de supports de stockage tels les disques durs (HDD), solid-state drives (SSD) et réseaux de stockage SAN.

Wikipédia

Une courte vidéo de John vaut mieux qu’un long discours ???? :

A quoi correspond le débit d’un disque ?

Taux de transfert (ou débit) : quantité de données pouvant être lues ou écrites sur le disque par unité de temps. Il s’exprime en bits par seconde.

CommentCaMarche.net

Merci encore une fois à John pour ses vidéos :

Quelles sont les tailles disponibles pour un disque Azure ?

Azure vous propose de créer des disques très petits ou très grands. La plupart des types de disque peuvent aller jusqu’à 64 Tio :

Quels sont les coûts d’un disque Azure ?

Il existe deux principaux coûts aux disques managés d’Azure. La taille du disque et les transactions influent sur le montant mensuel :

  • Taille du disque : Un disque managé Azure est facturé toutes les heures au niveau supérieur le plus proche de sa taille. Autrement dit, un disque de 120 Go coûte autant qu’un disque de 128 Go, que la machine virtuelle soit allumée ou non.
  • Transaction : Sont appelées transaction, les lectures, les écritures, … effectuées par le disque, elles sont facturées par paquet de 10 000 transactions. Certains types de disque, comme les disques Premium ou Ultra, incluent le coût des transactions dans leur tarification les coûts sont alors plus prévisibles et mieux maîtrisés.

Voici une brève comparaison tarifaire pour un disque de 128 Go en Europe de l’Ouest, selon Azure Pricing Calculator :

  • Premium SSD : 20.13 CHF / mois
  • Premium SSD v2 : 11.49 CHF / mois
  • Standard SSD : 12.63 CHF / mois
  • Standard HDD : 6.39 CHF / mois
  • Ultra disk : 88.73 CHF / mois

Pourquoi le type de disque influe sur la SLA d’une machine virtuelle Azure ?

Azure est découpé en centaines de services. Chaque service dispose de sa propre SLA, elle-même calculée selon des paramètres précis.

Certains services proposent différents niveaux de performances et de fonctionnalités. Ces changement influent souvent sur l’architecture ou les composants physiques. Cela joue naturellement sur la SLA. Microsoft met à disposition une liste des SLA par service, régulièrement mise à jour.

Derrière chaque disque d’Azure se trouve une technologie de stockage. Microsoft se base donc sur cette SLA pour calculer la SLA de la machine virtuelle :

Quel scénario pour quel type de disque ?

Le coût du disque reste un facteur important pour une machine virtuelle. Néanmoins, Microsoft conseille un ou plusieurs types de disque, selon le rôle que celle-ci doit jouer :

Pourquoi les machines virtuelles Azure ont-elles un maximum d’IOPS ?

Quand vous sélectionnez une taille de machine virtuelle lors de sa création, une colonne concerne la performance des disques et doit attirer votre attention :

Les machines virtuelles d’Azure ont donc elles aussi un plafond IOPS :

Ce nombre maximal d’IOPS ne garantit en rien la performance de vos disques rattachés, mais agira en goulet d’étranglement si la puissance demandée par vos disques est supérieure à cette limite :

Etape 0 – Rappel des prérequis :

Peu de prérequis sont nécessaires pour réaliser les tests de performances des disques Azure :

  • Un tenant Microsoft
  • Une souscription Azure valide

Dans cet article, nous allons déployer une machine virtuelle Azure, avec différents types de disque. Cela nous permettra de comparer leurs performances.

Etape I : Enregistrement de la souscription Azure :

Tous les types de disque sont accessibles, à l’exception du nouveau type de disque Premium SSD v2. A l’heure où ces lignes sont écrites, un enrôlement de votre souscription Azure est encore nécessaire pour déployer ces derniers.

Cliquez-ici pour accéder au formulaire Microsoft :

Une fois le formulaire rempli, il ne vous restera qu’à attendre un retour de la part de Microsoft pour tester ce nouveau type de disque.

En attendant, rien ne vous empêche de continuer les étapes de cet article pour tester les autres types.

Etape II : Déploiement de la machine virtuelle Azure

Afin de tester différents types de disque, j’ai déployé une seule machine virtuelle sur Windows Server. J’ai choisi une machine virtuelle de type D8s v5 pour disposer de :

  • Une puissance de calcul CPU suffisante
  • Un nombre maximal d’IOPS élevé
  • Une limitation haute pour le nombre maximal de disques de données

Dans l’onglet des disques :

  • Pensez à cocher la case de comptabilité Ultra disque.
  • Pour les tests, tous les disques ont une taille proche pour comparer des performances de même tranche.
  • Quelques gigas seulement les séparent pour les identifier plus facilement par leur taille.
  • J’ai ajouté un second disque type Premium SSD, de plus grande capacité que les autres, pour mesurer l’impact sur les performances selon la taille.
J’ai aussi retiré le cache d’hôte pour ne pas avoir de variation de résultats.

Retirez l’adresse IP publique si vous utilisez comme moi le service Azure Bastion :

Quand la validation est réussie, lancez le déploiement de votre machine virtuelle de test :

Une fois le déploiement terminé, cliquez ici pour consulter votre machine virtuelle :

Configurez au besoin les performances de votre Ultra disk :

J’ai configuré ces valeurs pour tester les limites liées à ma machine virtuelles. Attention à la consommation Azure qui peut s’envoler très vite ???????? :

Déployez également le service Azure Bastion pour vous y connecter plus facilement :

Attendez quelques minutes la fin du déploiement d’Azure Bastion, puis connectez-vous à votre machine virtuelle de test avec le compte d’un administrateur local :

Etape III – Configurations des disques de données :

Une fois connecté à votre session à distance, ouvrez le gestionnaire de disque Windows :

Le gestionnaire de disque Windows vous propose automatiquement de lancer l’initialisation des disques de données ajoutés, cliquez sur OK :


Ajoutez un volume simple sur chacun des disques ajoutés :

Conservez toutes les options de bases pour chaque volume créé :

Contrôlez la présence des 5 partitions dans l’explorateur de fichier, renommez-les au besoin :

Etape IV – Installation de l’outil de mesure Diskspd :

DISKSPD est un outil que vous pouvez personnaliser pour créer vos propres charges de travail synthétiques. Nous utiliserons la même configuration que celle décrite ci-dessus pour exécuter des tests d’évaluation. Vous pouvez modifier les spécifications pour tester différentes charges de travail.

Microsoft Learn

Microsoft recommande d’utiliser l’utilitaire DiskSpd (https://aka.ms/diskspd) pour générer une charge sur un système de disques (stockage) et … pour mesurer les performances du stockage et obtenir la vitesse maximale disponible en lecture/écriture et les IOPS du serveur spécifique.

Windows OS Hub

Sur votre machine virtuelle de test, téléchargez l’exécutable via ce lien Microsoft, puis ouvrez l’archive ZIP téléchargée :

Copiez le contenu de l’archive dans un nouveau dossier créé sur le disque C :

L’exécutable se trouve dans le sous-dossier amd64 :

Les 2 étapes suivantes sont dédiées aux tests de performances des disques via l’application Diskspd. Microsoft met d’ailleurs à disposition un protocole similaire de tests juste ici :

  • Deux séries de tests sont conseillées pour exploiter le meilleur des deux caractéristiques :
    • IOPS
    • Débit
  • Le changement entre ces deux séries se fera au niveau de la taille des blocs.

Etape V – Tests des IOPS des disques Azure :

Commencez une première salve de tests pour déterminer les IOPS maximums sur chacun des disques.

Ouvrez le programme de ligne de commande, puis positionnez-vous dans le dossier de l’exécutable Diskspd :

Lancez les commandes des test suivantes, une à une ou à la chaîne, en modifiant les paramètres si besoin :

diskspd.exe –c50G -d120 -r -w100 -F4 -o128 -b8K -Sh -L E:\diskpsdtmp.dat > IOPS-PremiumSSD.txt
diskspd.exe –c50G -d120 -r -w100 -F4 -o128 -b8K -Sh -L F:\diskpsdtmp.dat > IOPS-StandardSSD.txt
diskspd.exe –c50G -d120 -r -w100 -F4 -o128 -b8K -Sh -L G:\diskpsdtmp.dat > IOPS-StandardHDD.txt
diskspd.exe –c50G -d120 -r -w100 -F4 -o128 -b8K -Sh -L H:\diskpsdtmp.dat > IOPS-PremiumSSD1024.txt
diskspd.exe –c50G -d120 -r -w100 -F4 -o128 -b8K -Sh -L I:\diskpsdtmp.dat > IOPS-UltraDisk.txt

Les arguments utilisés pour diskspd.exe sont les suivants :

  • -c50G : taille du fichier 50 GB (il est préférable d’utiliser une taille de fichier importante pour qu’il ne parte pas dans le cache du contrôleur de stockage)
  • -d120 : durée du test en secondes
  • -r : opérations de lecture/écriture aléatoires
  • -w100 : rapport entre les opérations d’écriture et de lecture 100%/0%
  • -F4 : nombre de threads max
  • -o128 : longueur de la file d’attente
  • -b8K : taille du bloc
  • -Sh : ne pas utiliser le cache
  • -L : mesure de la latence
  • E:\diskpsdtmp.dat : chemin du fichier généré pour le test
  • > IOPS-PremiumSSD.txt : fichier de sortie des résultats

En attendant la fin du traitement, ouvrez Resource Monitor et constatez la charge maximale du disque :

Une fois tous les tests terminés, retrouvez les fichiers des résultats dans le même dossier que l’exécutable :

Ouvrez chacun des fichiers de résultats, puis descendez au paragraphe suivant :

Pour plus de clarté, j’ai synthétisé tous mes résultats IOPS dans le tableau ci-dessous :

Etape VI – Tests débits des disques :

Continuez avec une seconde salve de tests pour mesurer les débits maximums des types de disque Azure.

Ouvrez le programme de ligne de commande si vous l’aviez fermé, puis repositionnez-vous dans le dossier de l’exécutable Diskspd :

Lancez les commandes de tests suivantes, une à une ou à la chaîne, en modifiant leurs paramètres si besoin :

diskspd.exe –c50G -d120 -r -w100 -F4 -o128 -b64K -Sh -L E:\diskpsdtmp.dat > Throughput-PremiumSSD.txt
diskspd.exe –c50G -d120 -r -w100 -F4 -o128 -b64K -Sh -L F:\diskpsdtmp.dat > Throughput-StandardSSD.txt
diskspd.exe –c50G -d120 -r -w100 -F4 -o128 -b64K -Sh -L G:\diskpsdtmp.dat > Throughput-StandardHDD.txt
diskspd.exe –c50G -d120 -r -w100 -F4 -o128 -b64K -Sh -L H:\diskpsdtmp.dat > Throughput-PremiumSSD1024.txt
diskspd.exe –c50G -d120 -r -w100 -F4 -o128 -b64K -Sh -L I:\diskpsdtmp.dat > Throughput-UltraDisk.txt

Les deux paramètres ayant changés rapport aux commandes de test IOPS sont :

  • -b8K : taille du bloc
  • > Throughput-PremiumSSD.txt : fichier de sortie des résultats

Une fois les tests débits terminés, retrouvez les fichiers dans le même dossier que les IOPS :

Ouvrez chacun des fichiers de résultats de débits et compilez-les dans un tableau :

Etape VII – Analyse des résultats IOPS / Débits :

Après analyse des résultats de chaque type de disque, comparez-les à la documentation Microsoft : on retrouve bien des valeurs approchantes pour les IOPS et les débits. Voici quelques explications :

Premium SSD :

  • Premium SSD P10 : 3548 IOPS – 162 Mio/sec
  • Premium SSD P30 : 5099 IOPS – 194 Mio/sec

Le nombre d’IOPS et le débit garantit augmentent par parlier, en rapport avec la taille du disque.

  • A partir de 4 Gio et jusqu’à 512 Gio, le mode Burst est disponible et s’active automatiquement selon la charge, comme le montre le test réalisé.
  • A partir de 1024 Gio, les performances de base sont bien meilleures, mais le mode Burst s’active uniquement sur demande.

Voici d’ailleurs l’excellente vidéo de John sur le fonctionnement du mode Burst dans le temps :

Durant le premier test, le disque Premium SSD d’1 Tio n’a pas utilisé le mode Burst et est resté aux alentours de 5000 IOPS et 200 Mio/sec, soit les valeurs provisionnées sur un disque P30.

L’activation du burst à la demande doit se faire sur le disque, uniquement lorsque ce dernier est détaché ou quand la machine virtuelle est désallouée, donc éteinte.

Pour effectuer un test de burst sur le disque P30, éteignez votre machine virtuelle et cochez la case suivante sur le disque, puis rallumez-là :

Voici les résultats IOPS / débits du disque Premium SSD d’un 1 Tio avec le mode burst à la demande :

  • Premium SSD P30 + Burst : 19321 IOPS – 967 Mio/sec

Le test de débit est bon, mais la valeur IOPS aurait dû se rapprocher des 30 000 IOPS. L’écart s’explique à cause de la machine d8s_v5, qui vient limiter les performances du mode burst du disque.

Cela n’empêche pas d’avoir de performances très honorables. Passons maintenant au disques Standard SSD.

Standard SSD :

Je trouve le test de débit un peu faible comparé au tableau Microsoft :

  • Standard SSD E10 : 600 IOPS – 38 Mio/sec

Standard HDD :

Pour celui-ci, les résultats des tests sont cohérents avec la documentation Microsoft :

  • Standard HDD S10 : 543 IOPS – 35 Mio/sec

Rappel important : Pour les disques de type standard HDD, chaque opération a un impact sur la facturation.

Ultra disk :

Ce type de disque apporte le plus de flexibilité car ils sont disponibles à partir de 4 Gio et jusqu’à 64 Tio. De plus, la SLA qui les couvre est très élevée : 99.99 %.

Comme le montre l’écran de paramétrage de notre test, nous pouvons jouer avec les limites débit et IOPS selon des besoins très précis, et cela sans aucun redémarrage de la machine virtuelle.

Les limites maximales des IOPS et des débits sont très hautes, comme le montre le tableau ci-dessous :

Rappel important : Pour les disques Ultra, ces options ont un lourd impact sur la facturation.

Le test d’IOPS sur le disque ultra a plafonné à 20 000 IOPS car nous avons là encore été bridé par la limite d’IOPS de la machine virtuelle d8s_v5. Le tableau ci-dessous nous affiche cette limite et le mode burst possible :

Les machines virtuelles les plus puissantes acceptent jusqu’à 80 000 IOPS, ce qui reste en dessous de la limite maximale des IOPS des plus puissants disques ultra. C’est pour cela que ces derniers peuvent être utilisés en tant que disques partagés, pour prendre en charge plusieurs machines virtuelles.

Conclusion :

Je peux déjà commencer par vous dire que j’aurais bien aimé tester un disque Premium SSD v2 ????. Cela devrait arriver sous peu, je vous ferai alors une mise à jour de cet article.

Cela dit, je pense que les performances et les usages de ces derniers sont proches des disques Ultra. A ce titre, je pense que la stratégie de Microsoft est bien de démocratiser la performance et la customisation des disques selon les besoins, avec un prix bien plus attractif ✌️????

Edit :

Seulement quelques jours après la publication de mon article, j’ai reçu un avis favorable de la part d’un Product Manager de chez Microsoft pour tester les disques Premium SSD v2, sur une souscription Azure de mon tenant, en disponibilité générale depuis octobre 2022.

Je suis parti donc sur un disque Premium SSD v2 avec les caractéristiques suivantes :

Pour rappel, voici quelques caractéristiques maximales pour un disque Premium SDD v2 :

  • Taille maximale : 65 536 Gio
  • IOPS provisionnées : 80 000 IOPS
  • Débit provisionné : 1200 Mio / Sec

Afin d’atteindre les performances maximales de mon disque, j’ai créé une machine virtuelle D32s v5, qui dispose des limites suivantes :

Grâce à Diskspd et aux commandes suivantes :

diskspd.exe –c50G -d120 -r -w100 -F4 -o128 -b8K -Sh -L E:\diskpsdtmp.dat > IOPS-PremiumSSDv2.txt
diskspd.exe –c50G -d120 -r -w100 -F4 -o128 -b64K -Sh -L E:\diskpsdtmp.dat > Throughput-PremiumSSDv2.txt

Cela m’a permis de compléter mes tableaux de performances :

Il s’agit sans aucun doute d’un type de disque flexible aux performances incroyables. Voici un rappel du prix bien moins chère qu’un Ultra disk ????

Attention aux limitations encore présentes sur le disques Premium SSD v2.

Stockez vos données sur un service PaaS

Azure propose depuis longtemps plusieurs méthodes efficaces pour le stockage de donnée dans le Cloud. Disponibles sous différentes formes, le compte de stockage est une méthode PaaS (Platform As A Service) simple, rapide à déployer et pouvant correspondre à de nombreux scénarios d’architecture.

Il y a tant de choses à dire sur le compte de stockage d’Azure, qu’un seul article ne suffira pas. Dans cet article, nous allons donc parcourir les principales fonctionnalités du compte de stockage à travers différentes questions que l’on peut naturellement se poser.

Quels sont les principaux bénéfices du compte de stockage Azure ?

Il est facile de résumer les principaux avantages à utiliser un compte de stockage Azure :

  • Résilient : comme beaucoup de services Azure, celui-ci affiche une haute disponibilité grâce à différents types de redondance (LRS/ZRS/GRS). De plus, les outils de sauvegarde natifs d’Azure s’y applique également.
  • Sécurisé : toute donnée sur un compte de stockage Azure est systématiquement chiffrée. Ce chiffrage est aussi gérable avec une clef CMK.
  • Adaptatif : la flexibilité est une composante majeure du compte de stockage Azure grâce à une tarification ajustable selon la fréquence et les besoins en taille et en performances.
  • Accessible : les données stockées sont accessibles depuis n’importe où dans le monde via le protocole HTTPS. Microsoft fournit également des bibliothèques clientes dans de nombreux langages, notamment .NET, Java, Node.js, Python, PHP, Ruby, Go.

Quels services de stockage sont alors possibles sur un Azure Storage Account ?

Un compte de stockage Azure propose 4 différents services de stockage, selon la nature même des objets à stocker :

  • Objets blob : stockage objet hautement scalable pour les données texte ou binaires.
  • Partage de fichier : partage de fichiers classique géré via le protocole SMB.
  • Files d’attente : outil de messagerie entre différents composants d’application.
  • Tables : magasin NoSQL pour le stockage sans schéma de données structurées.

Quels types de compte de stockage Azure sont disponibles ?

Plusieurs types de comptes de stockage sont proposés par Azure. Il faut en retenir que l’utilisation de tel ou tel type de compte de stockage dépend de la performance désirée et du mode de réplication :

TypeServices disponiblesOptions de redondance disponibles
Usage général v2 StandardBlob, File d’attente, Table et Azure FilesLRS
ZRS
GRS
RA-GRS
GZRS
RA-GZRS
Objets bloc blob PremiumStockage BlobLRS
ZRS
Partage de fichiers PremiumAzure FilesLRS
ZRS
Objets page blob PremiumObjets page blob de pages LRS
Les comptes de stockage à hautes performances proposent une réplication limitée.

Comment la réplication fonctionne sous Azure ?

Les centres de données Azure sont maintenant présents en grand nombre à travers le monde. Il existe donc plus de 60 régions Azure, elles-mêmes regroupées en géographie :

Dans une région Azure, souvent composé de plusieurs centres, aussi appelés zone de disponibilité, sont interconnectés via un réseau haute performance et apporte une protection supplémentaire contre les défaillances matérielles, les pannes de réseau, d’électricité ou les catastrophes naturelles.

Comme vu précédemment, les options de réplication disponibles vont dépendre du type de compte de stockage sélectionné :

  • Donnée sur une région Azure :
    • Stockage localement redondant (LRS) : 3 copies synchrones dans un seul centre de données d’une seule région.
    • Stockage redondant interzone (ZRS) : 3 copies synchrones dans les 3 centres de données d’une seule région.
  • Donnée sur deux régions Azure (région paire de la première)
    • Stockage géo-redondant (GRS) : 3 copies synchrones dans un seul centre de données d’une seule région + 3 copies asynchrones dans un seul centre de données de la région paire de la première.
    • Stockage géo-redondant avec accès en lecture (RA-GRS) : 3 copies synchrones dans un seul centre de données d’une seule région + 3 copies asynchrones dans un seul centre de données de la région paire avec accès en lecture.
    • Stockage géo-redondant interzone (GZRS) : 3 copies synchrones dans 3 centres de données d’une seule région + 3 copies asynchrones dans un seul centre de données de la région paire.
    • Stockage géo-redondant interzone avec accès en lecture (RA-GZRS) : 3 copies synchrones dans les 3 centres de données d’une seule région + 3 copies asynchrones dans un seul centre de données de la région paire avec accès en lecture.

Ces options de réplication ont évidemment un impact conséquent sur les prix, comme le montre ce lien vers le calculateur Azure :

Comment accède-t-on à différents objets sur le compte de stockage ?

Un stockage de données a besoin au minium d’un point réseau pour remplir son rôle dans l’architecture. Par défaut, tout compte de stockage dispose d’URL uniques. Celles-ci reprennent le nom du compte de stockage suivi du service de stockage employé :

  • Service de conteneurs : https://mystorageaccount.blob.core.windows.net
  • Service de table : https://mystorageaccount.table.core.windows.net
  • Service de file d’attente : https://mystorageaccount.queue.core.windows.net
  • Partage de fichiers : https://mystorageaccount.file.core.windows.net

Par exemple, cet accès public met à disposition de la donnée sans authentification, comme par exemple pour un conteneur blob public :

Une URL ne signifie pas que l’accès est non contrôlé, comme le montre la création d’un second conteneur :

L’accès est bien refusé car une authentification est nécessaire.

L’accès au contenu devra donc passer par l’utilisation d’une des 2 clefs du compte de stockage, pour générer une signature d’accès partagé (SAS). L’avantage de cette gestion est de mieux gérer les droits précis et la durée d’accès :

Exemple d’URL avec signature SAS :

https://jlosto.blob.core.windows.net/pictures-secure/Geneva-at-night.jpg?sp=r&st=2022-11-09T12:33:20Z&se=2022-11-09T20:33:20Z&spr=https&sv=2021-06-08&sr=b&sig=AIWmVLKklAgOPoCYBvd%2BOl5fr5K0mZe3xAowIOXcq7

Les choses sont sensiblement proches pour un partage de fichiers. Dans ce service, l’authentification est possible de 2 manières :

  • Active Directory
  • Clef du compte de stockage

La première méthode demande au préalable de joindre le compte de stockage à un domaine Active Directory. Un précédent article parlant de FSLogix, au sein d’un environnement Azure Virtual Desktop, en fait référence ici.

La seconde méthode repose assez sur l’utilisation d’une des 2 clefs du compte de stockage. C’est un risque d’octroyer plus que de droits que nécessaires, car une clef donne un accès complet au compte de stockage.

Important : Microsoft le précise, vos clés d’accès de compte de stockage sont similaires au mot de passe racine pour votre compte de stockage. Veillez toujours à protéger vos clés d’accès :

  • Utilisez le service Azure Key Vault pour gérer et effectuer la rotation de vos clés en toute sécurité.
  • Évitez de distribuer des clés d’accès à d’autres utilisateurs, de les coder en dur ou de les enregistrer en texte brut dans un emplacement accessible à d’autres personnes.
  • Effectuez une rotation de vos clés si vous pensez qu’elles ont pu être compromises.

Exemple de montage du partage de fichier via le script proposé sur le portail et utilisant une des 2 clefs du compte de stockage :

Peut-on restreindre les IP publiques pouvant s’y connecter ?

Oui c’est tout à fait possible. L’onglet Réseau du compte de stockage apporte ce type de restriction, basée sur les ip publiques :

Même en possession de la clef du compte de stockage, un autre poste ayant une IP publique non référencée ne pourra s’y connecter :

Attention, la mise en place de cette restriction bloquera automatiquement l’accès aux ressources situées de la même région Azure :

Les services déployés dans la même région que le compte de stockage utilisent des adresses IP Azure privées. Vous ne pouvez donc pas restreindre l’accès à des services Azure spécifiques en fonction de leur plage d’adresses IP sortantes publiques.

Microsoft Doc

Pour les ressources Azure situées dans la même région que le compte de stockage, il est alors nécessaire de rajouter le réseau virtuel Azure pour retrouver un accès public fonctionnel :

Cette action ajoute un point de terminaison du service sur le sous-réseau rajouté sur la configuration :

Peut-on fermer l’accès public (URL) et ne transiter que via un adressage réseau privé ?

Il parfaitement possible de fermer l’accès public et d’intégrer le compte de stockage sur un réseau virtuel privé Azure.

Un point de terminaison privé est une interface réseau qui utilise une adresse IP privée de votre réseau virtuel. Cette interface réseau vous connecte de manière privée et sécurisée à un service fonctionnant avec Azure Private Link. En activant un point de terminaison privé, vous intégrez le service à votre réseau virtuel.

Ayant associé un service DNS privé à mon réseau virtuel, je retrouve bien un enregistrement dns pointant vers mon compte de stockage :

L’accès est bien à nouveau fonctionnel depuis le réseau virtual Azure :

La mise en place du point de terminaison privé permet alors la désactivation complète de l’accès public du compte de stockage :

La fermeture de l’accès public a aussi pour effet de restreindre l’accès aux données du compte de stockage depuis le portail Azure :

Existe-t-il un soft-delete pour les données ?

Oui et non ????. Les services de stockages principalement utilisés sont le blob et le partage de fichier. Le soft-delete consiste à ne pas vraiment supprimer définitivement la donnée lors de sa suppression par un utilisateur.

Le stockage blob propose deux soft-deletes : Un pour le container tout entier et un autre pour les blobs eux-mêmes :

Le partage de fichier ne propose l’option que pour la suppression du partage de fichiers, pas son contenu individuel :

Comment sauvegarder facilement les données ?

Deux services du compte de stockage se sauvegardent très facilement à travers des services Azure.

Le stockage blob nécessite la mise en place d’un coffre de sauvegarde, en veillant à le placer dans la même région Azure que le compte de stockage à sauvegarder :

Une fois le coffre de sauvegarde créé, mettez en place votre sauvegarde :

Définissez votre police de sauvegarde selon vos besoins de rétention :

Ajoutez le compte de sauvegarde blob et attendez quelques minutes pour confirmer sa validation :

Le coffre de sauvegarde a besoin du rôle pour pouvoir gérer la sauvegarde blob, cliquez comme ceci pour ajouter le rôle attendu :

Ce rôle est bien implémenté sur le compte de stockage :

Attendez quelques minutes pour constater la validation :

Déclenchez la configuration de sauvegarde, il est à noter que nous n’avons jamais pu choisir le ou les conteneurs du compte de stockage à sauvegarder :

Un contrôle dans le coffre de sauvegarde nous montre bien la bonne prise en compte de la configuration :

Pour le partage de fichier, il est nécessaire de passer par la création d’un coffre de récupération Azure :

Une fois le coffre de récupération créé, mettez en place votre sauvegarde :

Ajoutez le compte de stockage et le partage de fichier à sauvegarder, définissez la police et activez la sauvegarde :

Contrôler le paramétrage dans le coffre de récupération :

Comment fonctionne la synchronisation entre différents comptes de stockage ?

Lorsque la réplication d’objets blob est activée, les blobs sont copiés de manière asynchrone depuis un compte de stockage source vers un compte de stockage de destination.

Créez une règle de réplication sur le premier compte de stockage (source) :

Vérifiez le contre paramétrage sur le compte de stockage (destination) :

Comme la réplication est asynchrone, il faut attendre plusieurs minutes pour constater l’apparition des blobs sur le second compte de stockage :

Peut-on réduire les coûts blob ?

La gestion blob via un cycle de vie utilise des règles pour déplacer automatiquement les blobs vers des niveaux plus froids ou pour les supprimer. Cette stratégie est intéressante car les coûts varient selon la chaleur du stockage :

Cette variation impacte également le prix des transactions blob :

Par exemple, la création de règle en escalier est logique pour refroidir d’anciennes sauvegardes :

Si vous créez plusieurs règles, les actions associées doivent être mises en œuvre dans l’ordre des niveaux (du stockage chaud au stockage froid, puis l’archivage, puis la suppression).

Conclusion

On pourrait continuer encore longtemps sur toutes les autres fonctionnalités proposées par le compte de stockage Azure. Je vous conseille les vidéos suivantes pour en apprendre un peu plus ????????