Gestion de la configuration

Comment la gestion des configurations aide les équipes d'ingénierie à développer des systèmes robustes et stables

Ian Buchanan Ian Buchanan

Dans les années 1950, le ministère américain de la Défense a imaginé une discipline de gestion technique pour suivre les changements dans le développement de systèmes complexes. Il a donné à ce système et à ses diverses itérations des noms très techniques, jusqu'à la publication en 2001 d'un guide consolidé qui a établi le système de gestion technique appelé aujourd'hui gestion des configurations. Aujourd'hui, la gestion des configurations n'est pas seulement utilisée par le ministère de la Défense, mais aussi dans le développement de logiciels, la gestion des services informatiques, le génie civil, le génie industriel, et plus encore.

Qu'est-ce que la gestion des configurations ?

Diagramme de gestion des configurations

La gestion des configurations est un processus d'ingénierie des systèmes qui vise à assurer la cohérence des attributs d'un produit tout au long de sa vie. Dans le domaine de la technologie, la gestion des configurations est un processus de gestion informatique qui suit les éléments de configuration individuels d'un système informatique. Les systèmes informatiques sont composés d'actifs informatiques dont la granularité varie. Les logiciels, serveurs ou clusters de serveurs sont autant d'actifs informatiques. La suite de cet article se concentre sur la gestion des configurations telle qu'elle s'applique directement aux actifs logiciels informatiques et à la CI/CD qui y est associée.

La gestion des configurations logicielles est un processus d'ingénierie des systèmes qui suit et surveille les changements apportés aux métadonnées de configuration des systèmes logiciels. Dans le développement de logiciels, la gestion des configurations est couramment utilisée parallèlement au contrôle de version et à l'infrastructure de CI/CD. Cet article se concentre sur son application moderne et son utilisation dans des environnements logiciels de CI/CD agiles.

Pourquoi la gestion des configurations est-elle importante ?

La gestion des configurations aide les équipes d'ingénierie à développer des systèmes robustes et stables grâce à des outils qui gèrent et surveillent automatiquement les mises à jour des données de configuration. Les systèmes logiciels complexes sont constitués de composants qui diffèrent par leur taille et leur complexité plus ou moins granulaires. Pour un exemple plus concret, pensez à une architecture de microservices. Chaque service d'une architecture de microservices utilise des métadonnées de configuration pour s'enregistrer et s'initialiser. Voici quelques exemples de métadonnées de configuration logicielle :

  • Spécifications des allocations de ressources matérielles informatiques pour le processeur (CPU), la RAM, etc.
  • Points de terminaison qui spécifient des connexions externes à d'autres services, bases de données ou domaines
  • Métadonnées secrètes telles que des mots de passe et des clés de chiffrement

Il est facile de considérer ces données comme secondaires. La configuration est alors désorganisée et éparse. Imaginez les nombreux post-its contenant des mots de passe et des URL qui circulent dans un bureau. La gestion des configurations résout ce problème en créant une « source de référence » centralisée pour les configurations.

Git est une plateforme fantastique pour la gestion des données de configuration. Le déplacement des données de configuration vers un dépôt Git active le contrôle de version et permet au dépôt de faire office de source de référence. Le contrôle de version résout également un autre problème de configuration : les changements disruptifs inattendus. La gestion des changements inattendus à l'aide de revues de code et du contrôle de version contribue à minimiser les temps d'arrêt.

Des valeurs de configuration seront souvent ajoutées, supprimées ou modifiées. Sans contrôle de version, cela peut engendrer des problèmes. Un membre de l'équipe peut modifier une valeur d'allocation matérielle afin que le logiciel fonctionne plus efficacement sur son ordinateur portable personnel. Lorsque le logiciel est déployé ultérieurement dans un environnement de production, cette nouvelle configuration peut avoir un effet sous-optimal ou ne plus fonctionner.

Le contrôle de version et la gestion des configurations résolvent ce problème en rendant les changements de configuration visibles. Lorsqu'un changement est apporté aux données de configuration, le système de contrôle de version les suit, ce qui permet aux membres de l'équipe d'examiner une piste d'audit des changements.

Appliqué aux configurations, le contrôle de version permet de restaurer ou d'annuler la configuration, et ainsi d'éviter les pannes inattendues. La configuration peut être rapidement restaurée à un précédent état connu pour être stable.

Comment la gestion des configurations s'adapte à DevOps, à la CI/CD et à Agile

Les données de configuration ont toujours été difficiles à gérer et peuvent facilement être reléguées au second plan. Ce n'est pas vraiment du code, elles ne sont donc pas immédiatement placées sous contrôle de version. Et, ce ne sont pas des données de premier ordre, elles ne sont donc pas stockées dans une base de données principale. L'administration des systèmes traditionnels et à petite échelle se fait généralement à l'aide d'un ensemble de scripts et de processus ad hoc. Les données de configuration peuvent parfois être négligées, mais elles sont essentielles au fonctionnement du système.

L'essor des infrastructures cloud a entraîné le développement et l'adoption de nouveaux modèles de gestion des infrastructures. Les architectures système complexes basées dans le cloud sont gérées et déployées à l'aide de fichiers de données de configuration. Ces nouvelles plateformes cloud permettent aux équipes de spécifier les ressources matérielles et les connexions réseau dont elles ont besoin par le biais de fichiers de données lisibles par l'homme et la machine, tels que YAML. Les fichiers de données sont ensuite lus, et l'infrastructure est provisionnée dans le cloud. Ce modèle est appelé infrastructure IaC (Infrastructure-as-Code).

Gestion des configurations DevOps

Au début du développement des applications Internet, les ressources matérielles et l'administration des systèmes étaient principalement exécutées manuellement. Les administrateurs système rencontraient des difficultés de configuration des données alors qu'ils provisionnaient et géraient manuellement les ressources matérielles sur la base des données de configuration.

La gestion des configurations est un élément clé du cycle de vie DevOps. La configuration DevOps fait évoluer et automatise le rôle d'administrateur système, et intègre l'automatisation à la gestion et au déploiement de l'infrastructure.

Dans la configuration DevOps, la responsabilité de l'administration des systèmes revient à l'ingénierie logicielle. Les entreprises utilisent aujourd'hui cette approche pour donner aux ingénieurs logiciels les moyens de demander et de provisionner les ressources nécessaires à la demande. Cela élimine un potentiel goulot d'étranglement : les dépendances organisationnelles d'une équipe de développement logiciel qui attend qu'une autre équipe d'administration système lui fournisse des ressources.

Gestion des configurations CI/CD

La gestion des configurations CI/CD utilise des workflows de revue de code basés sur des pull requests pour automatiser le déploiement des changements de code dans un système logiciel actif. Ce même flux peut être appliqué aux changements de configuration. La CI/CD peut être configurée pour que les demandes de changements de configuration approuvées puissent être immédiatement déployées sur un système en fonctionnement. Le workflow GitOps illustre parfaitement ce processus.

Gestion des configurations Agile

La gestion des configurations permet aux équipes Agile de trier et de prioriser clairement les tâches de configuration. Parmi les tâches de configuration, on retrouve :

  • Mettre à jour les certificats SSL de production
  • Ajouter un nouveau point de terminaison de base de données
  • Modifier le mot de passe des services de messagerie de développement, de staging et de production
  • Ajouter des clés d'API pour une nouvelle intégration tierce

Une fois qu'une plateforme de gestion des configurations est en place, les équipes voient clairement le travail nécessaire pour les tâches de configuration. Les tâches de gestion des configurations peuvent être identifiées comme des dépendances pour d'autres tâches et correctement traitées dans le cadre de sprints Agile.

Outils de gestion des configurations

Outils de gestion des configurations

Git

Git est le système de contrôle de version à la pointe du secteur pour suivre les changements de code. L'ajout de données de gestion des configurations en parallèle du code dans un dépôt Git permet d'obtenir une vue holistique du contrôle de version de l'ensemble d'un projet. Git est un outil fondamental dans la gestion générale des configurations. Les autres outils de gestion des configurations répertoriés ci-dessous sont conçus pour être stockés dans un dépôt Git et pour exploiter le contrôle de version Git.

Docker

Docker a introduit la conteneurisation : une forme avancée de gestion des configurations, comme un verrouillage des configurations. L'outil est basé sur des fichiers de configuration appelés documents Dockerfiles, qui contiennent une liste de commandes évaluées pour reconstruire l'instantané attendu de l'état du système d'exploitation. Il crée des conteneurs à partir de ces documents Dockerfiles qui sont des instantanés d'une application préconfigurée. Les documents Dockerfiles sont commités dans un dépôt Git pour le suivi des versions et nécessitent une gestion supplémentaire des configurations pour les déployer sur l'infrastructure.

Terraform

Terraform est une plateforme de gestion des configurations open source par HashiCorp. Elle utilise l'IaC pour provisionner et gérer les clusters, l'infrastructure cloud ou les services. Elle prend en charge Amazon Web Services (AWS), Microsoft Azure et d'autres plateformes cloud. Chaque plateforme cloud possède sa propre représentation et sa propre interface pour les composants d'infrastructure communs tels que les serveurs, les bases de données et les files d'attente. Terraform a développé une couche d'abstraction d'outils de configuration pour les plateformes cloud permettant aux équipes d'écrire des fichiers qui sont des définitions reproductibles de leur infrastructure.

Ansible, SaltStack, Chef, Puppet

Ansible, SaltStack et Chef sont des frameworks d'automatisation informatique. Ces frameworks automatisent de nombreux processus d'administrateurs système traditionnels. Chaque infrastructure utilise une série de fichiers de données de configuration (généralement YAML ou XML) qui sont évalués par un exécutable.

Les fichiers de données de configuration spécifient une séquence d'actions à entreprendre pour configurer un système. Les actions sont ensuite exécutées par l'exécutable. Selon les systèmes, le langage de l'exécutable change. En effet, Ansible et SaltStack sont basés sur Python, alors que Chef repose sur Ruby. Ce workflow est similaire à l'exécution de scripts Shell ad hoc, mais offre une expérience plus structurée et affinée dans les écosystèmes des plateformes respectives. Ce sont ces outils qui permettront l'automatisation nécessaire à la réalisation de la CI/CD.

Comment implémenter la gestion des configurations

Identification

Pour mettre en place la gestion des configurations, la première chose à faire est de recueillir des informations. Les données de configuration doivent être agrégées et compilées à partir de différents environnements applicatifs (développement, staging et production) pour tous les composants et services utilisés. Toutes les données secrètes telles que les mots de passe et les clés doivent être identifiées, chiffrées et stockées en toute sécurité. À ce stade, les données de configuration doivent être organisées en fichiers de données qui peuvent être désignés comme une source centrale de référence.

Base de référence

Une fois les données de configuration agrégées et organisées, une base de référence peut être établie. Une configuration de base de référence est un état de configuration connu qui permet de faire fonctionner le logiciel dépendant sans erreur. Cette base de référence est généralement créée en révisant la configuration d'un environnement de production fonctionnel et en validant ces paramètres de configuration.

Contrôle de version

Votre projet de développement doit utiliser un système de contrôle de version. Si ce n'est pas le cas, installez Git, initialisez un dépôt pour le projet et ajoutez les fichiers de données de configuration au dépôt. Attention : avant d'ajouter des données de configuration à un dépôt, assurez-vous qu'aucune donnée secrète (mots de passe ou clés) n'est chiffrée avec une clé externe. Les données secrètes accidentellement commitées dans un dépôt représentent un risque énorme. Elles doivent être supprimées de l'historique des dépôts, au risque qu'elles ne soient exploitées.

Audits

L'organisation des données de configuration et leur ajout à un dépôt permettent la collaboration et offrent une visibilité sur la configuration du système. Le worfklow de pull request populaire utilisé par les équipes de développement pour réviser et modifier le code peut ensuite être appliqué aux fichiers de données de configuration. Cela permet de mettre en place un système d'audit et de responsabilisation. Tout changement apporté à la configuration doit être révisé et accepté par l'équipe. Cela responsabilise ses membres et offre une visibilité sur les changements de configuration.

Conclusion…

La gestion des configurations est un outil nécessaire à la gestion des systèmes logiciels complexes. L'absence de gestion des configurations peut entraîner de sérieux problèmes de fiabilité, de disponibilité et d'évolutivité. De nombreux outils de développement logiciel actuels sont dotés de fonctionnalités de gestion des configurations intégrées. Bitbucket offre un puissant système de gestion des configurations qui est développé autour des workflows de pull request Git et des pipelines de CI/CD.