Ce document fournit des consignes et des recommandations pour tester les modules et les configurations Terraform pour Google Cloud.
Le test des modules et des configurations Terraform suit parfois des modèles et des conventions différents de ceux des tests utilisés pour du code d'application. Bien que les tests de code d'application impliquent principalement de tester la logique métier des applications elles-mêmes, le test complet du code d'infrastructure nécessite le déploiement de ressources cloud réelles pour minimiser le risque de défaillances de production. Vous devez prendre en compte quelques éléments lors de l'exécution de tests Terraform :
- L'exécution d'un test Terraform crée, modifie et supprime une infrastructure réelle. Vos tests peuvent donc prendre beaucoup de temps et être coûteux.
- Vous ne pouvez pas effectuer de tests unitaires pour une architecture de bout en bout. La meilleure approche consiste à diviser votre architecture en modules et à les tester individuellement. Les avantages de cette approche sont les suivants : le développement itératif est plus rapide, car l'environnement d'exécution des tests est plus rapide, les coûts pour chaque test sont réduits et le risque d'échecs liés aux facteurs échappant à votre contrôle est également réduit.
- Évitez de réutiliser l'état si possible. Il peut arriver d'avoir à effectuer des tests avec des configurations partageant des données avec d'autres configurations. Idéalement, chaque test doit être indépendant et ne pas réutiliser l'état entre différents tests.
Utiliser d'abord des méthodes de test moins coûteuses
Vous disposez de plusieurs méthodes pour tester Terraform. Par ordre croissant de coût, de temps d'exécution et de profondeur, ces méthodes incluent les suivantes :
- Analyse statique : test de la syntaxe et de la structure de votre configuration sans déployer de ressources, à l'aide d'outils tels que les compilateurs, les fonctions linters et les simulations. Pour ce faire, utilisez
terraform validate
. - Tests d'intégration des modules : pour vous assurer que les modules fonctionnent correctement, testez-les individuellement. Les tests d'intégration des modules impliquent le déploiement du module dans un environnement de test et la vérification de la création des ressources attendues. Plusieurs frameworks de test facilitent l'écriture de tests, comme suit :
- Tests de bout en bout : en étendant l'approche des tests d'intégration à un environnement complet, vous pouvez vérifier que plusieurs modules fonctionnent correctement ensemble. Dans cette approche, déployez tous les modules qui composent l'architecture dans un environnement de test récent. Idéalement, l'environnement de test est aussi semblable que possible à votre environnement de production. Bien que plus coûteuse, cette méthode offre le plus haut niveau de confiance pour garantir que les modifications ne nuisent pas à votre environnement de production.
Procéder par étapes
Assurez-vous que vos tests se compilent les uns les autres de manière itérative. Envisagez d'abord d'exécuter des tests plus petits pour avancer progressivement vers des tests plus complexes, en adoptant une approche basée sur les échecs rapides.
Randomiser les ID de projet et les noms de ressources
Pour éviter les conflits de noms, assurez-vous que vos configurations ont un ID de projet global unique et des noms de ressources qui ne se chevauchent pas au sein de chaque projet. Pour ce faire, utilisez des espaces de noms pour vos ressources. Terraform dispose d'un fournisseur aléatoire intégré.
Utiliser un environnement distinct pour les tests
Pendant les tests, de nombreuses ressources sont créées et supprimées. Assurez-vous que l'environnement est isolé des projets de développement ou de production afin d'éviter toute suppression accidentelle lors du nettoyage des ressources. La meilleure approche consiste à demander à chaque test de créer un nouveau projet ou un nouveau dossier. Pour éviter toute erreur de configuration, envisagez de créer des comptes de service spécifiques pour chaque exécution de test.
Nettoyer toutes les ressources
Tester le code d'infrastructure signifie que vous déployez des ressources réelles. Pour éviter des frais, envisagez de mettre en œuvre une étape de nettoyage.
Pour détruire tous les objets distants gérés par une configuration spécifique, utilisez la commande terraform destroy
. Certains frameworks de test disposent d'une étape de nettoyage intégrée. Par exemple, si vous utilisez Terratest, ajoutez defer terraform.Destroy(t, terraformOptions)
à votre test. Si vous utilisez Kitchen-Terraform, supprimez votre espace de travail en utilisant terraform kitchen delete WORKSPACE_NAME
.
Après avoir exécuté la commande terraform destroy
, exécutez également des procédures de nettoyage supplémentaires pour supprimer toutes les ressources que Terraform n'a pas pu détruire. Pour ce faire, supprimez tous les projets utilisés pour exécuter le test ou utilisez un outil tel que le module project_cleanup
.
Optimiser le temps d'exécution des tests
Pour optimiser le temps d'exécution des tests, utilisez les approches suivantes :
- Exécuter des tests en parallèle. Certains frameworks de tests permettent d'exécuter simultanément plusieurs tests Terraform.
- Par exemple, avec Terratest, vous pouvez pour cela ajouter
t.Parallel()
après la définition de la fonction de test.
- Par exemple, avec Terratest, vous pouvez pour cela ajouter
- Tester par étapes. Séparez vos tests en configurations indépendantes pouvant être testées séparément. Cette approche vous évite d'avoir à passer toutes les étapes lors de test et accélère le cycle de développement itératif.
- Par exemple, dans la Kitchen-Terraform, divisez les tests en suites distinctes. Pendant l'itération, exécutez chaque suite indépendamment.
- De même, avec Terratest, encapsulez chaque étape de votre test avec
stage(t, STAGE_NAME, CORRESPONDING_TESTFUNCTION)
. Définissez des variables d'environnement indiquant les tests à exécuter. Par exemple,SKIP
STAGE_NAME="true"
- Le framework de test du plan est compatible avec l'exécution par étapes.
Étapes suivantes
- Découvrez les bonnes pratiques générales concernant le style et la structure pour Terraform sur Google Cloud.
- Découvrez les bonnes pratiques concernant l'utilisation des modules racine Terraform.