Terraform (gratuit) : maîtriser l'outil d'Infrastructure as Code

Terraform (gratuit) : maîtriser l'outil d'Infrastructure as Code

[TERRAFORM] Créé par HashiCorp, l'outil d'Infrastructure as Code open source Terraform s'intègre à AWS, Azure ou Google Cloud pour automatiser l'infrastructures IT.

Terraform : qu'est-ce que c'est ?

Terraform voit le jour en 2014. Il s’agit d’un environnement open source d'Infrastructure as Code (IaC). Edité par l'américain HashiCorp, il a pour finalité d'automatiser le provisioning et le management de n'importe quelle infrastructure cloud ou ressources IT. 

En amont, les opérations à réaliser seront codées dans un langage ad hoc propre à Terraform et baptisé HashiCorp Configuration Language (HCL). Une fois créés, les fichiers de configuration HCL seront exécutés via l'interface en lignes de commande Terraform CLI. L'ensemble des tâches spécifiées dans le fichier seront alors appliquées. Il pourra s'agit de déployer ou paramétrer des serveurs physiques (bare metal), des machines virtuelles, des containers logiciels, des clusters, ou encore des équipements réseau. Aux côtés du langage HCL, Terraform prend également en charge les fichiers de configuration au format Json.

Comment télécharger Terraform ?

Terraform est disponible à la fois pour Windows, Linux, MacOS, FreeBSD, OpenBSD et Solaris. Voici deux liens pour télécharger l'infrastructure de développement as code en version communautaire (open source) : 

Comment installer Terraform ?

Pour installer Terraform, la première chose à faire est de télécharger le package correspondant à votre système d'exploitation sur le site d'HashiCorp. Une fois l'archive zip décompressée, il suffit ensuite d'exécuter le fichier binaire nommé Terraform. Tous les autres fichiers du package pourront ensuite être supprimés en toute sécurité.

Evidemment, la procédure d'installation différera selon les OS. Sur son site, HashiCorp propose une série de tutoriels d'installation couvrant Windows, Linux et MacOS.

Pour finir, il convient de vérifiez que le binaire terraform est disponible sur le PATH. Et surtout que l'installation a bien été réalisée en ouvrant une session via l'interface en ligne de commande pour faire le point sur les sous-commandes Terraform disponibles :

$ terraform -help
Usage: terraform [-version] [-help] <command> [args]

The available commands for execution are listed below.
The most common, useful commands are shown first, followed by
less common or more advanced commands. If you're just getting
started with Terraform, stick with the common commands. For the
other commands, please read the help and docs before usage.
##...

Terraform est-il gratuit ?

Terraform est disponible sous la forme d'une édition open source, téléchargeable et utilisable sans frais. Disponible à la fois pour Windows, Linux et MacOS, elle est publiée sous Mozilla Public License (MPL) version 2. Une licence qui autorise la cohabitation du code open source avec du code propriétaire.

A partir de cette souche open source extensible, l'éditeur de l'outil d'Infrastructure as a Code, HashiCorp, a pu développer des éditions commerciales, payantes, introduisant des fonctions plus avancées. Il s'agit notamment de dispositifs de management d'équipes, de sécurité, de mise en conformité ou encore d'infrastructure en self-service. Elles s'accompagnent évidemment de prestations de support.

Ces éditions commerciales se déclinent sous la forme d'une distribution de Terraform dite Enterprise installable sur site et d'une offre en mode cloud, baptisée Terraform Cloud, proposant trois niveaux d'abonnement (voir le tableau comparatif ci-dessous).

Comparatif des offres de Terraform
 
Terraform
Open Source 
Terraform
Cloud
Terraform
sur site
 
 
Terraform Free Terraform Team & Governance Terraform Business Terraform Enterprise
Tarif Gratuit Gratuit jusqu'à 5 utilisateurs A partir de 20 $ / utilisateur / mois Prix sur demande Prix sur demande
Infrastructure as code
Infrastructure as code collaborative  
Management d'équipe et policies (as code)    
Sécurité, conformité, gouvernance avancées
 
   
Infrastructure self-service
 
   
Performance (exécution concurrente)   1 Jusqu'à 2 Personnalisé Personnalisé
Open source  
Bronze
 
 
Silver
 
   
Gold      

Qu'est-ce qu'un provider Terraform ?

Terraform permet de manager des infrastructures IT où qu’elles se trouvent. © Terraform.io

Au sein de Terraform, un provider (ou fournisseur) est là pour manager une ressource IT donnée. La plupart des Terraform Providers ciblent des plateformes d'infrastructure publiques ou installées sur site et interopèrent avec elles via les API de ces dernières. HashiCorp revendique plus de 200 providers, tous référencés dans le Terraform Registry

Les principaux providers Terraform concernent Amazon Web Services (AWS), Google Cloud Platform (GCP) ou Microsoft Azure. En France, les IaaS d'OVHCloud, de Scaleway, d'Orange Business Services et de 3DS Outscale sont également intégrés à l'outil d'infrastructure as code sous forme de providers.

Les scripts Terraform varient selon les providers. Un fichier Terraform qui aura été conçu pour manager des services d'AWS ne pourra pas être réutilisé pour Google Cloud ou OpenStack.

Un plugin Terraform, c'est quoi ?

Terraform s'adosse à une architecture extensible sous forme de plugins. Chaque provider pris en charge par l'outil d'infrastructure as code fait l'objet d'un plugin. Baptisés Plugins Provider, il existe donc autant de plugins que de providers, soit 200.

Evidemment, AWS, Azure et GCP ont leur plugin. Mais il en existe aussi pour piloter des bases de données (MySQL, PostGreSQL, influxdb), des technologies hyper-convergées (Nutanix) ou encore des outils et autres briques de développement les plus diverses (GitHub, Docker, Rancher, Bitbucket, Chef, Vault).

Il est possible de développer son propre plugin en vue de prendre en charge d'autres types d'infrastructure et applications. Une documentation sur la création d'extensions Terraform est disponible sur le site du projet. 

Comment utiliser Terraform sur AWS ?

Après avoir créé un compte sur AWS et récupéré ses clés d'accès via le service Amazon IAM (pour Identity Access Management), il suffit ensuite d'écrire un code d'instruction dans un fichier Terraform, en terminaison .tf. Dans cet exemple, l'objectifs est de créer une instance EC2 (m5ad.large) sur la région cloud d'Amazon située dans la région de Paris :

provider "aws" {
    region = "eu-west-3"
    access_key = "clés-dacces"
    secret_key = "clés-secrète"
}

resource "aws_instance" "mon_instance_ec2" {
    ami = "identifiant_AMI_Linux"
    instance_type = "m5ad.large"
}

Ensuite, il ne restera plus qu'à exécuter la commande suivante pour exécuter le fichier et créer l'instance m5ad.large au sein des data centers d'Amazon situés en région parisienne : 

terraform init

Comment utiliser Terraform sur Azure ?

Pour utiliser Terraform sur Azure, même logique que pour AWS. Après avoir créé un compte sur le cloud de Microsoft, un fichier Terraform, en terminaison .tf, doit être codé en spécifiant le fournisseur et les tâches à accomplir. Dans le cas d'Azure, il faudra utiliser le terme azurerm dans le bloc provider

Le fichier suivant permet de déployer une instance D3 v2 sur la région cloud d'Azure située à Amsterdam (cette région est spécifiée par l'acronyme WE pour Western Europe) :

provider "azurerm" {
  version = "~>2.0"
  features {}
}

resource "azurerm_resource_group" "variable" {
  name = "D3v2"
  location = "WE"
}

# Your Terraform code goes here...

Comme pour AWS, il  suffit ensuite d'exécuter la commande suivante pour exécuter le fichier et créer l'instance D3 v2 sur la région parisienne néerlandaise : 

terraform init

Comment utiliser Terraform avec Kubernetes ?

Un plugin provider Terraform spécialement taillé pour Kubernetes permet de manipuler les différents types d'objets de l'orchestrateur open source du même nom : namespace, configMap, secrets, deployments, services, etc. De quoi piloter un cluster Kubernetes complet depuis Terraform. Une possibilité qui fait de l'outil d'HashiCorp la solution d'automatisation d'infrastructure idéale dans le cadre d'une stratégie multicloud.

Le plugin Provider Terraform est conçu pour piloter y compris des clusters basés sur des services Kubernetes managés en mode cloud tels qu'Amazon Elastic Kubernetes Service (Amazon EKS), Google Kubernetes Engine (GKE) ou encore Microsoft Azure Kubernetes Service (Microsoft AKS). 

Qu'est-ce qu'un module Terraform

Un module n'est autre qu'un code d'instruction Terraform réutilisable. Préalablement testé, il permettra par exemple de dérouler toutes les tâches nécessaires au déploiement d'une application web sur un cloud donné.

Classé dans un répertoire de projet, un module Terraform pourra renvoyer à plusieurs fichiers .tf spécifiant chacun un aspect : LICENCE (licence de distribution du module), main.tf (code principal de la configuration à mettre en place), variables.tf (variables du module), .terraform (plugins pour provisionner l'infrastructure).

Comment Terraform gère-t-il l'import d'une infrastructure existante ?

Terraform peut cartographier une infrastructure existante, puis importer celle-ci sous forme d'état inventoriant les ressources utilisées et leurs métadonnées. Des informations qu'il fédère dans un fichier terraform.tfstate.

Avant de pouvoir lancer un import, il est nécessaire de coder un bloc de configuration resource correspondant à l'infrastructure qui sera ensuite cartographiée. L'import est ensuite réalisé via la commande :

terraform import 

Il est prévu que Terraform puisse générer dans le futur un fichier de configuration complet à partir de cet import.

Les Terraform output values, c'est quoi ?

Les Output Values sont comparables aux valeurs retour d'un module Terraform. Elles peuvent avoir plusieurs objectifs. Un module root peut les utiliser pour récupérer les valeurs de sortie (CLI) après l'exécution de la commande terraform apply. Un module enfant peut aussi y recourir pour exposer un sous-ensemble de ses attributs de ressource à un module parent.

Terraform dispose-t-il d'un plugin pour GitHub ?

Il existe bel et bien un plugin provider Terraform pour GitHub. Il permet d'utiliser l'outil d'Infrastructure as Code pour interagir avec des ressources et codes hébergés sur GitHub. Il automatise jusqu'à la gestion de membres et d'équipes sur le réseau social de développeurs.

Evidemment, le plugin en question doit être configuré avec les informations d'identification des comptes GitHub de l'entreprise avant de pouvoir être utilisé.

Existe-t-il une certification Terraform ?

L'éditeur de Terraform, Hashicorp, propose une certification pour l'outil d'Infrastructure as Code du même nom, baptisée HashiCorp Infrastructure Automation Certification. A destination des ingénieurs cloud, elle vise à valider la maitrise de Terraform via un examen, principalement composé de questions à choix multiples. Tarifée 70,5 dollars, elle recouvre les principaux composants de la solution : l'interface en lignes de commande, les modules, le workflow, les états, le management de configurations, etc.  

Hashicorp propose deux guides pour préparer la certification. TitréStudy Guide, le premier est destiné aux débutants. Quant au second (l'Exam Review), il s'adresse aux ingénieurs cloud avec une première expérience de Terraform. Enfin, l'éditeur publie sur son site une série d'exemples de questions posées lors de l'examen.

Il existe également des formations en français pour se préparer à la certification. C'est le cas notamment du programme Terraform : Passez la certification Hashicorp Associate. D'une durée de 4 heures, il est proposé Willy Tafen, un ingénieur cloud et DevOps.

Terraform vs Ansible

Terraform offre de nombreuses possibilités d’intégration, ainsi que des fonctions d’importations et de stockage pour des infrastructures déjà créées. Le fait qu’il s'intègre également à plusieurs solutions de cloud computing et puisse élaborer des graphiques de dépendance le démarque d’Ansible qui, lui, s’attache surtout au déploiement de logiciels multi-nœuds et à la gestion de configurations. 

Terraform : tutoriels et liens

Sur son site web, l'éditeur de Terraform, Hashicorp, propose une documentation très complète avec des séries de tutoriels clés pour prendre en main l'outil d'Infrastucture as Code open source :