Test du code Terraform

Terraform permet la définition, l’aperçu et le déploiement d’une infrastructure cloud. Terraform vous permet de créer des fichiers de configuration à l’aide de la syntaxe HCL. La syntaxe HCL vous permet de spécifier un fournisseur de services cloud, tel qu’Azure, et les éléments qui composent votre infrastructure cloud. Après avoir créé vos fichiers de configuration, vous créez un plan d’exécution qui vous permet d’afficher un aperçu de vos modifications d’infrastructure avant leur déploiement. Une fois que vous avez vérifié les modifications, vous appliquez le plan d’exécution pour déployer l’infrastructure.

Terraform est un outil IaC (Infrastructure as Code). Cette catégorie d’outil fait référence au fait que vous traitez vos fichiers Terraform comme vous le feriez avec le code source du projet. Une partie de ce processus comprend le contrôle de version et le contrôle de code source. En outre, les tests doivent également faire partie de votre processus. Cet article donne une vue d’ensemble des différents types de tests qui peuvent être exécutés sur un projet Terraform.

Implémenter des tests d’intégration

Les tests d’intégration vérifient qu’une modification de code récemment introduite ne casse pas le code existant. Dans DevOps, l’intégration continue (CI) fait référence à un processus qui génère l’ensemble du système chaque fois que la base de code est modifiée, par exemple lorsqu’une personne souhaite fusionner une demande de tirage (pull request) en référentiel Git. La liste suivante contient des exemples courants de tests d’intégration :

  • Les outils d’analyse statique du code tels que lint et format.
  • Exécutez terraform validate pour vérifier la syntaxe du fichier config.
  • Exécutez terraform plan pour vous assurer que la configuration fonctionnera comme prévu.

Implémenter des tests unitaires

Les tests unitaires garantissent qu’une partie ou une fonction spécifique d’un programme se comporte correctement. Les tests unitaires sont écrits par le développeur de la fonctionnalité. Parfois appelé développement piloté par les tests, ou TDD, ce type de test implique des cycles de développement courts et continus. Dans le contexte des projets Terraform, les tests unitaires peuvent recourir à l’utilisation de terraform plan pour s’assurer que les valeurs réelles disponibles dans le plan généré sont égales aux valeurs attendues.

Les tests unitaires peuvent être particulièrement utiles lorsque vos modules Terraform commencent à devenir plus complexes :

  • Générer des blocs dynamiques
  • Utiliser des boucles
  • Calculer des variables locales

Comme pour les tests d’intégration, les tests unitaires sont souvent inclus dans le processus d’intégration continue.

Implémenter des tests de conformité

Les tests de conformité sont utilisés pour s’assurer que la configuration respecte les stratégies que vous avez définies pour le projet. Par exemple, vous pouvez définir des conventions d’affectation de noms géopolitiques pour vos ressources Azure. Vous pouvez également être amené à créer des machines virtuelles à partir d’un sous-ensemble défini d’images. Les tests de conformité seraient utilisés pour faire respecter ces règles.

Les tests de conformité sont également généralement définis dans le cadre du processus d’intégration continue.

Implémenter des tests de bout en bout (E2E, End-To-End)

Les tests E2E permettent de valider le fonctionnement d’un programme avant son déploiement en production. Un exemple de scénario pourrait être un module Terraform déployant deux machines virtuelles dans un réseau virtuel. Vous voudrez peut-être empêcher les deux machines d’effectuer des tests ping l’une sur l’autre. Dans cet exemple, vous pouvez définir un test pour vérifier le résultat prévu avant le déploiement.

Un test E2E est généralement un processus en trois étapes. Tout d’abord, la configuration est appliquée à un environnement de test. Le code est ensuite exécuté pour vérifier les résultats. Enfin, l’environnement de test est réinitialisé ou arrêté (par exemple, la désallocation d’une machine virtuelle).