Accueil les sujets Infrastructure en tant que code Qu'est-ce que l'infrastructure en tant que code (IaC) ?
L'infrastructure en tant que code (IaC) automatise le provisionnement de l'infrastructure pour permettre à votre entreprise de développer, de déployer et de faire évoluer ses applications cloud plus rapidement, avec moins de risques et à moindre coût.
DevOps
Traînées de lumière en mouvement dans un tunnel
Qu'est-ce que l'infrastructure en tant que code (IaC) ?

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 :

Avantages de l'infrastructure en tant que code

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édiairesaux réseauxau 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 :

  • Mise en production/mise sur le marché plus rapide : l'automatisation de l'IaC accélère considérablement le processus de provisionnement de l'infrastructure pour le développement, les tests et la production (ainsi que pour la mise à l'échelle ou le retrait de l'infrastructure de production selon les besoins). Dans la mesure où elle codifie et documente tout, l'IaC peut même automatiser le provisionnement de l'infrastructure existante, qui pourrait autrement être régie par des processus fastidieux (comme l'émission d'un ticket).

  • Amélioration de la cohérence sans « dérive de la configuration » : la dérive de la configuration se produit lorsque des modifications et des mises à jour ad hoc de la configuration entraînent une inadéquation des environnements de développement, de test et de déploiement. Cela peut entraîner des problèmes lors du déploiement, des vulnérabilités en matière de sécurité et des risques lorsqu'il s'agit de développer des applications et des services qui doivent répondre à des normes strictes de conformité réglementaire. L'IaC empêche la dérive en provisionnant le même environnement à chaque fois.

  • Développement plus rapide et plus efficace : en simplifiant le provisionnement et en assurant la cohérence de l'infrastructure, l'IaC peut accélérer en toute confiance chaque phase du cycle de vie de la livraison des logiciels. Les développeurs peuvent rapidement mettre en place des bacs à sable et des environnements d'intégration continue/de déploiement continu (CI/CD). Les équipes d'assurance qualité peuvent rapidement fournir des environnements de test complets. Les opérations peuvent rapidement mettre en place une infrastructure pour les tests de sécurité et d'acceptation par les utilisateurs. Et lorsque le code réussit les tests, l'application et l'infrastructure de production sur laquelle elle fonctionne peuvent être déployées en une seule étape.

  • Protection contre les désabonnements : pour maximiser l'efficacité dans les organisations sans IaC, le provisionnement est généralement délégué à quelques ingénieurs ou informaticiens qualifiés. Si l'un de ces spécialistes quitte l'organisation, les autres se retrouvent parfois à devoir reconstruire le processus. L'IaC garantit que les connaissances en matière de provisionnement restent toujours au sein de l'organisation.

  • Réduction des coûts et amélioration du retour sur investissement : en plus de réduire considérablement le temps, les efforts et les compétences spécialisées nécessaires à l'approvisionnement et à la mise à l'échelle de l'infrastructure, l'IaC permet aux entreprises de tirer le meilleur parti de la structure de coûts du cloud computing basée sur la consommation. Elle permet également aux développeurs de passer moins de temps sur la « plomberie » et plus de temps à développer des solutions logicielles innovantes et critiques.
Infrastructure non modifiable et infrastructure modifiable

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.

Approche déclarative ou impérative

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.

Outils d'infrastructure en tant que code

Si de nombreux outils IaC open source sont disponibles, les outils les plus couramment adoptés sont Ansible et Terraform :

Qu'est-ce qu'Ansible ?

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. 

Qu'est-ce que Terraform ?

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 ? »

Solutions connexes
IBM Cloud® Schematics

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.

Explorer IBM Cloud® Schematics
Solutions IBM DevOps

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.

Explorer les solutions IBM DevOps
Ressources Qu'est-ce que DevOps ?

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.

Qu'est-ce que le cloud computing ?

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.

Infrastructure en tant que code : Chef, Ansible, Puppet ou Terraform ?

Apprenez à sélectionner un outil d'Infrastructure en tant que code.

Pour aller plus loin

Basé sur Terraform, IBM Cloud® Schematics est une solution simplifiée d'automatisation de la gestion de l'infrastructure qui peut aider les entreprises à améliorer les performances de leurs applications grâce à un provisionnement et une orchestration cohérents.

En savoir plus sur IBM Cloud® Schematics