Comment l'infrastructure IaC (Infrastructure-as-Code) gère les infrastructures complexes

Ian Buchanan Ian Buchanan

Résumé : l'IaC est un processus de gestion de l'infrastructure informatique qui applique les bonnes pratiques du développement logiciel DevOps à la gestion des ressources de l'infrastructure cloud.

L'essor de la virtualisation du matériel au milieu des années 2000 a offert de nouvelles opportunités d'hébergement d'infrastructures cloud. Les fournisseurs d'hébergement cloud ont commencé à offrir un accès aux dynamiques plateformes d'Infrastructure as a Service (IaaS). Avec le temps, ces plateformes ont commencé à proposer des actifs d'infrastructure plus complexes. La complexité des rôles traditionnels d'administrateur système a évolué parallèlement. Le défi ? Configurer et gérer rapidement des infrastructures cloud délicates.

Le succès rencontré par la CI/CD a encouragé le concept d'IaC, ou de modélisation de l'infrastructure grâce au code. DevOps a prouvé à quel point il était productif de commiter du code dans un dépôt Git, puis d'appliquer des branches de fonctionnalités et des workflows de pull request. L'automatisation de ces workflows dans le développement logiciel a permis de décomplexifier l'administration des systèmes cloud.

Que signifie Infrastructure-as-Code ?

L'Infrastructure-as-Code, ou IaC, est un processus de gestion de l'infrastructure informatique qui applique les bonnes pratiques du développement logiciel DevOps à la gestion des ressources de l'infrastructure cloud. Les ressources d'infrastructure applicables sont les machines virtuelles, les réseaux, les équilibreurs de charge, les bases de données et d'autres applications en réseau.

L'IaC est une forme de gestion des configurations qui codifie les ressources d'infrastructure d'une organisation dans des fichiers texte. Ces fichiers d'infrastructure sont ensuite commités dans un système de contrôle de version tel que Git. Le dépôt de contrôle de version active les workflows de branche de fonctionnalité et de pull request, qui sont des dépendances fondamentales de la CI/CD.

L'IaC est rendue possible par l'essor des plateformes d'hébergement d'infrastructure cloud, en particulier des plateformes IaaS. L'IaaS permet le provisionnement et la réquisition à la demande de ressources cloud par le biais d'API à distance, qui définissent le modèle des propriétés validées dans les fichiers de configuration de l'infrastructure. Les fonctionnalités d'automatisation de l'IaC peuvent exécuter les fichiers de configuration sur les API IaaS distantes.

Une fois qu'une équipe a commité la configuration de l'infrastructure dans le système de contrôle de version, elle peut appliquer les pratiques de CI/CD aux changements d'infrastructure. Les mises à jour d'infrastructure peuvent suivre un workflow DevOps. Si un membre de l'équipe a modifié l'un des fichiers texte de configuration, les workflows de pull request et de revue de code peuvent être utilisés pour auditer et vérifier l'exactitude des changements. En outre, un système d'IaS compatible DevOps utilisera des déploiements et des restaurations de l'infrastructure automatiques.

Pourquoi l'IaC est-elle importante ?

L'IaC a évolué pour aider à résoudre le problème de « dérive de l'environnement ». Les applications cloud ont généralement des environnements de déploiement distincts pour les différentes phases de leur cycle de vie. Il est courant d'avoir des environnements de développement, de staging et de production. Ces environnements sont composés de ressources en réseau telles que des serveurs d'applications, des équilibreurs de charge et des bases de données. On parle de dérive de l'environnement lorsque l'infrastructure entre ces différents environnements n'est plus synchronisée.

Sans l'IaC, le processus de gestion de l'infrastructure peut être désorganisé et fragile. Les administrateurs système se connectent manuellement aux fournisseurs de cloud distants et utilisent des API ou des tableaux de bord web pour provisionner de nouveaux matériels et ressources. Ce workflow manuel ne donne pas une vue globale de l'infrastructure applicative. Les administrateurs peuvent apporter manuellement des changements à un environnement et oublier d'en faire autant pour l'autre. C'est ainsi que l'environnement part à la dérive.

Le gaspillage de ressources métier engendré par la dérive de l'environnement s'avère coûteux. Des bugs et des échecs surviennent parce que les équipes développent dans un environnement de développement ou de staging et découvrent ensuite, au moment du déploiement, que l'environnement de production n'est pas synchronisé. Les équipes doivent alors rechercher d'où provient ce problème et ce qu'il faut faire pour le résoudre.

Sans l'IaC, la gestion manuelle des infrastructures est un processus lent. Si un changement d'infrastructure nécessaire est identifié en raison d'une dérive de l'environnement, de pics de trafic ou d'un autre problème, l'administrateur système peut mettre beaucoup de temps à réagir et à s'adapter. Cela conduit à des pannes et à la frustration des clients. Une fois l'IaC en place, l'infrastructure peut s'adapter automatiquement aux changements de configuration et réagir aux pics de trafic grâce à des fonctionnalités de mise à l'échelle automatique.

L'IaC apporte plus de supervision et de visibilité à l'administration manuelle des systèmes. Les fichiers de configuration de l'infrastructure étant commités dans un dépôt central de contrôle de version, tous les membres de l'équipe peuvent visualiser et modifier les données d'infrastructure. Cela ouvre la voie à de puissantes capacités d'audit. Par exemple, si votre équipe est soumise à un audit de conformité PCI, vous devrez savoir si une partie spécifique de votre infrastructure utilise le chiffrement SSL. Grâce à l'IaC, vous pouvez rapidement voir la configuration du chiffrement SSL et exécuter le code pour vous assurer que l'infrastructure dynamique correspond aux fichiers de configuration, et identifier ainsi si le chiffrement SSL est activé. L'historique de commit de contrôle de version fait également office de journal à réviser en cas d'ajout ou de suppression.

Fonctionnement de l'IaC

Quelques dépendances qui doivent être en place pour profiter pleinement de l'IaC.

Hébergement accessible à distance ou plateforme d'hébergement cloud IaaS
La première et dépendance clé est l'hébergement accessible à distance. L'outil de gestion de la configuration doit se connecter à l'hôte distant et le modifier. Si l'infrastructure distante est auto-gérée, votre équipe doit s'assurer que l'outil de gestion des configurations y a accès. La plateforme d'hébergement cloud compatible IaaS offre des API qui permettent aux utilisateurs de créer, de supprimer et de modifier automatiquement les ressources d'infrastructure à la demande. Ces API sont également accessibles par des outils de gestion des configurations pour automatiser davantage ces tâches. Digital Ocean, Amazon AWS et Microsoft Azure sont autant d'exemples de plateformes IaaS populaires.

Plateforme de gestion des configurations
L'exigence suivante pour déployer l'IaC est une suite d'outils qui se connecte aux API IaaS et automatise les tâches courantes. Une équipe peut créer un ensemble de scripts et d'outils. Cependant, cela représenterait beaucoup de travail, une maintenance future et probablement un faible ROI. Il existe déjà de nombreuses plateformes de gestion des configurations en open source qui résolvent ce problème, notamment Terraform, Ansible, SaltStack et Chef.

Système de contrôle de version
Une plateforme de gestion des configurations utilise des fichiers texte lisibles par l'homme et par la machine, écrits dans un langage de balisage tel que YAML, pour déclarer les tâches et les séquences que la plateforme doit exécuter. Ces fichiers texte peuvent être traités comme des fichiers de code applicatif et stockés dans un dépôt de système de contrôle de version. Le dépôt sert de source de référence centrale et permet les pull request et les revues de code. Le système de contrôle de version le plus populaire est Git.

Ces dépendances étant en place, considérons un exemple de scénario dans lequel un développeur souhaite ajouter un nouveau service applicatif à un système. Ce scénario aide à démontrer un workflow IaC.

  1. Le développeur modifie un fichier texte de configuration YAML sur la plateforme de gestion des configurations de son choix, par exemple Terraform. Les changements précisent qu'un nouveau serveur d'hébergement est nécessaire.
  2. Le développeur commite des changements sur une branche de fonctionnalité dans le dépôts Git. Comme le dépôt Git du projet est hébergé sur Bitbucket, le développeur ouvre une pull request. Un autre membre de l'équipe révise la pull request et prend connaissance des changements apportés à l'infrastructure. Le membre de l'équipe approuve la pull request et le développeur merge ensuite le commit dans la branche principale du dépôt.
  3. À ce stade, la plateforme de configuration est nécessaire pour exécuter une mise à jour. Le développeur peut déclencher manuellement la mise à jour. Comme l'équipe utilise Bitbucket, elle a également accès à Bitbucket Pipelines et peut automatiser cette étape grâce à un pipeline.
  4. Lors de son exécution, Terraform interagit avec l'IaaS de l'équipe. Il exécute plusieurs commandes sur l'API IaaS pour mettre à jour l'IaaS avec la configuration d'infrastructure attendue.

Conclusion…

L'IaC est une forme hautement productive de gestion des configurations qui se concentre sur l'automatisation de la gestion de l'infrastructure informatique cloud. Une fois que l'IaC est en place, elle peut être utilisée pour atteindre une certaine automatisation de la CI/CD pour les changements apportés à l'infrastructure d'un projet. L'IaC permet d'obtenir de nombreuses informations utiles sur la communication et la transparence autour des changements d'infrastructure. Elle nécessite un ensemble de dépendances telles que des plateformes d'hébergement et des outils d'automatisation, qui sont largement disponibles auprès des entreprises d'hébergement modernes.