Try   HackMD

Tutoriel Terraform

Introduction

Qu'est-ce que Terraform ?

Terraform est un outil d'Infrastructure as Code (IaC) développé par HashiCorp. Il permet aux utilisateurs de définir et de provisionner l'infrastructure des services cloud en utilisant un langage de configuration simple et déclaratif.

Pourquoi utiliser Terraform ?

  • Automatisation de l'infrastructure : Terraform automatise le déploiement et la gestion de l'infrastructure, réduisant le risque d'erreurs humaines.
  • Gestion de l'état : Terraform maintient un état de l'infrastructure, permettant des modifications et des déploiements prévisibles.
  • Support multi-cloud : Terraform peut gérer les ressources sur plusieurs plateformes cloud, offrant une grande flexibilité.
  • Infrastructure en tant que code : Les configurations sont écrites dans des fichiers qui peuvent être versionnés, réutilisés et partagés.

Installation de Terraform

## Linux & Windows wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg -- dearmor -o \ /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt update && sudo apt install terraform ## MacOS brew tap hashicorp/tap brew install hashicorp/tap/terraform

Configuration de Terraform

Pour pouvoir utiliser Terraform, il faudra plusieurs prérequis en plus de Terraform lui-même. Tout d'abord une clef SSH valide :

# Vérifier si une clef SSH est présente ls ~/.ssh/id_rsa.pub # Si ce n'est pas le cas, on la crée ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa

Pour Terraform avec Azure, il faudra également la présence d'Azure CLI sur votre système : Install AzureCLI

Pour Terraform avec AWS, il faudra également la présence d'AWS CLI sur votre système : Install AWS CLI

Démarrer avec Terraform

provider "azurerm" { features {} } resource "azurerm_resource_group" "example" { name = "example-rg" location = "France Metropolitaine" }

Les deux fichiers écrits ici sont simples. Mais ils permettent d'annoncer quel est le fournisseur que vous allez utiliser. Au-dessus : azure, en dessous aws. Par une préférence injuste, tout sera fait sur Azure.

provider "aws" { region = "eu-west-3" } resource "aws_vpc" "example" { cidr_block = "10.0.0.0/16" tags = { Name = "example-vpc" } }

terraform init

# Connexion à Azure, importance d'avoir AzureCLI az login # Initialisation du fichier et du fournisseur terraform init

Que fait terraform init ?

  • Installation des plugins : Terraform télécharge et installe les plugins nécessaires pour intéragir avec les fournisseurs spécifiés dans votre configuration (par exemple Azure ou AWS).
  • Initialisation du Backend : Si spécifié, configure le backend pour l'état de Terraform.
  • Préparation du Répertoire : Terraform prépare le répertoire de travail pour l'exécution des autres commandes Terraform.

Un message de succès indiquera que l'initialisation s'est déroulée correctement. Vous êtes maintenant prêt à planifier et appliquer vos configuations Terraform.

terraform plan

#Exécutez terraform plan dans votre répertoire de projet pour voir quels changements seront appliqués à votre infrastructure. terraform plan

Que fait terraform plan ?

  • Analyse de la configuration : Terraform analyse vos fichiers de configuration pour déterminer les ressources à créer, modifier ou détruire.
  • Affichage des changements : Terraform présente un plan d'exécution montrant ce qui sera modifié dans l'infrastructure.
  • Prévention des surprises : Cela permet de vérifier les changements avant de les appliquer, réduisant le risque d'erreurs inattendues.

Le plan affiche des ajouts (+), des changements (~) et des suppressions (-). Il est crucial de le lire attentivement pour s'assurer que les changements correspondent à vos attentes.

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create
  
Terraform will perform the following actions:

  # azurerm_resource_group.example will be created
  + resource "azurerm_resource_group" "example" {
    + id       = {known after apply}
    + location = "francemetropolitaine"
    + name     = example-rg
  }
  
Plan: 1 to add, 0 to change, 0 to destroy.

terraform apply

# Exécutez terraform apply pour appliquer les changements spécifiés dans votre plan d'exécution. terraform apply

Que fait terraform apply ?

  • Confirmation des changements : Avant d'appliquer les changements, Terraform affiche le plan et demande une confirmation.
  • Modification de l'infrastructure : Si confirmé, Terraform applique les changements à l'infrastructure conformément à votre configuration.
  • Mise à jour de l'état : Après l'application des changements, Terraform met à jour le fichier d'état pour refléter l'état actuel de l'infrastructure.

L'état de Terraform est crucial pour maintenir l'alignement entre votre configuration et l'infrastructure réelle. Après chaque application, Terraform met à jour son fichier d'état.

terraform destroy

# Utilisez terraform destroy pour supprimer toutes les ressources gérées par votre configuration Terraform. terraform destroy

Que fait terraform destroy ?

  • Affichage des ressources à supprimer : Terraform affiche la liste des ressources qu'il prévoit de supprimer.
  • Demande de confirmation : Avant de procéder, Terraform demande une confirmation pour s'assurer que vous souhaitez supprimer ces ressources.
  • Destruction des ressources : Si confirmé, Terraform supprime8 toutes les ressources listées, nettoyant ainsi l'infrastructure.

Cette commande est utile lors de la fin d'un projet, pour les environnements de test, ou pour reconstruire entièrement une infrastructure. Il est importnant de l'utiliser avec prudence, car elle supprime toutes les ressources gérées.

Gestion de l'état

# Liste toutes les ressrouces que Terraform gère actuellement terraform state liste # Affiche l'état actuel de votre infrastructure telle que connue par Terraform terraform show