Sélectionner une page

Formation > Blog > Terraform > Terraform : Les bonnes pratiques en 2024

En 2024, avec l’évolution rapide des technologies cloud et des pratiques DevOps, il est crucial d’adopter les meilleures pratiques pour tirer le meilleur parti de Terraform. Voici un guide détaillé couvrant dix bonnes pratiques essentielles pour cette année.


Avant de se lancer

Vous souhaitez devenir expert en gestion des infrastructures réseau ? Notre formation Terraform de 3 jours vous permettra de maitriser l’approvisionnement en mode infra-as-code et de déployer le tout sur votre cloud préféré.

L’équipe Ambient IT


1 – Utiliser un État Distant

L’utilisation de l’état local peut convenir pour des essais ou des projets personnels, mais pour toute infrastructure partagée ou critique, il est impératif d’utiliser un état distant. Un backend distant comme AWS S3, Azure Blob Storage ou HashiCorp Terraform Cloud permet à votre équipe de collaborer sans conflits et assure la persistance et la sécurité de l’état.

Par exemple, configurer un backend S3 avec versioning activé peut ressembler à ceci :

terraform {
  backend "s3" {
    bucket         = "my-terraform-state"
    key            = "path/to/my/key"
    region         = "us-west-2"
    dynamodb_table = "terraform-locks"
    encrypt        = true
  }
}

Cela assure que votre état est sauvegardé et versionné, facilitant la récupération en cas de problème.

2 – Structurer Votre Code

La structuration du code est cruciale pour maintenir la clarté et faciliter la collaboration. Divisez votre code en modules réutilisables basés sur la fonctionnalité afin d’encapsuler des composants logiques d’infrastructure. Une structure de fichiers propre améliore également la lisibilité et simplifie les mises à jour futures.

Exemple de structure :

.
├── main.tf
├── variables.tf
├── outputs.tf
└── modules/
    ├── vpc/
    │   └── main.tf
    ├── ec2/
    │   ├── main.tf
    │   └── variables.tf
    └── rds/
        └── main.tf

Cela permet de réutiliser facilement les modules dans différents projets et environnements.

3 – Utiliser des Modules Partagés et Communautaires

Le registre Terraform regorge de modules créés par la communauté qui peuvent répondre à vos besoins sans avoir à créer des modules à partir de zéro. Cela non seulement vous fait gagner du temps mais vous permet également de bénéficier des meilleures pratiques intégrées par d’autres praticiens.

Par exemple, pour créer un VPC, vous pouvez utiliser un module comme celui-ci :

module "vpc" {
  source = "terraform-aws-modules/vpc/aws"
  version = "3.0.0"

  name = var.vpc_name
  cidr = var.vpc_cidr_block

  azs             = ["us-west-1a", "us-west-1b", "us-west-1c"]
  private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  public_subnets  = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]

  enable_nat_gateway = true
}

Cela réduit le risque d’erreurs et améliore la sécurité grâce à l’utilisation de solutions éprouvées.

4 – Éviter le Codage en Dur des Variables

Le codage en dur complique les modifications ultérieures et rend le code moins flexible et réutilisable. Utilisez des variables pour définir les valeurs dynamiques et évitez de coder directement dans vos fichiers Terraform.

Un bon exemple est d’utiliser les sources de données pour obtenir les informations nécessaires :

data "aws_ami" "latest_ubuntu" {
  most_recent = true
  owners      = ["099720109477"] # Canonical

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
  }
}

resource "aws_instance" "web" {
  ami           = data.aws_ami.latest_ubuntu.id
  instance_type = var.instance_type

  tags = {
    Name = "WebServerInstance"
  }
}

Cela permet une flexibilité accrue et facilite les mises à jour globales.

5 – Formater et Valider le Code Régulièrement

La cohérence du code est essentielle dans IaC pour assurer une maintenance à long terme efficace. Utilisez terraform fmt pour formater automatiquement votre code selon les conventions standards et terraform validate pour vérifier sa validité avant toute application.

# Formater tout le code du répertoire courant
terraform fmt -recursive

# Valider le code dans le répertoire courant
terraform validate

Ces étapes permettent d’améliorer la lisibilité et d’éviter les erreurs au moment de l’application.

6 – Adopter une Convention de Nommage Cohérente

Une convention de nommage claire aide à rendre votre code plus compréhensible et maintenable par différents membres de l’équipe ou même par vous-même après quelques mois.

Exemples :

  • Utilisez des underscores (_) comme séparateurs.
  • Privilégiez les lettres minuscules.
  • Utilisez des noms descriptifs pour les variables et sorties.
  • Pour les listes ou cartes, utilisez des noms pluriels.

resource "aws_s3_bucket" "my_bucket" {
  bucket = "${var.env_name}-my-app-bucket"
}

Une convention cohérente facilite également l’automatisation et l’intégration continue.

7 – Gérer les Secrets avec Précaution

Les secrets doivent toujours être manipulés avec soin pour éviter toute fuite accidentelle qui pourrait compromettre la sécurité de votre infrastructure.

Par exemple, utilisez HashiCorp Vault ou AWS Secrets Manager pour gérer vos secrets :

provider "vault" {
  address = "https://vault.example.com"
}

data "vault_generic_secret" "example" {
  path = "secret/data/myapp/config"
}

resource "aws_db_instance" "example" {
  identifier              = var.db_identifier
  allocated_storage       = var.db_allocated_storage
  engine                  = var.db_engine
  engine_version          = var.db_engine_version
  instance_class          = var.db_instance_class
  username                = data.vault_generic_secret.example.data["username"]
  password                = data.vault_generic_secret.example.data["password"]
}


Cela garantit que vos secrets sont stockés en toute sécurité et accessibles uniquement par ceux qui en ont besoin.

8 – Tester Votre Code Terraform

Les tests automatisés sont essentiels pour garantir que votre infrastructure se déploie comme prévu sans surprise désagréable en production.

Utilisez terraform plan régulièrement pour vérifier que vos changements auront l’effet souhaité avant leur application réelle:

# Générer un plan d'exécution sans appliquer les changements 
terraform plan -out=tfplan.out

# Appliquer le plan généré précédemment 
terraform apply tfplan.out


En outre, intégrez des outils comme Terratest pour effectuer des tests unitaires plus approfondis:

package test

import (
	"testing"

	"github.com/gruntwork-io/terratest/modules/terraform"
)

// Test the Terraform module in examples folder 
func TestTerraformExample(t *testing.T) {
	opts := &terraform.Options{
		TerraformDir: "../examples",

		Vars: map[string]interface{}{
			"instance_type": "t2.micro",
		},
	}

	defer terraform.Destroy(t, opts)

	terraform.InitAndApply(t, opts)
}


Cela permet de détecter les problèmes potentiels avant qu’ils n’affectent votre environnement en production.

9 – Utiliser des Boucles et Conditionnels

Pour éviter la répétition dans votre code et améliorer sa flexibilité, utilisez count, for_each, et d’autres constructeurs conditionnels offerts par Terraform.

Voici un exemple avec for_each :

variable "subnets" {
  type    = map(string)
}

resource "aws_subnet" "example" {
  for_each            = var.subnets
  vpc_id              = aws_vpc.main.id
  cidr_block          = each.value.cidr_block

  tags                = merge({
                            Name     = each.key,
                          }, local.common_tags)
}

Cet exemple montre comment créer plusieurs sous-réseaux basés sur une carte (map) donnée, ce qui réduit la duplication du code.

Conclusion

L’adoption de ces bonnes pratiques peut transformer votre expérience avec Terraform en rendant la gestion de votre infrastructure plus efficace, sécurisée et évolutive.

En structurant soigneusement votre code, en utilisant des outils communautaires éprouvés, en évitant le codage en dur des variables, en formatant et validant régulièrement votre code, en adoptant une convention de nommage cohérente, en gérant correctement les secrets, en testant rigoureusement votre infrastructure avant déploiement réel, vous serez mieux préparé à gérer une infrastructure robuste en cette année dynamique qu’est 2024.

N’hésitez pas à partager vos astuces personnelles ainsi que vos expériences avec Terraform afin que nous puissions tous apprendre ensemble et repousser toujours plus loin les limites de ce qui est possible avec cet outil puissant !

UNE QUESTION ? UN PROJET ? UN AUDIT DE CODE / D'INFRASTRUCTURE ?

Pour vos besoins d’expertise que vous ne trouvez nulle part ailleurs, n’hésitez pas à nous contacter.

ILS SE SONT FORMÉS CHEZ NOUS

partenaire sncf
partenaire hp
partenaire allianz
partenaire sfr
partenaire engie
partenaire boursorama
partenaire invivo
partenaire orange
partenaire psa
partenaire bnp
partenaire sncf
partenaire hp
partenaire allianz
partenaire sfr
partenaire engie
partenaire boursorama
partenaire invivo
partenaire orange
partenaire psa
partenaire bnp