Infrastructure as Code (IaC) : gestion d’infrastructure informatique par Code
En matière d’infrastructure informatique, il est aujourd’hui impossible de faire l’impasse sur un matériel virtualisé contrôlable via un logiciel. Les ressources de stockage, de serveur et de réseau, voire des centres de calcul complets, peuvent être assemblés avec précision et mis à l’échelle à tout moment sans accès manuel aux machines concernées. Grâce aux services des fournisseurs d’infrastructure en tant que service, il est même possible de louer le matériel nécessaire et sa gestion par logiciel à un prix avantageux, ce qui rend complètement superflu de posséder toute infrastructure interne.
La gestion des différentes ressources reste toutefois délicate, notamment en raison des exigences sans cesse croissantes en matière d’infrastructure informatique et du fait qu’on utilise souvent les services de plusieurs fournisseurs d’IaaS à la fois. C’est pourquoi le principe d’« Infrastructure as Code », également connu sous le nom d’« infrastructure programmable », connaît un véritable essor.
Qu’est-ce qu’une Infrastructure as Code (IaC) ?
On entend par Infrastructure as Code, ou IaC, un paradigme informatique qui décrit dans un langage informatique non seulement les logiciels installés sur un système, mais aussi l’infrastructure nécessaire à leur fonctionnement, comme l’espace de stockage, la puissance de calcul ou les ressources de réseau. Le principe consiste à programmer les structures matérielles sous forme de code exécutable pouvant être adapté, dupliqué, supprimé et segmenté à tout moment sans difficulté. Dans ce cadre, le concept d’Infrastructure as Code repose sur des techniques de Cloud modernes telles que la virtualisation et une gestion des ressources définie par logiciel qui permet de gérer le matériel sans accès manuel aux périphériques sous-jacents.
Infrastructure as Code : dans les technologies de l’information, l’Infrastructure as Code ou « infrastructure en tant que code » est un paradigme qui prévoit la description de matériel sous la forme d’un code lisible par machine. La construction et la gestion de l’infrastructure informatique peuvent ainsi être considérablement automatisées afin de pouvoir réagir avec précision aux changements ou aux nouvelles exigences.
Quel est l’objectif d’une Infrastructure as Code ?
Au cours de ces dernières années, les exigences en matière de produits logiciels ont rapidement augmenté : cycles de développement de plus en plus courts, recherche d’un maximum de disponibilité et de flexibilité. En dehors de l’optimisation du code, pour obtenir une structure globalement performante, stable et surtout compétitive, il est nécessaire d’améliorer constamment son infrastructure matérielle en lui assurant une maintenance intensive. C’est ici qu’intervient l’Infrastructure as Code, un concept spécialement développé pour renforcer la qualité et l’efficacité des infrastructures. Parmi les objectifs et les tâches incontournables de l’IaC, on trouve notamment :
- L’automatisation maximale des processus,
- la suppression des frontières entre les applications et leur environnement d’exécution,
- la création d’un workflow flexible simplifiant la collaboration au sein de l’entreprise pour tous les participants au processus de développement,
- la transparence des mouvements de contenus et de leurs modifications, qui doivent être compréhensibles à tout moment,
- la « testabilité » des configurations matérielles, dans la même mesure que les logiciels.
En quoi l’Infrastructure as Code se distingue-t-elle des anciennes approches ?
Dans un environnement classique, non virtualisé, l’ensemble des ressources est toujours directement lié au matériel physique, ce qui entraîne non seulement un manque de flexibilité de l’infrastructure, mais aussi la nécessité d’effectuer beaucoup de travail à la main en cas de changement de configuration.
Grâce à la virtualisation des serveurs, des mémoires et des structures de réseau, la situation a considérablement évolué : cette technique permet aux fournisseurs d’offrir à leurs clients des ressources contrôlables de manière centralisée sans avoir à y allouer de matériel dédié. Cela garantit d’une part une fiabilité nettement plus élevée, puisque le matériel défectueux peut par exemple être remplacé immédiatement. Il est d’autre part nettement plus facile pour les deux parties d’ajouter de nouvelles ressources ou de réduire les ressources déjà louées.
Les environnements (définis par logiciel) vont plus loin que les infrastructures virtualisées traditionnelles. Ils se démarquent par le fait que la logique de commande est complètement isolée des différentes composantes matérielles et mise en œuvre dans un logiciel de contrôle central. Le fournisseur et le client peuvent facilement maîtriser cette unité de contrôle grâce aux interfaces et aux outils prévus à cet effet, assembler de façon entièrement individuelle les structures informatiques et les mettre à l’échelle avec précision. Enfin, les deux parties ont l’avantage de bénéficier de performances accrues du matériel, puisque celui-ci n’assure pas le traitement des données.
Dans le cas des services définis par logiciel, vous avez le choix entre des packs individuels tels que Software Defined Storage (mémoire), Software Defined Computing (puissance de calcul) ou Software Defined Networking (structures réseau) et le pack complet Software Defined Data Center (centre de calcul).
L’Infrastructure as Code utilise les techniques mentionnées précédemment en automatisant la gestion commandée par logiciel des ressources virtualisées concernées afin d’exploiter pleinement le potentiel du Cloud. Par conséquent, l’IaC ne doit pas être vue comme une alternative, mais comme un complément ou une optimisation de l’infrastructure définie par logiciel.
Quels sont les avantages et les inconvénients de l’Infrastructure as Code ?
L’Infrastructure as Code contribue de façon déterminante à la satisfaction des exigences en matière de développement logiciel agile. Les modifications à apporter à l’infrastructure sont réalisées grâce à des scripts préconfigurés à une vitesse tout simplement inégalable dans le cadre d’une gestion à la main. Dans ce contexte, il importe peu de savoir si les réglages doivent être effectués au milieu de la nuit, le week-end ou un jour férié. Les erreurs de saisie et de frappe étant exclues, le risque d’erreur diminue, en particulier en ce qui concerne les étapes administratives appelées à être fréquemment répétées. En plus d’une vitesse élevée et d’un faible taux d’erreurs, l’Infrastructure programmée présente par rapport à une administration manuelle les avantages suivants :
- Efficacité élevée : l’IaC offre la possibilité d’automatiser la plus grande partie de la gestion des ressources et contribue ainsi de façon déterminante à l’optimisation du cycle de développement logiciel.
- Réutilisation : dès que le code est écrit pour une infrastructure, il peut être exécuté à tout moment et aussi souvent que nécessaire pour mettre l’infrastructure en place. Il en va de même pour les environnements Sandbox pendant les phases de développement.
- Gestion des versions : là où l’on trouve du code, il est également possible d’en gérer les différentes versions. L’Infrastructure as Code permet ainsi d’assurer la documentation et le suivi de toutes les modifications apportées à une infrastructure. L’un des avantages est la possibilité de restaurer une configuration antérieure sans difficulté.
- Réduction des coûts/charges : l’automatisation de la gestion de l’infrastructure permet d’économiser beaucoup de temps et d’argent pour les réinvestir avantageusement dans d’autres domaines.
Ce dernier avantage n’est toutefois pas sans restrictions. En effet, il est réel lorsque l’environnement d’infrastructure en tant que code est bien programmé, mais il ne faut pas négliger l’effort nécessaire à sa conception et à sa mise en œuvre. Pour de nombreux administrateurs responsables, le modèle IaC implique des changements majeurs, car à défaut de comprendre de manière exhaustive le concept d’architecture de Cloud ou de posséder le savoir-faire nécessaire en matière de langages de programmation (Java, Node.js, Python, etc.) et d’utilisation des API, il est peu réaliste de vouloir passer à une infrastructure automatisée. Il faut en effet s’attendre à des coûts relativement élevés et à un effort d’intégration important, surtout au début.
Outils d’IaC : des appuis essentiels dans la programmation d’une Infrastructure as Code
Nous l’avons déjà mentionné au début de cet article : dans la plupart des cas, les entreprises font appel aux services de plusieurs fournisseurs d’IaaS. Cela implique que les administrateurs doivent composer avec les particularités et surtout les différentes interfaces des plateformes utilisées. Il est également possible de faire appel à des outils ou des infrastructures logicielles d’IaC spécifiques qui proposent leurs propres langages de configuration pour pouvoir gérer les ressources quel que soit le fournisseur, ce qui rend superflu d’avoir une connaissance précise des API concernées. Les logiciels suivants font partie des solutions les plus appréciées :
- Terraform : disponible en open source, la version de base de Terraform développée par HashiCrop peut être téléchargée et utilisée gratuitement. Deux éditions payantes proposent des fonctionnalités pour les institutions et les organisations ainsi que pour le travail en équipe.
- AWS CloudFormation : CloudFormation est l’outil d’IaC d’Amazon Web Services (AWS), ce qui le rend quasi indispensable quand on travaille avec les produits AWS tels que ELB, S3 ou EFS. Il n’y a pas de frais d’utilisation supplémentaires, de sorte que les utilisateurs paient uniquement pour les ressources qu’ils réservent.
- Google Cloud Deployment Manager : CloudFormation est à AWS ce que Deployment Manager est à la plateforme Cloud de Google. Les personnes tirant leurs ressources d’IaaS de Google peuvent facilement les gérer à l’aide de cet outil gratuit en utilisant des fichiers de configuration centralisés dans le langage de balisage YAML.
- Chef Infra : Chef Infra est la solution d’IaC de l’entreprise américaine Chef. Disponible depuis avril 2019 sous licence libre Apache 2.0, Chef Infra est notamment utilisé par Facebook. Parmi les plateformes supportées, on peut citer Google Cloud, Microsoft Azure, Amazon EC2 et OpenStack.
- Red Hat Ansible Tower : Depuis 2015, l’outil d’Infrastructure as Code Ansible fait partie de la gamme de l’éditeur de logiciels Red Hat. Il offre un tableau de bord visuel, une invite de commande propre et une API REST performante. Les deux packs disponibles « Standard » et « Premium » sont cependant gratuits.
Infrastructure as Code : exemples
L’approche par infrastructure en tant que code présente un intérêt pour toutes les entreprises qui développent et exploitent des applications complexes et dépendent donc d’une infrastructure tout aussi complète et performante. Voici des raisons majeures en faveur de l’utilisation d’une infrastructure programmée :
- l’utilisation d’une vaste quantité de ressources d’IaaS,
- l’infrastructure est louée par de nombreux fournisseurs et de nombreuses plateformes différents,
- l’infrastructure nécessite des adaptations régulières,
- une bonne documentation des modifications de l’infrastructure est demandée,
- une collaboration optimale entre les administrateurs et les développeurs est souhaitée.
Les entreprises pourraient en principe programmer leurs propres fichiers de configuration d’IaC, et certaines le font probablement en partie, mais l’utilisation des outils ou des infrastructures logicielles mentionnés plus haut fait partie du quotidien de tous les administrateurs qui travaillent avec des IaC. Plutôt que des exemples concrets d’Infrastructure as Code, les vidéos suivantes vous montrent pour finir comment programmer le code de l’infrastructure avec des outils d’IaC pratiques (dans le cas présent : AWS CloudFormation et Terraform).