Terraform, le provisioning facile dans le cloud
Terraform propose une solution performante du provisioning des ressources présentes dans le cloud. Cet outil va devenir la référence incontournable pour tout administrateur cloud même s’il ne s’agit plus d’une solution exotique.
Avec Terraform, le provisioning des machines virtuelles et du réseau n’a jamais été aussi simple et rapide.
Terraform, c’est quoi ?
Terraform est une application cliente open source qui permet de provisionner, c’est-à-dire de créer des ressources dans le cloud à l’aide de fichier de configuration. Vous piloterez vos ressources dans n’importe quel fournisseur de cloud majeur comme Google, Amazon AWS, OVH ou Microsoft Azure, mais pas seulement. La possibilité de piloter vos solutions en entreprise (on premise) comme VMware ESX ou Nutanix en fait un outil indispensable. D’un point de vue technique, Terraform est développé en langage GO de Google (encore lui…).
« C’est un composant important dans ce que l’on nomme le DevOps, c’est-à-dire, l’interconnexion entre le monde des développeurs, des opérationnels et des infrastructures »
En offrant l’Infrastructure as Code, Terraform complète ainsi les solutions d’« Infrastructure as a Service ».
Microsoft inclut par exemple nativement Terraform dans son célèbre Cloud Shell Azure, preuve en est que cette solution a su faire sa place dans le nouveau monde.
- Terraform : un produit proposé par HashiCorp
HashiCorp est une société américaine fondée en 2012 par Mitchell Hashimoto et Armon Dadgar proposant des solutions en open source. Créée suite au bouleversement que le cloud computing apporte aux entreprises, Hashicorp propose de nombreux des outils open source et des produits commerciaux. Ceux-ci adressent différentes problématiques à l’ensemble de la chaîne IT d’une entreprise (développeurs, opérateurs et professionnels de la sécurité). On y retrouve une palette d’outils soit en Open Source soit en version payante c’est-à-dire avec un support permettant de gagner encore plus de temps dans la gestion des infrastructures cloud.
- Terraform : une application cliente
Terraform est une application cliente qui va utiliser des fichiers de configuration locale permettant de piloter une infrastructure. Celle-ci n’est pas uniquement cloud puisque qu’il existe des connecteurs appelés provider permettant de piloter de très nombreux composants. Il vous est également possible de créer vos propres providers afin de gérer des services spécifiques que vous auriez développés et exposés à l’aide d’API par exemple.
L’application Terraform se nomme terraform.exe. C’est un gros binaire qu’il suffit juste de copier sur votre poste de travail. Actuellement il fait environ 75 Mo.
- Terraform et les fournisseurs de cloud
A l’origine, la vocation de Terraform était de simplifier le provisionning des ressources pour les fournisseurs de Cloud. Cependant au vu de la puissance du produit et de sa mise à disposition de la communauté Open Source, celui-ci fut adopté par de nombreuses entreprises.
Terraform est disponible dans le Cloud Shell de Microsoft Azure. Aussi, Microsoft documente également le déploiement de certaines ressources dans Azure via Terraform.
Que vous utilisiez un cloud public ou un cloud privé, de la virtualisation ou de l’hyperconvergence, Terraform est incontournable pour déployer une infrastructure complète.
Les concepts de Terraform
Aborder une nouvelle technologie s’avère délicate. Ainsi je vous présenterai de façon succincte les différents composants vous permettant une prise en main rapide du produit.
- Un provider Terraform, c’est quoi ?
Un provider est un agent qui permet de piloter un type de fournisseur. Nous parlerons par exemple du provider AWS pour gérer nos ressources dans Amazon AWS. Mais ne croyez pas que le nombre de providers est limité. Pour vous en convaincre, je vous invite à consulter ce lien afin de découvrir la liste à jour des providers existants. Cette liste ne fait que s’agrandir sans compter toutes celles que vous pouvez télécharger sur le fameux Git.
Pour faire simple, vous appelez dans votre fichier le provider correspondant à la ressource à provisionner. Celui-ci appellera les commandes spécifiques à son environnement. Lorsque Terraform exécutera votre projet, le provider défini sera téléchargé sur votre machine cliente dans le répertoire de votre projet. Terraform utilisera le provider pour passer toutes les commandes que vous aurez indiqué au fournisseur cloud (ou application). Bien entendu il faut que les commandes soient disponibles en mode API. Terraform est ainsi en mesure de les implémenter.
- Le langage HCL de Terraform
Le terme HCL ne signifie pas Hardware Compatibilty List comme c’était le cas avec Microsoft mais HashiCorp Configuration Language.
« Ce sont des fichiers textes assez intuitifs qui décrivent ce qu’on souhaite effectuer »
Bien entendu, même si les exemples que je vous présente ici sont relativement simples à comprendre, il est possible de créer un ensemble de fichiers qui peuvent ressembler à une usine à gaz pour un novice. Comme nous parlons d’Infrastructure as a Code, un minimum de connaissance de développement est fortement utile, tout comme lorsque vous développez un script.
Pour les plus courageux, il est possible d’utiliser des fichiers texte au format JSON afin de piloter votre infrastructure.
Tous les fichiers possèdent comme extension un « .tf » avec tf pour Terraform bien entendu. Voici un exemple d’un fichier .tf permettant de créer dans le cloud Amazon AWS (provider aws), une instance EC2 de type t2.micro basée sur une image ami centos de chez Amazon.
provider “aws” {
access_key = “”
secret_key = “”
region = ” us-east-2″”
}
resource “aws_instance” “serveur _web” {
ami = ” ami-e1496384″
instance_type = “t2.micro”
}
- Les fichiers de Terraform
Basiquement, un projet de déploiement Terraform consiste en un répertoire contenant un ou plusieurs fichiers. L’arborescence d’un projet avant le déploiement par Terraform est la suivante :
C:\Terraform\MonProjet\ : répertoire contenant tous les fichiers .tf
MonserveurFrontEnd.tf : nom d’un fichier tf permettant d’installer un serveur web Front End
terraform.tfvars (optionnel) : nom du fichier contenant les variables que nous verrons plus tard. Pour faire simple, je vous conseille de nommer toujours ce fichier terraform.tfvars. Sinon Terraform n’interprétera pas ce fichier correctement nativement.
var.tf (dépend de terraform.tfvars) : Ce fichier contient la déclaration des variables utilisées dans terraform.tfvars. Le nom de fichier peut être différent du moment qu’il comporte l’extension .tf.
Vous trouverez dans votre répertoire deux autres fichiers :
- tfstate : fichier du retour du provider pour l’exécution de votre script. Vous y retrouverez par exemple l’adresse IP publique et privée d’une machine EC2 si celle-ci a été déployée dans le cloud Amazon
- tfstate.backup : fichier d’état de sauvegarde. Il s’agit de la version n-1 du fichier d’état.
Votre dossier peut, bien entendu, contenir une multitude de fichiers à l’extension point tf comme par exemple :
- tf : nom d’un fichier tf permettant d’installer un serveur mysql
- tf : nom du fichier permettant de gérer l’adresse IP de votre serveur front-end en faisant appel à un autre provider comme par exemple Gandi. On commence ainsi à mieux percevoir la puissance de la chose
Une fois que vous aurez initialisé (terraform init) votre projet contenu dans les fichiers .tf, un dossier « .terraform » sera créé. Celui-ci contiendra par exemple sous Windows un dossier plugins, contenant un sous dossier \windows_amd64. C’est dans ce dossier que Terraform récupérera le binaire correspondant au provider utilisé dans votre fichier texte .tf. Par exemple, il peut s’agir du fichier terraform-provider-aws_v1.35.0_x4.exe si vous pilotez une instance AWS. Un fichier lock.json accompagne le provider.
- Les variables dans Terraform
Pour vous simplifier la vie, vous serez vite amené à travailler avec des variables dans Terraform. Celles-ci permettront de créer des environnements identiques comme par exemple le déploiement d’une préproduction identique à la production en une ligne de commande.
Il est donc indispensable de rendre vos fichiers de configuration le plus génériques possible afin d’être en mesure de diminuer au maximum vos interventions. Vous pourrez également utiliser certains fichiers pour différents projets ou clients en n’ajustant uniquement votre fichier de variable.
Il existe sur Github de très nombreux fichiers d’exemples Terraform prêts à l’emploi. Vous pouvez également participer activement à cette belle aventure en publiant vos fichiers tf.
- Terraform et Packer
Terraform permet de déployer une image à partir d’un « ami » ou d’un iso existant. Ainsi, nous obtenons une installation que je qualifierais de « scriptée ». Pour aller plus loin, il est possible d’optimiser d’avantage le processus. On utilisera ainsi Packer pour créer une nouvelle image contenant un certain nombre de composants. Ainsi, vous diminuerez votre temps de déploiement.
Terraform permet de piloter une installation. De cette installation, on en crée une image avec Packer. Ainsi vous maîtrisez intégralement la chaîne de création de vos ressources. Le logiciel Packer du même éditeur est ainsi complémentaire à Terraform. Les deux sont donc utilisés conjointement.
- Repository des fichiers TF
Lorsque l’on travaille avec ce type d’outil le versionning des fichiers est indispensable. Vous pouvez les publier de façon publique sur github ou prendre un abonnement payant afin que ceux-ci restent privés. Une autre solution en entreprise consiste à utiliser le produit open source Gitlab afin de disposer d’un serveur de repository git privé dans votre réseau d’entreprise.
« L’avantage de Gitlab par rapport à Github est la présence d’outils d’intégration continue ou de déploiement continu »
Avec un peu de pratique, vous pourrez piloter vos déploiements Terraform avec Gitlab. Ainsi, je vous conseille de vous faire la main sur Terraform afin de mettre en œuvre une véritable infrastructure DevsOps.
Cependant, cette brique deviendra rapidement indispensable.
Tuto Terraform
- Installation de Terraform
L’installation de Terraform est relativement simple. Il existe des versions disponibles pour Linux, Windows et Mac Os X. La méthode d’installation différera suivant votre système d’exploitation. Celle-ci est très bien documentée sur le site de l’éditeur. Nous découvrirons ici l’installation sur une plateforme Windows :
- Etape 1 : Téléchargement du binaire de Terraform au format zip
- Etape 2 : Dézipper le fichier télécharger afin de trouver à l’intérieur un seul fichier nommé Terraform.exe
- Etape 3 : Copier le fichier dans le répertoire c:\windows\system32 afin qu’il soit accessible à partir de l’ensemble des dossiers de votre ordinateur via la variable d’environnement PATH
Optionnel : vous pouvez copier l’exécutable dans n’importe quel dossier de votre ordinateur. Dans ce cas de figure, vous devrez simplement ajouter le chemin (répertoire complet) dans vos variables d’environnement.
That’s it. Une installation d’une simplicité enfantine.
- Premiers pas avec les commandes de Terraform
Dans cette partie, je vous propose de vous accompagner dans vos premiers pas avec Terraform. Je considère que Terraform est installé sur votre machine et qu’il est accessible via le path. Vous allez alors créer votre répertoire contenant votre premier fichier TF.
Initialisation
Pour initialiser votre projet, c’est-à-dire récupérer le ou les providers de votre projet, vous devez saisir dans un terminal d’invite de commande :
terraform init
Terraform lira l’ensemble de vos fichiers tf pour les interpréter. Il téléchargera alors votre provider et le copiera dans le répertoire dédié.
Création du plan d’exécution
Terraform actualisera par défaut l’état de votre infrastructure en déterminant toutes les actions à mener pour être conforme à votre fichier de configuration. Cette commande est pratique pour vérifier si votre plan d’exécution correspond à vos attentes. Cette commande ne modifie pas votre plateforme mais identifiera les actions qui seront effectuées :
terraform plan
Je vous conseille de toujours utiliser cette commande avant de jouer réellement votre fichier. Cette commande est également pratique pour visualiser rapidement des changements de configuration par rapport à ce qui a été déployé initialement.
Déploiement de votre configuration
Terraform sert à déployer votre environnement informatique. Ainsi une fois votre projet créé, vous l’initialisez puis validez votre plan.
terraform apply
Cette commande va appliquer l’ensemble de vos fichiers afin de déployer votre infrastructure. C’est donc cette commande qui effectuera de véritables actions de déploiement et de configuration.
Supprimer une ressource
Bien entendu vous pouvez déprovisionnez toute ou partie de votre infrastructure. Vous utiliserez la commande destroy afin de détruire ce qui aura été déployé précédement.
Terraform destroy
Cette commande doit être utilisée avec précaution pour ne pas détruire votre production par erreur.
Pour conclure sur Terraform…
« Terraform est un outil de provisioning puissant, qui peut être utilisé pour piloter une infrastructure Cloud ou locale à l’entreprise ».
Cette technologie peut être implémentée nativement au sein des différents services de cloud provider.
En se reposant sur un langage de « programmation » les déploiements sont mieux maîtrisés et rapides. Au-delà de la technologie, ce mode de déploiement devrait être le point de départ de chaque nouveau déploiement que ce soit dans un cloud public ou dans les infrastructures sur site.
Par Ludovik Dopierala – Publié sur ITPro.fr et SMART DSI.