Infrastructure-as-Code avec Terraform (IaC)

Le mouvement DevOps comprend une série de méthodes d’ingénierie informatique visant à réduire le temps nécessaire pour apporter des modifications à la conception et au déploiement des logiciels. L’une de ces méthodes consiste à s’appuyer sur l’Infrastructure-as-Code pour rédiger un plan contenant des spécifications de déploiement prêtes à être orchestrées sur site ou dans le Cloud.

 

C’est quoi “Infrastructure-as-Code”?

 

Le principe de l’Infrastructure-as-Code (IaC) est de permettre à l’équipe DevOps de gérer l’intégralité ou une grande partie de l’infrastructure uniquement avec le code. Par “infrastructure”, il faut comprendre les différentes couches sur lesquelles l’application est exécutée : réseau virtuel, machines serveurs, disques, base de données, enregistrement DNS, etc… Les développeurs ou les responsables de l’ infrastructure vont donc écrire avec du code la configuration voulue de tous les composants de l’infrastructure et un outil IaC fera automatiquement le provisioning, la configuration et le déploiement de l’infrastructure.

 

Le principe de l’Infrastructure-as-Code (IaC)

Le principe de l’Infrastructure-as-Code (IaC)

 

De façon générale, ces outils d’Infrastructure-as-Code peuvent prendre en charge toutes les actions qui peuvent être scriptées. Ils peuvent ainsi:  

  • instancier une ou plusieurs machines virtuelles,
  • ensuite les configurer, y installer une base de données, un serveur web ou un serveur d’application,
  • s’occuper de la mise en réseau,
  • réaliser la création des comptes d’utilisateurs et des comptes de services,
  • et bien d’autres encore

 

Quels sont les avantages à opter pour l’Infrastructure-as-Code ?

 

Adopter l’Infrastructure-as-Code en tant que méthode de gestion de l’infrastructure apporte des avantages non négligeables :

  • L’IaC permet d’éliminer les tâches manuelles qui sont souvent accompagnées d’erreurs sur l’approvisionnement de l’infrastructure. Cela autorise l’industrialisation du processus et de gagner en rapidité et en fiabilité.
  • Puisque les outils d’IaC offrent la possibilité de créer ,de détruire et de redéployer à la volée des ressources dans le Cloud via la réutilisation du code, il est plus facile de répliquer de façon efficace les environnements applicatifs.
  • Déclarer les propriétés de toute l’infrastructure dans le code donne plus de visibilité pour les équipes sur l’existant ainsi que sur les modifications côté infrastructure.

 

Les outils d’Infrastructure-as-Code

 

On peut classifier les outils d’IaC en deux catégories selon son “style de code”:

  • Le style de code impératif permet de déployer l’infrastructure en spécifiant toutes les étapes nécessaires à son approvisionnement. Le code qui en résulte sert de guide pour l’outil IaC concerné. Les outils comme Ansible et Chef utilisent ce style de code.
  • L’autre style qui est dit “déclaratif” permet d’effectuer le déploiement de l’infrastructure en listant et en décrivant toutes les ressources nécessaires sans pour autant préciser la manière avec laquelle l’outil va les déployer. En adoptant ce style, c’est l’outil d’IaC qui se chargera de déterminer les instructions à exécuter afin de concrétiser tout ce que le développeur a écrit dans le code. Terraform, CloudFormation, SaltStack sont des outils ayant un style de code déclaratif.

 

Pourquoi utiliser Terraform?

 

Terraform est en quelque sorte le couteau suisse multi-cloud des outils IaC, c’est-à-dire qu’il est totalement indépendant du cloud et permet d’orchestrer des grandes infrastructures pour les applications distribuées complexes. L’automatisation de Terraform se présente sous différentes formes et est orchestrée à des degrés divers, l’accent étant mis sur le cycle de base planifier/appliquer. Terraform prend également en charge les aperçus de changement et d’approvisionnement, et dispose d’un ensemble de fonctionnalités performantes pour répliquer les déploiements et les instances de serveurs. Terraform va encore plus loin avec son contrôle de version et ses états d’infrastructure distants qui fournissent une source de vérité centralisée pour les équipes distantes travaillant en collaboration.

Terraform est un bon choix d’outil d’IaC pour ces quelques raisons:

  • Terraform utilise le style de code déclaratif. Ce style de code, pour rappel, permet de définir l’état final souhaité de l’infrastructure sans pour autant préciser les étapes pour arriver à cet état, contrairement au style de code impératif que Chef et Ansible utilisent.
  • Terraform en tant qu’outil IaC orienté orchestration est compatible avec presque tout type d’infrastructure que ce soit de l’infrastructure Cloud ou on-premise. Cela apporte une certaine homogénéité du code pour approvisionner toutes ses infrastructures de déploiement.
  • Terraform utilise le concept planifier/appliquer ce qui est avantageux pour l’équipe de déploiement vu que Terraform montre à chaque fois la différence entre l’état actuel de l’infrastructure et l’état désiré pour le déploiement.
  • L’état de l’infrastructure peut être versionné et est réutilisable à tout moment.
  • Terraform n’a pas besoin d’un processus serveur pour fonctionner, contrairement à Chef qui nécessite une installation côté serveur.
  • La communauté autour de Terraform est très large et active. Cet outil est également soutenu par les gros acteurs du Cloud.

 

Comment fonctionne Terraform?

 

Workflow de Terraform

Workflow de Terraform

 

Le fonctionnement de Terraform repose sur un workflow de trois étapes:

  • Write” ou l’écriture du code. C’est durant cette étape que l’équipe DevOps conçoit et écrit le code de l’infrastructure selon un besoin fixé en avance. Terraform lit et interprète principalement le langage HCL pour le code. Il existe également un outil de développement pour les autres langages comme TypeScript, Python, Java, C# et Go si le développeur souhaite utiliser son langage courant pour déployer de l’infrastructure.
  • “Plan” ou planification. La seconde étape est une simulation du code. C’est-à-dire que Terraform donnera un aperçu détaillé de toutes les modifications qui vont être apportées dans l’infrastructure réelle. C’est une étape importante étant donné que l’équipe DevOps peuvent s’assurer qu’aucune modification indésirable ne soit apportée à l’infrastructure.
  • “Apply” ou application. La dernière étape consiste à appliquer le code sur l’infrastructure réelle. Avec son style de code déclaratif et sa fonctionnalité de gestion de l’état de l’infrastructure, Terraform est en mesure de comparer cet état avec le code afin d’apporter les changements nécessaires (création, modification ou suppression des ressources).

 

Conclusion

L’Infrastructure-as-Code facilite la gestion de l’infrastructure pour l’équipe DevOps tout en gagnant en rapidité et en fiabilité ce qui est conforme avec les objectifs de la réforme DevOps elle-même. Terraform est l’un des outils d’IaC auquel les spécialistes d’infrastructure IT ainsi que les développeurs s’intéressent de plus en plus grâce aux nombreux avantages qu’il apporte en tant qu’outil IaC et par rapport à ses concurrents.

Chez HaiRun Technology, nous adoptons Terraform dans les projets de nos clients qui sont hébergés dans le Cloud. Même si des ressources ont déjà été déployées manuellement, nous prenons soin aussi de l’importer dans Terraform et de mettre en place les pipelines d’intégration continue et de livraison continu basé sur Terraform. Vous aussi, vous pouvez nous confier la conception et la gestion de votre infrastructure Cloud avec les outils comme Terraform via notre service DevOps.