10 outils qu'il vous faut dans votre écosystème Terraform (et des bonus)

Rédigé par Didier NANDIEGOU le 5/06/2023
Temps de lecture: 6 minutes

Introduction

Terraform est désormais un élément essentiel de la boite à outils DevOps, voire un standard en termes de gestion d’infrastructure as code. Si nous pouvons apprécier les nombreuses fonctionnalités qui permettent de déployer de l’infrastructure, le besoin d’outils complémentaires se fait sentir pour, par exemple, estimer le coût de l’infrastructure à déployer, effectuer un pré-audit de sécurité ou encore générer de la documentation.

Voici 10 outils qui vous seront sûrement très utiles dans votre aventure Terraform !

1. Terragrunt

L’objectif de cet outil est d’avoir un code DRY (Don’t Repeat Yourself) c’est à dire qu’aucune partie du code ne devrait être répétée. Il va permettre de réutiliser tout ou partie du code au lieu de le répéter dans différents projets.

Terragrunt code DRY
Terragrunt code DRY

2.Tfswitch et tfenv

Ce sont des outils en ligne de commandes assez similaires qui permettent de changer de version de Terraform. Lorsque nous gérons plusieurs projets (parfois de plusieurs clients), ce type d’outil devient indispensable.

tfswitch gif
tfswitch

3. Terratest

Terratest est une bibliothèque Go qui facilite l’écriture de tests automatisés pour le code d’infrastructure. Il fonctionne avec les APIs AWS, GCP, Azure, Kubernetes et Docker, en plus de permettre d’exécuter des commandes Shell et des requêtes HTTP. Son utilisation consiste à provisionner une infrastructure éphémère qui sera soumise ensuite aux tests que vous avez définis avant d’être supprimée.

terratest
terratest en 4 étapes

4. Terraform-compliance

C’est un framework de tests axé sur la sécurité et la conformité de l’infrastructure par rapport aux bonnes pratiques et aux standards définis. Il peut être installé via le gestionnaire de paquets Python pip ou Docker et peut être intégré aux git hooks. L’outil offre la possibilité de définir des politiques de conformité qui permettront ensuite d’évaluer le Terraform plan.

Test Terraform-compliance
Test Terraform-compliance

5. pike

Un super outil pour enfin arrêter d’utiliser des comptes admin pour déployer de l’infrastructure via Terraform. Pike va calculer les permissions minimales requises pour provisionner les ressources sur le provider de votre choix (AWS, GCP, Azure). Les policies générées sont utiles pour démarrer mais, pour l’instant, il n’y a pas de conditions et les ressources sont encore en wildcard pour AWS. C’est un bon début et j’espère que les évolutions arriveront vite !

 1./pike scan -d .\terraform\
 2{
 3    "Version": "2012-10-17",
 4    "Statement": {
 5        "Effect": "Allow",
 6        "Action": [
 7            "ec2:MonitorInstances",
 8            "ec2:UnmonitorInstances",
 9            "ec2:DescribeInstances",
10            "ec2:DescribeTags",
11            "ec2:DescribeInstanceAttribute",
12            "ec2:DescribeVolumes",
13            "ec2:DescribeInstanceTypes",
14            "ec2:RunInstances",
15            "ec2:DescribeInstanceCreditSpecifications",
16            "ec2:StopInstances",
17            "ec2:StartInstances",
18            "ec2:ModifyInstanceAttribute",
19            "ec2:TerminateInstances",
20            "ec2:AuthorizeSecurityGroupIngress",
21            "ec2:AuthorizeSecurityGroupEgress",
22            "ec2:CreateSecurityGroup",
23            "ec2:DescribeSecurityGroups",
24            "ec2:DescribeAccountAttributes",
25            "ec2:DescribeNetworkInterfaces",
26            "ec2:DeleteSecurityGroup",
27            "ec2:RevokeSecurityGroupEgress"
28        ],
29        "Resource": "*"
30    }
31}

6. KICS

KICS (Keeping Infrastructure as Code Secure) est un outil Open Source développé par la société Checkmarx, un des leaders des solutions de sécurité cloud-native. Il permet de scanner les projets d’infrastructure as code afin de détecter les vulnérabilités, les problèmes de conformité et de configuration. En plus de Terraform, KICS est compatible avec les manifests Kubernetes, les Dockerfiles, AWS CloudFormation, Pulumi et les playbooks Ansible. Il fonctionne à base de règles heuristiques entièrement personnalisables et ajustables, appelées queries. Vous pouvez les modifier, les étendre et même en ajouter de nouvelles. Et cerise sur le gâteau, KICS a une fonctionnalité d’auto-remédiation qui peut corriger les erreurs de configuration automatiquement.

Auto-remédiation avec KICS
Auto-remédiation avec KICS

7. Infracost

Infracost est un des premiers outils qui nous vient en tête lorsqu’il s’agit d’estimer les coûts d’une infrastructure à déployer via Terraform. Son utilisation est simple : donner une estimation des coûts mensuels de l’infrastructure en se basant sur le résultat du Terraform plan. Cette estimation peut être juste un coût total, une estimation détaillée par service ou encore une différence entre l’existant et le nouveau déploiement. L’outil s’intègre aussi à votre SVN pour, par exemple, ajouter des commentaires contenant les estimations dans les pull requests concernées.

Infracost diff
Infracost diff

8. InfraMap

Inframap génère un graphe/schéma à partir du tfstate ou du code et utilise les icones spécifiques au cloud provider. Il est compatible avec AWS, GCP, Openstack et Azure. Les schémas peuvent être générés sous différents formats en fonction de vos besoins. Exemple :

1inframap generate --connections=false ./terraform/module-magento/ | dot -Tpng > inframapconnections.png
Schéma généré par InfraMap
Schéma généré par InfraMap

9. Terraform-docs

Comme son nom l’indique, il s’agit d’un outil qui génère une documentation sous différents formats (json, md, pretty…) à partir de modules Terraform pour, par exemple, créer un README. Il peut être utilisé en CLI, dans un conteneur Docker, dans un pipeline CI/CD ou encore en hook pre-commit. La structure du document généré peut être configurée selon vos besoin.

Exemple du block ‘Requirements’ au format markdown table généré pour un module :

Documentation générée par Terraform-docs
Documentation générée par Terraform-docs

10. pre-commit-terraform

pre-commit-terraform est en fait une collection d’outils git hooks utilisés par le framework pre-commit. Ce sont des scripts qui se basent sur différents outils et qui vont s’exécuter au moment du commit du code pour effectuer une série de vérifications et de tests. La puissance de pre-commit-terraform réside dans le fait qu’il réunit à lui tout seul plusieurs des outils déjà évoqués dans cet article, ce qui en fait un couteau suisse bien pratique. Les hooks disponibles sont infracost_breakdown, terraform_docs, terraform_fmt, terraform_providers_lock, terraform_tflint, terraform_tfsec, terraform_validate, terraform_wrapper_module_for_each, terrascan, tfupdate, terragrunt_fmt, terragrunt_validate. Exemple avec infracost_breakdown basé sur Infracost :

  • Configuration du hook
1- id: infracost_breakdown
2  args:
3    - --args=--path=./env/dev
4  verbose: true
  • Output
 1Running in "env/dev"
 2
 3Summary: {
 4"unsupportedResourceCounts": {
 5    "aws_sns_topic_subscription": 1
 6  }
 7}
 8
 9Total Monthly Cost:        86.83 USD
10Total Monthly Cost (diff): 86.83 USD

Bonus

Je rajoute deux outils que je trouve intéressants même s’ils sont encore incomplets malgré leurs potentiels.

driftctl (beta)

Encore en bêta, cet outil promet d’être capable de détecter, suivre et alerter sur les drifts d’infrastructure. Ce sont les changements apportés à l’infrastructure sans passer par Terraform (modifications via la console ou la CLI). Il y a néanmoins quelques limites dont il faut tenir compte. Pour le moment, driftclt est compatible uniquement avec les providers Terraform AWS et Github. Il ne détectera pas les drifs après un terraform apply, et ceux dans les blocs d’ingress/egress des security groups.

Détection des drifts avec driftctl
Détection des drifts avec driftctl

Pour en savoir plus sur la gestion des drifts des ressources Terraform, je vous renvoie au talk de Katia HIMEUR.

AIaC

AIaC (Artificial Intelligence Infrastructure-as-Code) est un outil en ligne de commande pour générer des templates et des configurations, via l’API d’OpenAI. La CLI permet de demander au modèle de générer des templates pour différents scénarios (par exemple un template Terraform pour une instance AWS EC2"). Le code généré peut être enregistré dans un fichier, ou simplement imprimé sur la sortie standard. Par défaut, aiac utilise le même modèle utilisé par ChatGPT, mais permet d’utiliser d’autres modèles. L’outil est encore jeune et assez basique mais très prometteur comme tous les nouveaux outils basés sur des modèles de l’intelligence artificielle.

Artificial Intelligence Infrastructure-as-Code Generator
Artificial Intelligence Infrastructure-as-Code Generator

Conclusion

Après ce tour de quelques outils intéressants pour accompagner l’utilisation de Terraform, je ne peux qu’espérer avoir piqué votre curiosité à explorer l’immense écosystème constitué autour de Terraform. De nombreux autres outils existent et sont développés tous les jours. Le plus important est, bien sûr, de trouver les outils qui conviennent à votre cas d’usage !