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 officiel | https://github.com/terraform-linters/tflint |
| Repository | https://github.com/terraform-linters/tflint |
| Licence | MPL 2.0 |
| Développeur | terraform-linters |
| Langage | Go |
| Plugins | AWS, 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.hclpour 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
- Documentation : https://github.com/terraform-linters/tflint/blob/master/docs/
- GitHub : https://github.com/terraform-linters/tflint
- Plugins officiels : https://github.com/terraform-linters
- GitHub Action : https://github.com/terraform-linters/setup-tflint