[Partie 1] Le nommage des ressources Azure

Azure Naming Convention
Contexte

Dans la majorité des démos et tutoriels concernant Azure (et pas uniquement) vous trouverez une diversité de ressources provisionnées en mode « rapide / léger », c’est-à-dire sans être hyper rigoureux sur des notions comme le nommage des artefacts. « WebApp1 », « maVM », « MonRG » sont des noms couramment trouvés dans les démonstrations voire même les « Proof-of-Concepts » (qui sont censées être bien plus que des démos basiques).

Pas de souci particulier à se faire à ce stade, nous sommes censés être focalisés sur les principes et concepts de la démo en cause. Mais quid de ce sujet de nommage des artefacts Azure quand on se positionne vers un vrai projet ou une application à mettre en production ? Comment on s’assure que les noms qu’on choisit seront bien en phase avec le contexte complexe d’architecture, environnement, sécurité, exploitation de cette application, projet ou système ?

Le nommage dans les projets informatiques

D’abord, cette notion de nommage rigoureux n’est pas spécifique à Azure. Chaque projet informatique devrait suivre un set de règles de nommage, règles qui aideront à bien structurer son projet, retrouver facilement les termes qu’on connaissait déjà avant, voire même pouvoir identifier des ressources qui sont exposées dans des listes pas toujours structurées. Les règles de nommage sont présentes dans chaque langage de programmation, dans chaque provisionnement d’infrastructure.

Ceci dit, il y a des notions spécifiques au cloud (voire spécifique à Azure) qui devront compléter les notions déjà existantes. Il faudra d’abord cataloguer cette liste d’aspects de nommage qui est applicable pour notre organisation, notre projet et notre cloud.

Principes importants :

Aujourd’hui, qui dit cloud, dit esprit agile. Le cloud en soi (et celui public en particulier) est agile par sa vitesse de provisionnement, son élasticité à la mise à l’échelle, et surtout son rythme effréné de mises à jour et nouvelles fonctionnalités. Pour respecter cet esprit, les règles doivent accepter la flexibilité. On ne devrait pas être bloqué à déployer un environnement de prototypage parce que, par exemple, le nom du projet n’a pas été défini clairement, ou bien le type de ressource or artefact est tout frais dans le cloud… En revanche, même dans ce cas-là, on devrait pouvoir facilement comprendre à posteriori dans quel contexte cela a été provisionné (si ce n’est que pour déprovisionner l’environnement pour éviter la consommation Azure).

Cet article n’essayera pas, du coup, d’imposer un set de règles comme universelles, mais plutôt vous guider à définir votre propre set de règles et ensuite l’appliquer. Ceci dit, on essayera tout de même de donner des exemples très concrets (et pour ceux qui percevront l’exemple très proche de leur cas, l’appliquer directement dans l’état).

Enfin, dernier « disclaimer », l’esprit dynamique de l’Azure fera qu’il est possible que certaines règles ou contraintes ne s’appliquent plus (ou soient différentes) au moment ou vous lisez cette article. Dans ce cas-là, un retour de votre part sera très utile pour permettre la mise à jour de cet article.

Qu’est-ce que le nom d’une ressource Azure ?

Partons de la base : le nom d’une ressource Azure représente une chaîne de caractères qui permet l’identification unique de la ressource Azure.

La vision très généraliste de cette définition s’arrête ici :

  • le nom lui-même peut représenter un simple « code » unique, ou bien peut correspondre à un « espace de nom » (ex. Azure Service Bus), à un « nom de compte » (ex. Azure Storage), à un « nom de machine » (ex. Azure VM) ou bien autre signification spécifique au type de ressource
  • Identification unique, où ? Les noms peuvent avoir un contexte (scope) public global (ex. basé sur un sous-domaine Azure, comme les espaces de nom Azure Service Bus, les comptes Azure Storage etc .), local à la souscription (ex. Azure VNET), ou bien local à la ressource parent (ex. les noms des blobs ou fichiers dans un container Azure Blob Storage)

Pour complexifier encore la tâche, certains types de ressources ont des règles de nommages différentes pour des typologies différentes à l’intérieur du même type (trop compliqué à comprendre ? voici l’exemple : les Azure VMs ont des contraintes plus fortes – 15 caractère maximum – pour les VMs basées sur Windows que pour celles sur Linux. Problème historique, bien sûr, venue du monde infrastructure à demeure, mais qui se répercute dans le nommage cloud).

  • Les caractères acceptés dans les noms varient également, mais on pourra identifier quelques sets de caractères applicables comme ci-dessous (mais pas limité à) :
    • Alphanumériques (chiffres et lettres)
    • Alphanumériques, plus underscore et tiret
    • Alphanumériques, plus underscore, tiret et point
    • Tout caractère accepté dans une URI
    • Tout caractère
  • La majorité des noms ne peuvent pas commencer ou finir avec un tiret ou un underscore
  • Egalement, un point particulier à retenir est la variabilité de sensibilité à la casse :
    • Noms sensibles à la casse (ex. les noms de blobs dans un container Azure Storage)
    • Noms insensibles à la casse (ex. les groupes de ressource)
    • Noms en minuscules obligatoirement (ex. les comptes Azure Storage)
  • Les contraintes de longueur sont largement variables – ainsi à la limite inférieure qu’à celle supérieure. Certains noms requièrent entre 1-64 caractères, autres entre 1-80, 2-80, 1-1024 etc. Très, très variable, donc, pas de repère précis.

Sur l’ensemble, malheureusement il n’y a pas une vision globale (Azure ici, mais AWS souffre des mêmes peines, par ailleurs), pas de vision globale de règles consolidées et (plus) uniformes sur le nommage des artefacts et ressources.

D’où encore une fois l’importance de cette tâche de structuration du nommage. Il n’est pas rare que vous commencez par des règles que vous considérez suffisantes (pour les types de ressources que vous traitez au moment donné) et qui se relèvent bloquantes pour le nommage de la nouvelle ressource dont vous avez besoin dans votre projet.

Contraintes de nommage des ressources Azure

Pour vous donner une référence plus précise et centralisée de ces contraintes, les voici (compilées ici depuis la documentation Azure ainsi que en suivant les contraintes exposées lors de la création d’une ressource) :

Ressource ou artefactContexte (Scope)Long minLong maxCasseCaractères valides
Resource GroupGlobal164InsensibleAlphanumérique, underscore et tiret
Availability SetResource Group180InsensibleAlphanumérique, underscore et tiret
Virtual Machine (Windows)Resource Group115InsensibleAlphanumérique, underscore et tiret
Virtual Machine (Linux)Resource Group164InsensibleAlphanumérique, underscore et tiret
Storage accountGlobal324MinusculeAlphanumérique
Azure Storage ContainerStorage account363MinusculeAlphanumérique et tiret
Azure Storage BlobContainer11024SensibleCaractères URL
Azure Storage QueueStorage account363MinusculeAlphanumérique et tiret
Azure Storage TableStorage account363InsensibleAlphanumérique
Azure Storage FileStorage account363MinusculeAlphanumérique
Virtual Network (VNet)Resource Group264InsensibleAlphanumérique, underscore, tiret et point
Network SubnetParent VNet264InsensibleAlphanumérique, underscore, tiret et point
Network InterfaceResource Group180InsensibleAlphanumérique, underscore, tiret et point
Network Security GroupResource Group180InsensibleAlphanumérique, underscore, tiret et point
Network Security Group RuleResource Group180InsensibleAlphanumérique, underscore, tiret et point
Route tableResource Group180InsensibleAlphanumérique, underscore, tiret et point
ExpressRoute CircuitResource Group180InsensibleAlphanumérique, underscore, tiret et point
Public IP AddressResource Group180InsensibleAlphanumérique, underscore, tiret et point
Load BalancerResource Group180InsensibleAlphanumérique, underscore, tiret et point
Load Balanced Rules ConfigLoad Balancer180InsensibleAlphanumérique, underscore, tiret et point
App Service PlanSouscription240InsensibleAlphanumérique
Web AppGlobal260InsensibleAlphanumérique et tiret
FunctionGlobal260InsensibleAlphanumérique et tiret
Mobile AppGlobal260InsensibleAlphanumérique et tiret
Logic AppGlobal260InsensibleAlphanumérique et tiret
API AppGlobal260InsensibleAlphanumérique et tiret
App Service EnvironentGlobal260InsensibleAlphanumérique et tiret
App Service CertificateGlobal315InsensibleAlphanumérique
API ManagementGlobal150InsensibleAlphanumérique
Notification HubSouscription1260InsensibleAlphanumérique, underscore, tiret et point
Notification Hub NamespaceGlobal250InsensibleAlphanumérique et tiret
SQL DatabaseSouscription128InsensibleAlphanumérique, underscore et tiret
SQL ServerGlobal163MinusculeAlphanumérique et tiret
SQL Data Warehouse DatabaseSouscription128InsensibleAlphanumérique, underscore et tiret
Document DBGlobal350MinusculeAlphanumérique et tiret
Redis CacheGlobal163InsensibleAlphanumérique et tiret
Search ServiceGlobal260MinusculeAlphanumérique et tiret
Power BI Workspace CollectionSouscription364InsensibleAlphanumérique et tiret
Cognitive Services AccountSouscription264InsensibleAlphanumérique, underscore et tiret
Data CatalogSouscription226InsensibleAlphanumérique
HDInsight ClusterGlobal159InsensibleAlphanumérique et tiret
Machine Learning WorkspaceSouscription324InsensibleAlphanumérique et tiret
Data FactorySouscription364InsensibleAlphanumérique et tiret
Event HubSouscription150InsensibleAlphanumérique, underscore et tiret
Service Bus NamespaceGlobal650InsensibleAlphanumérique et tiret
Service Bus QueueSouscription150InsensibleAlphanumérique, underscore et tiret
Service Bus TopicSouscription150InsensibleAlphanumérique, underscore et tiret
Stream Analytics JobSouscription363InsensibleAlphanumérique et tiret
IoT HubSouscription350InsensibleAlphanumérique et tiret
Traffic ManagerGlobal163InsensibleCaractères URL
Media Service AccountGlobal324MinusculeAlphanumérique
CDN ProfileGlobal1?InsensibleAlphanumérique et tiret
Azure AD DomainGlobal127InsensibleAlphanumérique
Azure ADSouscription1256InsensibleTout caractère
Team Services AccountGlobal150InsensibleAlphanumérique et tiret
Team ProjectAccount165InsensibleAlphanumérique et tiret
DevTest LabsSouscription127InsensibleAlphanumérique, underscore, tiret et parenthèses
Application InsightsSouscription1255InsensibleSans limite sauf 3 caractères
Automation AccountSouscription650InsensibleAlphanumérique et tiret
Recovery Services VaultSouscription250InsensibleAlphanumérique et tiret
Scheduler JobSouscription1260InsensibleAlphanumérique, underscore et tiret
Scheduler Job CollectionSouscription1100InsensibleAlphanumérique, underscore et tiret
Cloud ServiceGlobal163InsensibleAlphanumérique et tiret
Batch AccountGlobal324MinusculeAlphanumérique
BizTalk ServiceGlobal620MinusculeAlphanumérique
Mobile Engagement CollectionGlobal250InsensibleAlphanumérique et tiret
Mobile Engagement App ResourceGlobal150InsensibleAlphanumérique, underscore et tiret
Mobile Engagement ApplicationSouscription1?InsensibleTout caractère
RemoteApp CollectionSouscription313InsensibleAlphanumérique
Key VaultGlobal??InsensibleAlphanumérique et tiret
Operations Mgmt Suite NamespaceGlobal424InsensibleAlphanumérique et tiret
Tag NameRessource1512InsensibleAlphanumérique
Tag ValueRessource1256InsensibleAlphanumérique

A suivre

Ce premier article sur le sujet du nommage des ressources et artefacts Azure sera suivi prochainement par d’autres articles, qui comprendront des détails sur les aspects ou particules incluses dans les noms, des tableaux de référence des particules, les règles de composition ainsi que les bonnes pratiques.

Note : vous trouverez la version anglaise de cet article à http://blog.lecampusazure.net/2016/07/naming-of-azure-resources-part-1.html.

Pas de commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *