La gestion de configuration est une pratique essentielle pour les systèmes informatiques. Elle est particulièrement importante pour le développement de logiciels à l’ère du DevOps. Découvrez tout ce que vous devez savoir !
Dans les années 1950, le Département de la Défense de l’armée américaine avait besoin de suivre les modifications apportées à ses systèmes d’armes complexes basés sur de nombreux composants et sous-systèmes interconnectés.
Afin d’y parvenir, il a développé une méthode. Bien plus tard, en 2001, le DoD a publié un guide permettant aux entreprises d’adopter cette technique : la « gestion de configuration ».
Aujourd’hui, cette approche n’est plus seulement utilisée dans le domaine de la défense, mais aussi dans l’ingénierie civile et industrielle, et dans le développement logiciel. Il s’agit notamment d’une pratique centrale du DevOps.
Qu’est-ce que la gestion de configuration ?
La gestion de configuration ou configuration management est le processus visant à maintenir un système informatique (matériel ou logiciel) dans un état désiré.
Chaque système informatique peut être composé de différentes ressources informatiques : logiciels, groupes de serveurs…
Cette méthode permet de suivre et surveiller les changements apportés aux métadonnées de configuration. Elle a aussi pour but de s’assurer que les systèmes fonctionnent comme attendu au fil du temps.
Le but est aussi d’aider à identifier les systèmes nécessitant d’être mis à jour, patchés ou reconfigurés pour se conformer à l’état souhaité.
Il s’agit d’une approche importante pour empêcher l’introduction de changements non documentés dans l’environnement. Ceci permet d’éviter des problèmes de performances, des incohérences du système ou même des défauts de conformité légale pouvant mener à des amendes ou autres sanctions.
À long terme, les modifications mal documentées peuvent aussi mener à des temps d'indisponibilité, une instabilité ou des pannes du système.
Dans le domaine du développement de logiciel, on utilise couramment la gestion de configuration aux côtés de la gestion de version et du CI/CD.
À quoi sert la gestion de configuration ?
De nos jours, les systèmes modernes sont trop larges pour une gestion manuelle. La configuration implique des centaines de milliers de composants pour chaque application, et les organisations peuvent très facilement s’y perdre.
Il est essentiel d’automatiser le processus pour identifier les systèmes nécessitant de l’attention, les étapes nécessaires pour remédier aux problèmes, les tâches à prioriser ou savoir si les changements ont été validés et propagés dans tout le système.
Un système de gestion de configuration permet à l’entreprise de définir les paramètres de façon constante, puis de les construire et de les maintenir selon ses objectifs.
La stratégie doit incorporer plusieurs outils pour permettre de classifier et gérer les systèmes en groupe, d’effectuer des modifications centralisées sur les configurations, ou encore de déployer les changements automatiquement vers tous les systèmes pour automatiser les mises à jour et le patching.
Ils doivent aussi permettre d’identifier les problèmes de configuration, d’automatiser la priorisation des actions requises pour y remédier, et de les appliquer quand nécessaire.
À l’heure où les organisations adoptent de plus en plus l’architecture de microservices, la gestion de configuration devient encore plus importante.
Les applications basées sur cette architecture sont composées de multiples segments de code de tailles diverses connectées par des APIs.
Or, chaque service utilise des métadonnées encodant les spécifications pour l’allocation de ressources, les secrets tels que les mots de passe, ou les endpoints définissant les connexions aux autres services.
Ainsi, la gestion de configuration fournit une « version unique de confiance » pour l’état désiré des systèmes à travers toute l’organisation en offrant une visibilité sur toutes les modifications de configuration effectuées.
Comment ça fonctionne ?
Le processus de gestion de configuration commence par l’assemblage d’informations. Il s’agit notamment des données de configuration issues de chaque application et de la topologie du réseau.
Les secrets tels que les clés de chiffrement et les mots de passe doivent être identifiés, afin d’être chiffrés et stockés en sécurité.
Une fois collectées, les données de configuration doivent être chargées dans des fichiers qui deviennent le dépôt central de l’état désiré : la version unique de confiance.
L’organisation peut ensuite établir une configuration de base, qui doit être une configuration correcte connue pouvant effectuer les opérations attendues sans bugs ou erreurs.
Cette base est généralement établie en notant la configuration de l’environnement de production fonctionnel, et en stockant ces paramètres.
Lorsque la base est établie, l’organisation doit adopter un système de gestion de version. La plupart des entreprises utilisent Git pour créer un dépôt de données de configuration.
Les audits permettent ensuite de s’assurer que tout changement appliqué à la configuration a été passé en revue par les parties prenantes et accepté. Ceci garantit visibilité et prise de responsabilité sur les modifications effectuées.
Quels sont les avantages de la gestion de configuration ?
L’utilisation d’un système de gestion de configuration permet d’éviter les problèmes pouvant survenir quand les systèmes hardware et logiciels sont configurés de façon incorrecte.
Le suivi des changements est d’un précieux secours pour ne pas avoir à y remédier quand il est déjà trop tard. Il s’agit en quelque sorte d’une assurance.
Par exemple, ceci assure que les environnements de développement, de test et de production soient les mêmes pour que les applications déployées se comportent comme attendu.
En cas de problème, il est possible de re-créer l’environnement où l’erreur est survenue. On peut aussi répliquer un environnement pour faciliter le scaling et la migration des workloads sur site ou entre plusieurs clouds.
Les outils de gestion de configuration utilisent le scripting pour automatiser ces tâches d’administration. Ils permettent aussi le provisionnement rapide des serveurs, des machines virtuelles et des conteneurs dans l’état désiré en quelques minutes au lieu de plusieurs jours ou semaines.
Sans cette approche, une organisation risque des temps d'indisponibilité et des erreurs causées par une mauvaise configuration. Ceci peut générer des dépenses additionnelles et des heures passées à remédier aux erreurs et problèmes de qualité.
Il est aussi très difficile de comprendre comment les changements impactent les opérations de développement, test et production. Par conséquent, impossible de déterminer comment chaque service, paramètre de configuration et composant matériel contribue au système.
La gestion de configuration est aussi indispensable pour l’analyse de cause racine, la résolution de problèmes et le respect des accords de niveaux de service (SLA).
Elle permet enfin de voir si les changements de configurations ont bien été autorisés, déterminer comment les changements impactent l’organisation dans son ensemble, et combler rapidement les failles de sécurité engendrées.
Les principaux outils de gestion de configuration
Un système de gestion de configuration repose sur plusieurs outils permettant de gérer et de surveiller automatiquement les mises à jour des données de configuration.
Tout d’abord, Git est le système de gestion de version le plus utilisé pour suivre les changements de code. Il s’agit aussi d’un outil essentiel pour la gestion de configuration.
En ajoutant les données de gestion de configuration au dépôt Git contenant le code d’une application, il est possible de profiter d’une vue d’ensemble et d’une gestion de version pour l’intégralité du projet.
De son côté, Docker permet de créer des conteneurs d’application. Les fichiers de configuration Dockerfiles contiennent une liste de commandes permettant de reconstruire le snapshot attendu de l’état du système d’exploitation.
Les conteneurs sont créés à partir de ces Dockerfiles, servant de snapshots d’une application préconfigurée. Les fichiers sont déposés dans un dépôt Git pour la gestion de version et le déploiement sur l’infrastructure.
La plateforme de gestion de configuration open source Terraform, développée par HashiCorp, utilise quant à elle l’Infrastructure en tant que Code (IaC) pour la gestion de clusters, de services et d’infrastructure cloud. Elle est compatible avec les principaux clouds publics tels que Amazon Web Services et Microsoft Azure. Cet outil permet aux équipes de définir l’infrastructure en écrivant des fichiers reproductibles sur tous les environnements.
Les frameworks d’automatisation IT tels que Ansible, Salt Stack, Chef et Puppet sont aussi des solutions de gestion de configuration.
Ils permettent d’automatiser de nombreux processus d’administration système traditionnels. Chaque framework utilise une série de fichiers de données de configuration en YAML ou XML évaluée par un exécutable.
Ces fichiers indiquent une séquence d'actions à effectuer pour configurer un système. Les actions sont ensuite effectuées par l’exécutable, par exemple Python pour Ansible et Salt Stack ou Ruby pour Chef.
En combinant ces différents outils, une équipe bénéficie de l’automatisation requise pour le CI/CD : l’intégration et le déploiement continu.
Gestion de configuration et DevOps
Durant les premières années du développement d’applications internet, l’administration des systèmes et des ressources hardware était principalement effectuée manuellement.
Les administrateurs système examinaient les données de configuration et s'occupaient du provisionnement et de la gestion des ressources hardware en se basant.
Désormais, la gestion de configuration est une pratique essentielle de la méthode DevOps. Cette approche implique en effet l’automatisation de la gestion et du déploiement d'infrastructures.
Par ailleurs, la responsabilité de l’administration système est confiée aux ingénieurs logiciels. Ceci leur permet de provisionner les ressources nécessaires à la demande, éliminant la dépendance à une équipe d’administration séparée.
En outre, le principe de CI/CD utilisé en DevOps pour l’intégration et la livraison continues de code peut également être appliqué aux changements de configuration.
Un workflow d’évaluation de code basé sur les pull request permet d’automatiser le déploiement des changements de code.
De la même manière, les requêtes de changement de configuration approuvées peuvent être déployées immédiatement en production.
Conclusion : la gestion de configuration, une pratique au coeur du DevOps
Tout comme l’automatisation des tests et le CI/CD du code, la gestion de configuration est une pratique essentielle du DevOps.
Afin de maîtriser toutes les techniques et les outils DevOps tels que Git, Puppet ou Docker, vous pouvez choisir la DevUniversity.
Notre formation d’ingénieur DevOps créée en partenariat avec AWS vous permet d’acquérir toutes les compétences requises pour exercer ce métier très recherché en entreprise.
Vous apprendrez le développement d’applications en Python, le CI/CD avec Gitlab et les outils de conteneurs, les frameworks d’automatisation Terraform et Ansible, le monitoring avec DataDog et Grafana, mais aussi les services cloud AWS comme Lambda, Code Pipeline et AppRunner.
À l’issue du cursus, vous pourrez valider le Titre Professionnel du Ministère du Travail : « Administrateur système DevOps », recevoir une certification de Formation Continue d’ingénieur DevOps Panthéon Sorbonne, et une certification AWS Solutions Architect – Associate.
Cette formation se complète intégralement à distance en bootcamp, formation continue ou alternance. Notre organisme est éligible au financement par CPF. Découvrez DevUniversity !