Infrastructure as Code
Cloud et l’émergence de l’IaC
Depuis près de vingt ans, avec le lancement d’Amazon Web Services en 2006, les entreprises peuvent désormais s’appuyer sur des services cloud pour créer l’infrastructure qui héberge leurs applications.
La promesse du cloud, sous toutes ses formes as a Service : IaaS (Infrastructure as a Service), CaaS (Containers as a Service), DbaaS (Database as a Service), ou SaaS (Software as a Service), est de permettre aux utilisateurs et entreprises de pouvoir consommer des ressources à la demande, avec une capacité et une puissance de calcul virtuellement illimitée. Les principaux fournisseurs comme Amazon Web Services (AWS), Microsoft Azure et Google Cloud Platform (GCP) ont démocratisé l’accès à cette puissance de calcul, permettant aux entreprises, toutes tailles confondues, de bénéficier d’une agilité et d’une réactivité qu’il n’est pas possible d’avoir dans un modèle de déploiement traditionnel (on-premises).
Les services de type IaaS, pour Infrastructure as a Service, proposent le plus souvent la mise à disposition de machines virtuelles ou physiques, de disques, ainsi que des réseaux virtuels permettant de faire communiquer ces machines. Les services de type DbaaS proposent la mise à disposition de systèmes de base...
L’Infrastructure as Code - SDKs et CLIs
Comme les services cloud sont exposés via des API, il est possible de les consommer avec du code, c’est même l’objectif premier !
Cependant, créer une infrastructure complète en utilisant des requêtes HTTP GET ou POST avec curl n’est pas des plus pratiques.
En plus des API, les services cloud sont nombreux à proposer un SDK (pour Software Development Kit) pour différents langages. Les SDK permettent d’implémenter facilement l’utilisation des API des services cloud, sans avoir à implémenter des appels d’API bas-niveau. Les SDK implémentent donc l’authentification aux services, ainsi que le format des appels envoyés aux API. L’utilisation d’un SDK permet de développer des programmes qui créent des éléments d’infrastructure (VM, réseaux, bases de données, etc.) en Java, Python, ou JavaScript !
Les services cloud proposent aussi l’utilisation d’un CLI (pour Command Line Interface), permettant d’utiliser leur service au travers d’un Shell et de pouvoir développer des scripts manipulant les éléments d’infrastructure.
Par exemple, pour le service cloud Google GCP, plutôt que de naviguer à travers la console web, les administrateurs ou opérateurs peuvent créer...
Terraform
Terraform est un outil open source d’Infrastructure as Code. Terraform est avant tout un outil de provisioning, même s’il peut être utilisé pour de la configuration.
Terraform a été créé en 2014. Il est développé par la société HashiCorp, fondée par Mitchell Hashimoto et Armon Dadgar. HashiCorp a été racheté par IBM en avril 2024.
Terraform est développé dans le langage de programmation Golang (souvent nommé plus simplement le langage Go). Cette caractéristique permet à Terraform d’être compilé en un binaire natif, et de ne pas nécessiter de runtime particulier pour son exécution. Son installation et son exécution se veulent donc plus simples, plus légères et plus performantes que les outils des différents services cloud, qui sont souvent développés en Python (c’est le cas pour les CLI de AWS, Azure et GCP).
1. L’aspect multicloud
Terraform se veut être un écosystème multicloud, et ouvert. Contrairement aux outils propriétaires des fournisseurs de cloud, comme CloudFormation pour AWS, ou Deployment Manager pour GCP, Terraform peut déployer de l’infrastructure sur n’importe quel service cloud ou API :
-
les services clouds américains Amazon Web Services, Microsoft Azure, Oracle Cloud et Google Cloud Platform ;
-
des services d’infrastructure cloud comme Scaleway...
Conclusion
Ce chapitre a survolé quelques principes de cloud et de l’Infrastructure as Code qui font le succès de Terraform.
Le chapitre suivant présente l’architecture de Terraform. Vous allez en apprendre plus sur son fonctionnement et ses différents composants, comment l’installer et comment utiliser ses principales commandes de CLI.