Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Terraform active la définition, la préversion et le déploiement de l’infrastructure cloud. À l’aide de Terraform, vous créez des fichiers de configuration à l’aide de la syntaxe HCL. La syntaxe HCL vous permet de spécifier le fournisseur de 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 des modifications de votre 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.
Les tests de bout en bout (E2E) sont utilisés pour valider le fonctionnement d’un programme avant de le déployer en production. Un exemple de scénario peut être un module Terraform déployant deux machines virtuelles dans un réseau virtuel. Vous souhaiterez peut-être empêcher les deux machines d’effectuer un test ping entre elles. Dans cet exemple, vous pouvez définir un test pour vérifier le résultat prévu avant le déploiement.
Les tests E2E sont généralement un processus en trois étapes.
- Une configuration est appliquée à un environnement de test.
- Le code est exécuté pour vérifier les résultats.
- L’environnement de test est réinitialisé ou supprimé (par exemple, l’allocation d’une machine virtuelle).
Dans cet article, vous allez apprendre à :
- Comprendre les principes de base des tests de bout en bout avec Terratest
- Découvrez comment écrire un test de bout en bout à l’aide de Golang
- Découvrez comment utiliser Azure DevOps pour déclencher automatiquement des tests de bout en bout lorsque le code est validé dans votre dépôt
1. Configurer votre environnement
- Abonnement Azure : si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.
Configurez Terraform : Si ce n’est déjà fait, configurez Terraform à l’aide de l’une des options suivantes :
Langage de programmation Go : Installez Go.
Exemple de code et de ressources : À l’aide de l’outil DownGit, téléchargez à partir de GitHub le projet de test de bout en bout et décompressez-le dans un nouveau répertoire pour contenir l’exemple de code. Ce répertoire est appelé exemple de répertoire.
2. Comprendre les tests de bout en bout
Les tests de bout en bout valident qu’un système fonctionne comme un ensemble collectif. Ce type de test est effectué par opposition au test de modules spécifiques. Pour les projets Terraform, les tests de bout en bout permettent la validation de ce qui a été déployé. Ce type de test diffère de nombreux autres types qui testent des scénarios de prédéploiement. Les tests de bout en bout sont essentiels pour tester des systèmes complexes qui incluent plusieurs modules et agissent sur plusieurs ressources. Dans de tels scénarios, les tests de bout en bout sont la seule façon de déterminer si les différents modules interagissent correctement.
Cet article se concentre sur l’utilisation de Terratest pour implémenter des tests de bout en bout. Terratest fournit toutes les plomberies requises pour effectuer la tâche suivante :
- Déployer une configuration Terraform
- Vous permet d’écrire un test à l’aide du langage Go pour valider ce qui a été déployé
- Orchestrer les tests en phases
- Supprimer l’infrastructure déployée
3. Comprendre l’exemple de test
Pour cet article, nous utilisons un exemple disponible dans l’exemple de référentiel Azure/terraform.
Cet exemple définit une configuration Terraform qui déploie deux machines virtuelles Linux dans le même réseau virtuel. Une machine virtuelle nommée vm-linux-1
a une adresse IP publique. Seul le port 22 est ouvert pour autoriser les connexions SSH. Deuxième machine virtuelle : vm-linux-2
elle n’a pas d’adresse IP publique définie.
Le test valide les scénarios suivants :
- L’infrastructure est déployée correctement
- À l’aide du port 22, il est possible d’ouvrir une session SSH sur
vm-linux-1
- À l’aide de la session SSH sur
vm-linux-1
, il est possible de pinguervm-linux-2
Si vous avez téléchargé l’exemple, la configuration Terraform pour ce scénario se trouve dans le src/main.tf
fichier. Le main.tf
fichier contient tout ce qui est nécessaire pour déployer l’infrastructure Azure représentée dans la figure précédente.
Si vous ne connaissez pas la création d’une machine virtuelle, consultez Créer une machine virtuelle Linux avec une infrastructure dans Azure à l’aide de Terraform.
Avertissement
L’exemple de scénario présenté dans cet article est uniquement à des fins d’illustration. Nous avons gardé les choses simples pour nous concentrer sur les étapes d’un test de bout en bout. Nous vous déconseillons d’avoir des machines virtuelles de production qui exposent des ports SSH via une adresse IP publique.
4. Examiner l’exemple de test
Le test de bout en bout est écrit dans le langage Go et utilise l’infrastructure Terratest. Si vous avez téléchargé l’exemple, le test est défini dans le src/test/end2end_test.go
fichier.
Le code source suivant montre la structure standard d’un test Golang à l’aide de Terratest :
package test
import (
"testing"
"github.com/gruntwork-io/terratest/modules/terraform"
test_structure "github.com/gruntwork-io/terratest/modules/test-structure"
)
func TestEndToEndDeploymentScenario(t *testing.T) {
t.Parallel()
fixtureFolder := "../"
// Use Terratest to deploy the infrastructure
test_structure.RunTestStage(t, "setup", func() {
terraformOptions := &terraform.Options{
// Indicate the directory that contains the Terraform configuration to deploy
TerraformDir: fixtureFolder,
}
// Save options for later test stages
test_structure.SaveTerraformOptions(t, fixtureFolder, terraformOptions)
// Triggers the terraform init and terraform apply command
terraform.InitAndApply(t, terraformOptions)
})
test_structure.RunTestStage(t, "validate", func() {
// run validation checks here
terraformOptions := test_structure.LoadTerraformOptions(t, fixtureFolder)
publicIpAddress := terraform.Output(t, terraformOptions, "public_ip_address")
})
// When the test is completed, teardown the infrastructure by calling terraform destroy
test_structure.RunTestStage(t, "teardown", func() {
terraformOptions := test_structure.LoadTerraformOptions(t, fixtureFolder)
terraform.Destroy(t, terraformOptions)
})
}
Comme vous pouvez le voir dans l’extrait de code précédent, le test est composé par trois étapes :
- installation : exécute Terraform pour déployer la configuration
- validate : effectue les vérifications et assertions
- Démontage : démonte et nettoie l’infrastructure après l’exécution du test
La liste suivante présente certaines des fonctions clés fournies par l’infrastructure Terratest :
-
terraform. InitAndApply : active l’exécution
terraform init
etterraform apply
à partir du code Go - terraform. Sortie : récupère la valeur de la variable de sortie de déploiement.
-
terraform.Destroy : Exécute la commande
terraform destroy
à partir du code Go. - test_structure. LoadTerraformOptions : charge les options Terraform , telles que la configuration et les variables, à partir de l’état
- test_structure. SaveTerraformOptions : Enregistre les options Terraform ( telles que la configuration et les variables) à l’état
5. Exécuter l’exemple de test
Les étapes suivantes exécutent le test sur l’exemple de configuration et de déploiement.
Ouvrez une fenêtre bash/terminal.
Connectez-vous à votre compte Azure.
Pour exécuter cet exemple de test, vous avez besoin d’un nom
id_rsa
de paire de clés privée/publique SSH etid_rsa.pub
dans votre répertoire de base. Remplacez<your_user_name>
par le nom de votre répertoire de base.export TEST_SSH_KEY_PATH="~/.ssh/id_rsa"
Dans l’exemple de répertoire, accédez au répertoire
src/test
.Exécutez le test.
go test -v ./ -timeout 10m
6. Vérifier les résultats
Une fois l’exécution go test
réussie, vous voyez les résultats similaires à la sortie suivante :
--- PASS: TestEndToEndDeploymentScenario (390.99s)
PASS
ok test 391.052s
Résoudre les problèmes de Terraform sur Azure
Résoudre les problèmes courants lors de l’utilisation de Terraform sur Azure