# Convention de nommage

Afin de mieux se repérer et d'avoir une vision claire dans le cloud, il est important d'adopter une convention de nommage. Cette convention va permettre une identification claire et directe des projets et ressources, aussi bien au niveau opérationnel que dans un objectif de FinOps.

Cette convention a été adoptée le 12 Mai 2026, merci de la respecter.

> Cette convention de nommage est soumise à modification et évolution, les modifications et évolutions doivent être approuvées lors d'un meeting.

## Règles générales

GCP demande de suivre les règles de base pour une convention de nommage:

* Utiliser des noms compris entre 1 et 63 caractères
* Respecter les conventions RFC 1035
* Utiliser l'expression régulière ^\[a-z]([-a-z0-9]\*[a-z0-9])? soit:
  * Que le premier caractère soit écrit en minuscule,
  * Que les caractères suivants soient des tirets, des lettres minuscules ou des chiffres, pas de `_` uniquement des `-`,
  * Le dernier caractère ne peut être un tiret.


## Convention interne

Comme dit en introduction, nous allons adopter une convention interne afin d'avoir un cloud unifié et facile à identifier.

### Les Projets:

GCP fonctionne avec des projets. Un projet GCP regroupe toutes les ressources (VM, stockage, base de données...) pour une application/service. Pour nommer nos projets il sera demandé aux membres d'utiliser le format suivant: `ced-[club]-[service]-[environnement]`

ced identifie le nom de notre organisation.

* club: identifie un club tiers qui pourrait être amené à avoir un service sur notre cloud. Dans le cas où le projet est interne `[club]` est à omettre. Le format devient `ced-[service]-[environnement]`.
* service: désigne le service / l'application qui correspond au projet
* environnement: désigne l'environnement dans lequel il évolue
  * dev: développement
  * uat: préprod
  * prd: production
  * sdb: sandbox

  
Voici un exemple: `ced-gatus-prd`

> NB: Google Cloud demande des noms de projet uniques pour le monde entier, il est possible que pour créer ce projet une suite de nombres aléatoires à la fin soit à ajouter. GCP peut s'en charger lui-même. Ainsi le format devient `ced-[service]-[environnement]-[Suite de nombres aléatoires]`

### Les ressources:

Les ressources sont ce qui fonctionne et ce qui est facturé sur GCP, cela peut être du stockage, du réseau, des machines virtuelles etc. Certaines ressources nécessitent des noms uniques dans le monde comme par exemple les buckets. Néanmoins en appliquant une convention qui nous est propre, cela permettra d'eviter ce soucis d'unicité demandé par GCP.

> Nommage type: ced-[type]-[projet/application]-[environnement]-[region]-[instance]

* type: désigne le type de ressource utilisé:
  * gce : Google Compute Engine (VM)
  * sql : Cloud SQL
  * gcs : Cloud Storage
  * pub : Pub/Sub
  * fnc : Cloud Functions
  * *liste soumise à expansion au fur et à mesure*

### Les régions:

Les régions dans GCP indiquent là où la ressource va être hébergée chez google, il en existe plusieurs et voici la manière de les noter:

* North America 1 (Montréal): na1
* North America 2 (Toronto) : na2
* US East X : ueX, X désignant le numéro
* US Central X: ucX
* Europe South X : esX

Il est important de choisir la région adaptée à notre projet, voir [Choix des régions: Best Practices](xxx)

### Les instances:

Admettons qu'une application ait besoin de 3 VMs identiques, nous utiliserons des numéros d'instance commençant de 0X allant jusqu'à XX. Il est important de commencer à 01 afin que l'instance 10 ne se retrouve pas avant la 2 dans le classement.

### Les Labels:

Pour mieux regrouper et identifier des ressources, des labels peuvent être utilisés également. Les labels sont sous la forme de clé/valeur et pour être créés, doivent respecter les conditions suivantes:

* respecter les règles générales de la convention,
* être définis par un mot clair et identifiable `environnement:test/production/developpement` pour identifier une ressource de test qui sera automatiquement éteinte,
* être uniques.

Voici une liste d'exemple de labels:

| Clé | Valeur | Description |
|-----|--------|-------------|
| `env` | `dev`/`prd` | Environnement permettant de filtrer lors de l'analyse de coûts |
| `app` | `gatus` | nom de l'application liée. |
| `managed-by` | `terraform`/`manual` | permet de savoir comment la ressource a été définie |


## Source

Cette convention est basée sur:

* [Nommer des ressources GCP](https://docs.cloud.google.com/compute/docs/naming-resources?hl=fr)
* [L'importance des conventions de nommage](https://blog.stephane-robert.info/docs/developper/normes/)