Note :
- Ce tutoriel nécessite l'accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, voir Introduction à l' niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeurs pour les données d'identification, la location et les compartiments Oracle Cloud Infrastructure. À la fin de votre laboratoire, remplacez ces valeurs par celles propres à votre environnement en nuage.
Créer un pipeline de validation Terraform à l'aide du cadre de test Terraform et d'Oracle Cloud Infrastructure DevOps
Présentation
Les organisations utilisent fréquemment les modules Terraform pour gérer le provisionnement complexe des ressources et offrent aux développeurs une interface simple pour entrer les paramètres nécessaires au déploiement de l'infrastructure souhaitée. Les modules facilitent la réutilisation de code et fournissent aux organisations un moyen de normaliser le déploiement de charges de travail communes, telles qu'une application Web à trois niveaux, un environnement de réseau en nuage ou un pipeline d'analyse de données. Lors du développement de modules Terraform, les auteurs commencent généralement par des tests manuels. Cela implique l'utilisation de commandes telles que la validation terraform pour la validation de la syntaxe, le plan terraform pour prévisualiser le plan d'exécution et l'application terraform, puis l'inspection manuelle des configurations de ressources dans la console Oracle Cloud Infrastructure (OCI). Les tests manuels, cependant, sont sujets à des erreurs humaines, ne sont pas évolutifs et peuvent entraîner des problèmes inattendus. Étant donné que les modules sont utilisés par plusieurs équipes au sein d'une organisation, il est essentiel de tester minutieusement toutes les modifications avant leur publication.
Le test Terraform est un nouveau cadre de test conçu pour que les auteurs de module effectuent des tests d'unité et d'intégration pour les modules Terraform. Il permet la création d'une infrastructure telle que définie dans le module, effectue des contrôles de validation sur l'infrastructure et détruit les ressources de test, que les tests réussissent ou échouent. En outre, le test Terraform fournit des avertissements si des ressources ne peuvent pas être détruites. En utilisant la même syntaxe HCL (Configuration Language) HashiCorp que les modules Terraform, les auteurs n'ont pas besoin d'apprendre d'autres outils ou langages de programmation.
Chaque test Terraform se trouve dans un fichier de test. Terraform détecte les fichiers de test en fonction de leur extension de fichier : .tftest.hcl
ou .tftest.json
. Chaque fichier de test est composé d'attributs et de blocs de niveau racine comme suit :
- Un ou plusieurs blocs
run
. - Un ou zéro bloc
variables
. - Zéro à plusieurs blocs
provider
.
Terraform exécute les blocs run
de manière séquentielle, en imitant une séquence de commandes Terraform en cours d'exécution dans le répertoire de configuration. La séquence dans laquelle les blocs variables
et provider
sont organisés n'a pas d'importance, car Terraform évalue toutes les valeurs de ces blocs au début du processus de test. Pour plus de clarté, il est conseillé de placer vos blocs variables
et provider
au début du fichier de test.
Objectifs
- Démonstration de la validation des modules Terraform et de l'automatisation du processus à l'aide d'un pipeline d'intégration et de déploiement continus (CI/CD).
Préalables
- Installez et configurez Terraform v1.6.0 et versions ultérieures. Pour plus d'informations, voir Installer Terraform.
Tâche 1 : Écrire un test Terraform pour valider la création de ressources
-
Nous avons traité de la structure fondamentale d'un fichier de test Terraform. Laissez-nous écrire quelques tests de base pour vérifier la fonctionnalité de la configuration Terraform suivante. La configuration Terraform suivante créera un seau de stockage d'objets OCI de niveau Standard.
#main.tf resource "oci_objectstorage_bucket" "test_bucket" { compartment_id = var.compartment_id name = var.bucket_name namespace = var.bucket_namespace storage_tier = var.bucket_storage_tier versioning = var.bucket_versioning }
-
Créez le fichier
var.tf
avec les variables requises.variable compartment_id { default = "<compartment-ocid>" } variable region { default = "<region>" } variable bucket_name { default = "<bucket-name>"} variable bucket_namespace { default = "<object-storage-namespace>"} variable bucket_access_type { default = "ObjectRead"} variable bucket_storage_tier { default = "Standard"} variable bucket_versioning {default = "Enabled"}
-
Configurez le fournisseur Terraform pour OCI avec l'autorisation du principal de ressource, permet au fournisseur d'effectuer des appels d'API sans avoir à fournir des données d'identification dans la définition du fournisseur. Pour configurer l'autorisation du principal de ressource pour le fournisseur OCI, voir Autorisation du principal de ressource.
-
Créez un fichier de test Terraform dans le répertoire
tests
. Voici un exemple de structure de répertoires :├── main.tf └── tests └── test.tftest.hcl
-
Mettez à jour le fichier
test.tftest.hcl
, qui vérifie si le niveau du seau créé est Standard ou non.# test.tftest.hcl run "valid_bucket_tier" { command = plan assert { condition = oci_objectstorage_bucket.test_bucket.storage_tier == "Standard" error_message = "bucket tier is not standard" } }
Note : Si le niveau de stockage du seau n'est pas standard, le test échouera.
-
Poussez les fichiers terraform ci-dessus vers le référentiel de code OCI. Nous utiliserons ce référentiel de code avec notre pipeline d'intégration et de développement en continu.
Tâche 2 : Créer un pipeline de compilation OCI DevOps pour valider la configuration Terraform
Dans le fichier build_spec.yaml
, les commandes terraform init
et terraform validate
sont utilisées pour initialiser Terraform et vérifier que la configuration est valide. Ensuite, la commande de test terraform exécute les tests configurés. Si des tests terraform échouent, le pipeline échoue également.
version: 0.1
component: build
timeoutInSeconds: 10000
shell: bash
failImmediatelyOnError: true
steps:
- type: Command
name: "Initialize Terraform"
command: |
terraform init
terraform validate
- type: Command
name: "Test Terraform"
command: |
terraform test
Étapes suivantes
Nous avons effectué un test d'assertion simple dans notre configuration Terraform. Vous pouvez effectuer différents types de tests tels que les tests d'intégration, les tests unitaires, les tests de bout en bout, etc. Pour plus d'informations, voir Tests Terraform.
Ce pipeline de validation Terraform peut être intégré au pipeline d'intégration et de développement en continu d'application. Le pipeline de validation Terraform extraira les artefacts des étapes précédentes et testera la configuration avant de mettre en oeuvre les modifications.
Liens connexes
Confirmation
- Auteur - Nikhil Khandelwal (architecte en nuage d'entreprise)
Autres ressources d'apprentissage
Explorez d'autres laboratoires sur la page docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal YouTube d'Oracle Learning. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.
Build a Terraform Validation Pipeline using Terraform Test Framework and Oracle Cloud Infrastructure DevOps
F99872-01
June 2024