Installation et configuration
Terraform ne nécessite qu'un binaire unique sur le poste de travail ou le serveur CI. L'installation est simple, mais la gestion des versions mérite attention : les providers et les modules Terraform sont versionnés et une incompatibilité de version peut bloquer un plan.
Installation
# Debian/Ubuntu — dépôt HashiCorp
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
# Vérifier
terraform versionPour gérer plusieurs versions de Terraform (recommandé en équipe), utiliser tfenv :
git clone https://github.com/tfutils/tfenv.git ~/.tfenv
echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
tfenv install 1.7.0
tfenv use 1.7.0
terraform versionStructure d'un projet Terraform
mon-projet/
├── main.tf # ressources principales
├── variables.tf # déclaration des variables d'entrée
├── outputs.tf # valeurs exposées en sortie
├── providers.tf # configuration des providers
├── versions.tf # contraintes de versions
├── terraform.tfvars # valeurs des variables (hors git si secrets)
└── .terraform.lock.hcl # lockfile des providers (à versionner)versions.tf : contraintes de versions
terraform {
required_version = ">= 1.6.0, < 2.0.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
proxmox = {
source = "bpg/proxmox"
version = ">= 0.50.0"
}
}
}Le fichier .terraform.lock.hcl est généré par terraform init et fixe les versions exactes des providers téléchargés. Il doit être versionné dans Git pour garantir la reproductibilité entre les membres de l'équipe.
providers.tf : configuration du provider
provider "aws" {
region = var.aws_region
default_tags {
tags = {
ManagedBy = "terraform"
Environment = var.environment
}
}
}
provider "proxmox" {
endpoint = var.proxmox_url
username = var.proxmox_user
password = var.proxmox_password
insecure = false
}Variables et tfvars
# variables.tf
variable "aws_region" {
type = string
description = "Région AWS cible"
default = "eu-west-1"
}
variable "environment" {
type = string
description = "Environnement (prod, staging, dev)"
validation {
condition = contains(["prod", "staging", "dev"], var.environment)
error_message = "L'environnement doit être prod, staging ou dev."
}
}# terraform.tfvars
aws_region = "eu-west-1"
environment = "prod"# Utiliser un fichier tfvars alternatif
terraform plan -var-file="prod.tfvars"
# Passer une variable en ligne de commande
terraform plan -var="environment=staging"Autocomplétion
terraform -install-autocomplete
# Recharger le shell
exec $SHELL