Terraform et Ansible : rappel des fondamentaux
Terraform est un outil d’Infrastructure as Code (IaC) développé par HashiCorp. Il permet de décrire, versionner et provisionner des ressources cloud (machines virtuelles, réseaux, bases de données, etc.) de manière déclarative. Il prend en charge de nombreux fournisseurs (AWS, Azure, GCP, etc.) via des providers, et permet de gérer l’infrastructure de manière reproductible.
Ansible, quant à lui, est un outil d’automatisation développé par Red Hat. Il excelle dans la configuration des systèmes : installation de paquets, configuration de services, gestion des utilisateurs, déploiement d’applications… Son approche agentless (via SSH) et sa syntaxe simple en YAML (les playbooks) en font un outil prisé pour la gestion post-provisionnement.
Les limites d’une utilisation isolée
Utiliser uniquement Terraform
Terraform est excellent pour construire l’infrastructure, mais il montre ses limites dès qu’il s’agit de configurer les systèmes ou d’installer des logiciels. Bien que des provisioners (comme remote-exec) existent pour exécuter des commandes sur les machines, ils sont souvent déconseillés car :
- Ils ne sont pas idempotents.
- Ils peuvent rendre les plans Terraform instables ou moins lisibles.
- Ils introduisent un couplage entre le provisioning et la configuration.
Exemple : déployer une instance EC2 avec Terraform, mais vouloir y installer Apache, PostgreSQL ou configurer un pare-feu n’est pas optimal avec Terraform seul.
Utiliser uniquement Ansible
Ansible, de son côté, a besoin d’un inventaire de machines existantes. Si l’on souhaite créer des serveurs cloud ou des bases de données, il faudra le faire manuellement ou avec des modules cloud, ce qui devient vite complexe à maintenir.
Autres limitations :
- L’inventaire peut être difficile à tenir à jour, surtout dans un environnement dynamique.
- La gestion d’infrastructure dans Ansible est possible, mais souvent moins robuste qu’avec Terraform (notamment pour la gestion de dépendances entre ressources, ou le « drift detection »).
Terraform + Ansible : une synergie puissante
Plutôt que de choisir entre Terraform et Ansible, la solution la plus efficace est souvent de les combiner intelligemment. Ci-dessous quelques cas concrets d’interactions utiles.

1. Génération dynamique d’inventaire Ansible par Terraform
Une fois les ressources créées avec Terraform (ex : des instances EC2, des VMs Azure, etc.), on peut utiliser les outputs Terraform pour générer dynamiquement un fichier d’inventaire Ansible.
Exemple :
output "web_ip" {
value = aws_instance.web.public_ip
}
Puis, dans un script shell :
terraform output -json > tf_outputs.json
python generate_inventory.py tf_outputs.json > inventory.ini
ansible-playbook -i inventory.ini playbook.yml
Cela permet d’automatiser l’enchaînement provisionnement → configuration.
2. Appel d’un playbook Ansible depuis Terraform
Avec le provisioner local-exec, Terraform peut déclencher un playbook Ansible une fois l’infrastructure créée :
provisioner "local-exec" {
command = "ansible-playbook -i inventory.ini playbook.yml"
}
Attention cependant à ne pas trop imbriquer les responsabilités. Une approche plus modulaire consiste à enchaîner les outils dans un pipeline (GitLab CI, Jenkins, etc.), plutôt qu’au sein du même code.
3. Partage de variables et secrets
Terraform peut exporter des variables utiles à Ansible :
- IP publiques ou privées des instances
- Chemins de clés SSH
- Ports ouverts, etc.
Ces variables peuvent être consommées par Ansible via des fichiers vars, ou passées en ligne de commande.
4. Orchestration via des outils tiers
Certains outils facilitent l’intégration entre Terraform et Ansible :
- Atlantis, Terragrunt ou des workflows GitOps qui déclenchent Terraform, puis Ansible.
- Des wrappers ou scripts maison qui organisent la séquence provisioning → configuration → déploiement.
5. Utilisation multi-cloud et hybride
Terraform excelle dans le provisioning multi-cloud (ex : AWS + Azure + On-premise). Une fois les ressources créées, Ansible prend le relais pour uniformiser la configuration applicative sur des environnements hétérogènes. Idéal pour des infrastructures hybrides.
Conclusion
Terraform et Ansible ne s’excluent pas, bien au contraire. Ils répondent à deux besoins distincts et complémentaires :
- Terraform pour décrire et créer l’infrastructure.
- Ansible pour configurer les ressources et déployer les applications.
En les combinant, on bénéficie d’un pipeline complet, automatisé de bout en bout, depuis le provisioning jusqu’au déploiement. La clé est de bien séparer les responsabilités de chaque outil, tout en assurant une transition fluide entre les deux.
Dans une démarche DevOps ou GitOps moderne, cette complémentarité est essentielle pour construire des systèmes répétables, maintenables et scalables.
Dans le monde DevOps, l’automatisation de l’infrastructure est devenue incontournable. Deux outils occupent une place de choix : Terraform, pour le provisionnement d’infrastructure, et Ansible, pour la configuration des systèmes. Bien qu’ils soient parfois perçus comme concurrents, ils sont en réalité hautement complémentaires. Cet article explore les liens entre Terraform et Ansible, leurs rôles respectifs, les limites d’une utilisation isolée, et les bonnes pratiques pour les faire collaborer efficacement.

