Aller au contenu principal

TFLint

Overview

TFLint, c'est le linter Terraform qui pense que ton code doit être propre avant d'être déployé. Framework pluggable pour détecter les erreurs possibles (comme les types d'instances invalides), alerter sur les syntaxes dépréciées, et faire appliquer les bonnes pratiques pour les principaux cloud providers (AWS, Azure, GCP). Si tu veux éviter les erreurs stupides en prod, c'est parfait.

TFLint utilise une architecture de plugins pour étendre ses capacités selon tes besoins. Règles intégrées pour Terraform, plugins spécialisés par cloud provider, intégration native avec les pipelines CI/CD. Tu lint, tu corriges, tu déploies en confiance.

TFLint se distingue par son architecture pluggable (tu ajoutes ce dont tu as besoin), ses règles par provider (AWS, Azure, GCP avec règles spécifiques), et sa facilité d'intégration (CI/CD, pre-commit hooks, IDE).


Informations essentielles

PropriétéValeur
Site officielhttps://github.com/terraform-linters/tflint
Repositoryhttps://github.com/terraform-linters/tflint
LicenceMPL 2.0
Développeurterraform-linters
LangageGo
PluginsAWS, Azure, GCP, OPA, Google, OCI

Fonctionnalités principales

Linting multi-niveaux

  • Erreurs possibles : types d'instances invalides, régions inexistantes
  • Syntaxes dépréciées : alertes sur les fonctionnalités obsolètes
  • Bonnes pratiques : conventions de nommage, configuration recommandée
  • Règles custom : définition de règles spécifiques à ton organisation
  • Validation de syntax : détection des erreurs HCL avant terraform plan

Architecture pluggable

  • Plugin AWS : règles spécifiques AWS (EC2, S3, IAM, etc.)
  • Plugin Azure : validation des ressources Azure
  • Plugin GCP : règles Google Cloud Platform
  • Plugin OPA : intégration avec Open Policy Agent
  • Plugins tiers : écosystème extensible

Intégrations CI/CD

  • GitHub Actions : action officielle TFLint
  • GitLab CI : intégration native
  • Pre-commit hooks : validation avant commit
  • IDE support : VS Code, Vim, Emacs
  • Docker : image officielle pour containers

Configuration flexible

  • Fichier .tflint.hcl pour la configuration
  • Activation/désactivation sélective des règles
  • Configuration par répertoire
  • Variables d'environnement
  • Profiles de configuration

Cas d'usage

  • Validation pre-deploy : Lint avant terraform plan/apply
  • Code review : Intégration dans les processus de review
  • Standards enforcement : Application des bonnes pratiques d'équipe
  • Detection erreurs : Identification proactive des problèmes de config
  • Formation équipes : Apprentissage des bonnes pratiques Terraform

Installation

Via Homebrew (macOS/Linux)

brew install tflint

Via script d'installation

curl -s https://raw.githubusercontent.com/terraform-linters/tflint/master/install_linux.sh | bash

Via Docker

docker pull ghcr.io/terraform-linters/tflint:latest

Via GitHub Actions

- name: Setup TFLint
uses: terraform-linters/setup-tflint@v3
with:
tflint_version: v0.50.0

Utilisation basique

Configuration de base

# .tflint.hcl
plugin "terraform" {
enabled = true
preset = "recommended"
}

plugin "aws" {
enabled = true
version = "0.27.0"
source = "github.com/terraform-linters/tflint-ruleset-aws"
}

rule "terraform_deprecated_interpolation" {
enabled = true
}

rule "terraform_unused_declarations" {
enabled = true
}

Exécution basique

# Lint du répertoire courant
tflint

# Lint avec initialisation des plugins
tflint --init
tflint

# Lint avec format spécifique
tflint --format json

# Lint avec règles spécifiques
tflint --enable-rule=terraform_deprecated_interpolation

Intégration GitHub Actions

name: TFLint
on: [push, pull_request]

jobs:
tflint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- uses: terraform-linters/setup-tflint@v3
with:
tflint_version: latest

- name: Init TFLint
run: tflint --init

- name: Run TFLint
run: tflint --format compact

Configuration avancée avec AWS

# .tflint.hcl
plugin "aws" {
enabled = true
version = "0.27.0"
source = "github.com/terraform-linters/tflint-ruleset-aws"

deep_check = true
}

rule "aws_instance_invalid_type" {
enabled = true
}

rule "aws_instance_previous_type" {
enabled = true
}

Avantages

  • Détection proactive : trouve les erreurs avant terraform plan, tu gagnes du temps
  • Architecture pluggable : tu ajoutes seulement ce dont tu as besoin, pas de bloat
  • Multi-provider : AWS, Azure, GCP avec règles spécialisées, pas de compromis
  • CI/CD ready : s'intègre partout (GitHub Actions, GitLab, Jenkins), workflow transparent
  • Communauté active : plugins maintenus, nouvelles règles régulières, écosystème vivant

Limitations

  • Certaines règles nécessitent l'accès aux APIs cloud (deep checking) : mais tu peux les désactiver
  • Configuration initiale peut sembler verbieuse : mais une fois configuré, ça roule
  • Plugins tiers peuvent avoir des cycles de release différents : mais les officiels sont stables

Alternatives

  • terraform validate : Validation syntax native mais limitée
  • Checkov : Scanner de sécurité IaC plus large
  • terraform fmt : Formatting uniquement
  • Terrascan : Scanner de sécurité IaC

Ressources