L'infrastructure en tant que code (IaC) utilise un langage de codage descriptif de haut niveau pour automatiser le provisionnement de l'infrastructure informatique. Grâce à cette automatisation, les développeurs n'ont plus besoin de provisionner et de gérer manuellement les serveurs, les systèmes d'exploitation, les connexions aux bases de données, le stockage et d'autres éléments d'infrastructure chaque fois qu'ils veulent développer, tester ou déployer une application logicielle.
À une époque où il n'est pas rare qu'une entreprise déploie des centaines d'applications en production chaque jour – et où l'infrastructure est constamment mise en service, démantelée et adaptée en fonction des demandes des développeurs et des utilisateurs – il est essentiel pour une entreprise d'automatiser son infrastructure afin de contrôler les coûts, de réduire les risques et de répondre rapidement aux nouvelles opportunités commerciales et aux menaces concurrentielles. L'IaC rend cette automatisation possible.
L'IaC est également une pratique DevOps essentielle, indispensable pour assurer un cycle de vie de livraison de logiciels à un rythme compétitif. Elle permet aux équipes DevOps de créer et de versionner rapidement l'infrastructure de la même manière qu'elles versionnent le code source, et de suivre ces versions afin d'éviter les incohérences entre les environnements informatiques qui peuvent entraîner de graves problèmes lors du déploiement.
Sai Vennam examine de plus près l'IaC dans la vidéo « What is Infrastructure as Code? » suivante :
Le provisionnement de l'informatique traditionnelle est un processus long et coûteux qui nécessite la configuration physique du matériel, l'installation et la configuration du logiciel du système d'exploitation, ainsi que la connexion aux logiciels intermédiaires, aux réseaux, au stockage, etc. par du personnel spécialisé.
La virtualisation et le développement cloud natif éliminent le problème de la gestion du matériel physique en permettant aux développeurs de provisionner leurs propres serveurs virtuels ou conteneurs à la demande. Cependant, le provisionnement d'une infrastructure virtualisée continue de détourner les développeurs de leur travail de codage, les oblige à répéter le travail de provisionnement pour chaque nouveau déploiement et ne fournit pas un moyen facile de suivre les changements d'environnement et d'éviter les incohérences qui ont un impact sur les déploiements.
L'infrastructure en tant que code (IaC) est l'étape finale qui permet aux développeurs de « commander » efficacement une infrastructure entièrement documentée et versionnée en exécutant un script. Les avantages sont précisément ceux que l'on peut imaginer :
Une décision importante à prendre lorsqu'on automatise l'infrastructure avec l'IaC et lorsqu'on choisit une solution IaC est de savoir s'il faut établir une infrastructure modifiable ou non modifiable.
Une infrastructure modifiable est une infrastructure qui peut être modifiée ou mise à jour après son provisionnement initial. L'infrastructure modifiable offre aux équipes de développement la flexibilité nécessaire pour effectuer des personnalisations ad hoc du serveur afin, par exemple, de mieux répondre aux exigences du développement ou de l'application ou de réagir à un problème de sécurité émergent. Mais elle compromet également un avantage clé de l'IaC, à savoir la capacité de maintenir la cohérence entre les déploiements ou au sein des versions, et peut rendre le suivi des versions de l'infrastructure beaucoup plus difficile.
Pour ces raisons, la plupart des IaC sont mises en œuvre sous la forme d'une infrastructure non modifiable — une infrastructure qui ne peut pas être modifiée une fois qu'elle a été provisionnée. Si l'infrastructure non modifiable doit être modifiée, elle doit être remplacée par une nouvelle infrastructure. Étant donné qu'il est possible de créer rapidement une nouvelle infrastructure dans le cloud, notamment grâce à l'IaC, une infrastructure non modifiable est beaucoup plus réalisable et pratique qu'il n'y paraît.
L'infrastructure non modifiable fait passer l'IaC à l'étape logique suivante, en renforçant l'IaC pour mieux garantir les avantages qu'elle offre. Elle élimine pratiquement toute dérive de configuration et facilite le maintien de la cohérence entre les environnements de test et de déploiement. Elle facilite également la maintenance et le suivi des versions de l'infrastructure et permet de revenir en toute confiance à n'importe quelle version si nécessaire.
Lors du choix d'une solution IaC, il est également important de comprendre la différence entre une approche déclarative et une approche impérative de l'automatisation des infrastructures.
Dans la plupart des organisations, l'approche déclarative – également connue sous le nom d'approche fonctionnelle – est la mieux adaptée. Dans l'approche déclarative, vous spécifiez l'état final souhaité de l'infrastructure que vous voulez provisionner et le logiciel IaC s'occupe du reste – faire tourner la machine virtuelle (VM) ou le conteneur, installer et configurer les logiciels nécessaires, résoudre les interdépendances entre systèmes et logiciels et gérer les versions. Le principal inconvénient de l'approche déclarative est qu'elle nécessite généralement un administrateur qualifié pour la mise en place et la gestion, et ces administrateurs sont souvent spécialisés dans leur solution préférée.
Dans l'approche impérative – également connue sous le nom d'approche procédurale – la solution vous aide à préparer des scripts d'automatisation qui provisionnent votre infrastructure étape par étape. Bien que cette approche puisse représenter une charge de travail supplémentaire à mesure que vous évoluez, elle peut être plus facile à comprendre pour le personnel administratif existant et peut tirer parti des scripts de configuration déjà en place.
Le choix d'une approche déclarative ou impérative équivaut à utiliser un GPS ou à suivre des instructions détaillées. Avec un GPS, vous entrez une adresse et le GPS fait le reste, en traçant l'itinéraire le plus rapide et en évitant le trafic pour vous - mais vous aurez probablement besoin d'un expert pour vous dire pourquoi il a fait les choix qu'il a faits. Les instructions détaillées sont basées sur l'expérience personnelle ; le fournisseur connaît l'itinéraire et sait pourquoi il l'a choisi, mais si vous rencontrez des obstacles ou si vous voulez optimiser l'itinéraire, vous devez demander de l'aide ou faire le travail vous-même.
Si de nombreux outils IaC open source sont disponibles, les outils les plus couramment adoptés sont Ansible et Terraform :
Ansible (lien externe à ibm.com) est un projet communautaire open source sponsorisé par Red Hat, conçu pour aider les organisations à automatiser le provisionnement, la gestion de la configuration et le déploiement des applications. Outil d'automatisation déclaratif, Ansible vous permet de créer des « playbooks » (écrits dans le langage de configuration YAML) afin de spécifier l'état souhaité pour votre infrastructure, puis se charge du provisionnement pour vous. Ansible est un choix populaire pour automatiser le provisionnement des conteneurs Docker et les déploiements Kubernetes.
Terraform est un autre outil de provisionnement déclaratif et d'orchestration d'infrastructure qui permet aux ingénieurs d'automatiser le provisionnement de tous les aspects de l'infrastructure de leur entreprise, qu'elle soit basée sur le cloud ou sur site.
Terraform fonctionne avec tous les principaux fournisseurs de cloud et vous permet d'automatiser la mise en place de ressources à travers plusieurs fournisseurs en parallèle, indépendamment de l'emplacement des serveurs physiques, des serveurs DNS ou des bases de données. Il peut également provisionner des applications écrites dans n'importe quel langage.
Contrairement à Ansible, Terraform n'offre pas de fonctionnalités de gestion de la configuration, mais il travaille main dans la main avec des outils de gestion de la configuration (par exemple, Cloud Formation) pour provisionner automatiquement l'infrastructure dans l'état décrit par les fichiers de configuration et pour modifier automatiquement la mise à jour du provisionnement si nécessaire, en réponse aux changements de configuration.
Pour un examen plus approfondi du choix d'un outil IaC, voir « Infrastructure en tant que code : Chef, Ansible, Puppet ou Terraform ? »
Tirez parti d'une infrastructure sous forme de code pour configurer et automatiser les ressources afin que vous puissiez vous concentrer sur vos applications clés.
Un logiciel DevOps puissant pour créer, déployer et gérer des applications cloud natives hautement sécurisées sur plusieurs appareils, environnements et clouds.
DevOps accélère la distribution de logiciels de meilleure qualité en combinant et en automatisant le travail des équipes de développement de logiciels et des opérations IT.
Le cloud computing permet de se connecter à une infrastructure informatique via Internet et d'utiliser des ressources informatiques sans avoir à les installer et à les gérer sur site.
Apprenez à sélectionner un outil d'Infrastructure en tant que code.