Introduction
Les sorties Terraform sont utilisées pour extraire des informations sur les ressources d’infrastructure à partir de l’état du projet. Grâce à d’autres fonctionnalités de la Langue de Configuration Hashicorp (HCL), que Terraform utilise, les informations sur les ressources peuvent être interrogées et transformées en structures de données plus complexes, telles que des listes et des cartes. Les sorties sont utiles pour fournir des informations à des logiciels externes, qui peuvent opérer sur les ressources d’infrastructure créées.
Dans ce tutoriel, vous apprendrez la syntaxe des sorties Terraform et ses paramètres en créant une infrastructure simple qui déploie des Droplets. Vous analyserez également les sorties de manière programmatoire en les convertissant en JSON.
Prérequis
- Un Jeton d’Accès Personnel DigitalOcean, que vous pouvez créer via le panneau de contrôle DigitalOcean. Vous pouvez trouver des instructions dans les documents du produit DigitalOcean, Comment Créer un Jeton d’Accès Personnel.
- Terraform installé sur votre machine locale et un projet configuré avec le fournisseur DigitalOcean. Terminez Step 1 et Step 2 de la Guide sur l’utilisation de Terraform avec DigitalOcean et n’oubliez pas de nommer le dossier de projet
terraform-outputs
plutôt queloadbalance
. Pendant Step 2, ne pas inclure la variablepvt_key
et le ressource d’une clé SSH. - Familiarité avec les types de données HCL et les boucles. Pour plus d’information, voir le didacticiel Comment améliorer la flexibilité en utilisant les variables, dépendances et conditionnelles de Terraform.
Note : Ce didacticiel a été spécifiquement testé avec Terraform 1.0.2
.
Définition des Sorties
Dans cette section, vous déclarerez une Droplet, l’appliquez dans le cloud et apprenez à utiliser les sorties en définissant une qui affichera l’adresse IP de la Droplet.
Depuis le dossier terraform-outputs
que vous avez créé en tant que prérequis, créez et ouvrez le fichier droplets.tf
pour l’édition :
Ajoutez le ressource de Droplet suivante et définissez une sortie :
Le projet de traduction est en cours d’exécution sur votre serveur Web. Vous déclarez une ressource de nuage appelée web
. Son nom réel dans le nuage sera test-droplet
, dans la région fra1
, avec Ubuntu 20.04.
Ensuite, vous déclarez un sortie appelée droplet_ip_address
. En Terraform, les sorties sont utilisées pour exporter et montrer des valeurs et informations sur les ressources internes et calculées. Vous définissez ici le paramètre value
, qui accepte la donnée à exporter, comme l’adresse IP du Droplet déclaré. À l’instant de la déclaration, elle est inconnue, mais elle deviendra disponible une fois que le Droplet soit déployé. Les sorties sont affichées après chaque déploiement.
Sauvegardez et fermez le fichier, puis déployez le projet en exécutant la commande suivante:
Entrez oui
lorsqu’il vous est demandé. La fin de l’output sera similaire à ceci:
L’adresse IP soulignée appartient au nouveau Droplet que vous avez déployé. Lorsque vous déployez le projet, Terraform affiche les sorties à la fin, quand toutes les attributs des ressources sont disponibles. Sans la sortie droplet_ip_address
, Terraform ne montrera pas davantage d’informations sur le Droplet, sauf que celui-ci est déployé.
Les sorties peuvent également être affichées en utilisant la commande output
:
La sortie afficherait tous les outputs
du projet:
Outputdroplet_ip_address = ip_address
Vous pouvez également interroger une sortie spécifique par son nom en l’indiquant comme argument:
Pour droplet_ip_address
, la sortie se composera uniquement de l’adresse IP:
Outputip_address
Il existe également quelques paramètres optionnels pour les sorties:
description
: intégration de courtes déclarations documentaires sur ce que la sortie montre.depends_on
: un paramètre méta disponible à chaque ressource qui permet explicitement de spécifier les ressources pour lesquelles la sortie dépend que Terraform ne peut pas déduire automatiquement pendant la planification.sensitive
: accepte une valeur booléenne, qui empêche le contenu de la sortie d’être affiché après la mise en œuvre si elle est définie commetrue
.
Le paramètre sensitive
est utile lorsque les journaux de déploiement du Terraform seront publiquement disponibles, mais les contenus de sortie doivent être gardés cachés. Vous allez maintenant l’ajouter à votre définition de ressource de Droplet.
Ouvrez droplets.tf
pour le modifier et ajoutez la ligne soulignée:
Sauvegardez et fermez le fichier lorsque vous avez terminé. Deployez le projet de nouveau en exécutant:
Entrez oui
lorsque vous êtes demandé. Vous verrez que la sortie est redactée:
Même si elle est marquée comme sensitive
, la sortie et son contenu seront toujours disponibles par d’autres canaux, tels que l’affichage du état Terraform ou la requête des sorties directement.
Dans l’étape suivante, vous créerrez un autre Droplet et une structure de sortie différente, donc détruisez les actuels en exécutant:
La sortie finale sera :
Output...
Destroy complete! Resources: 1 destroyed.
Vous avez déclaré et déployé un Droplet et créé une sortie qui montre son adresse IP. Vous apprendrez ensuite à utiliser les sorties pour montrer des structures plus complexes telles que des listes et des tables.
Génération de structures complexes
Dans cette section, vous allez déployer plusieurs instances de mises en œuvre à partir d’une même définition en utilisant la clé count
. Vous afficheront également leurs adresses IP dans différents formats.
Utilisation du boucle for
Vous devrez modifier la définition des ressources de mise en œuvre, donc ouvrir-la pour l’éditer :
Modifiez-la comme suit :
Vous avez spécifié que trois instances doivent être créées en utilisant la clé count
et ajoutez l’index courant au nom du mise en œuvre, ainsi vous pouvez les distinguer plus tard. Supprimez l’output existant ci-dessous. Quand vous êtes fini, sauvegardez et fermez le fichier.
Appliquez le code en exécutant :
Terraform va planifier la création de trois instances numérotées appelées test-droplet-0
, test-droplet-1
, et test-droplet-2
. Entrez oui
lorsque vous êtes invité à terminer le processus. Vous verrez ensuite les informations suivantes à la fin :
Output...
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
Cela signifie que toutes les instances ont été déployées avec succès et que toutes les informations sur elles sont stockées dans l’état du projet.
La façon la plus simple d’accéder aux attributs de ressource est d’utiliser des sorties, mais créer une pour chaque Droplet n’est pas une solution scalable. La solution consiste à utiliser la boucle for
pour parcourir la liste des Droplets et rassembler leurs attributs, ou à utiliser alternativement des expressions splat (qui seront expliquées plus loin dans cette étape).
Vous définirez d’abord une sortie qui affichera les adresses IP des trois Droplets, associées à leurs noms. Ouvrez droplets.tf
pour l’édition :
Ajoutez les lignes suivantes :
La valeur de sortie de droplet_ip_addresses
est construite à l’aide d’une boucle for
. Comme elle est entourée de crochets, le type de résultat sera une map. La boucle parcourt la liste des Droplets et, pour chaque instance, associe son nom à son adresse IP et l’ajoute au résultat de la map.
Enregistrez et fermez le fichier, puis appliquez le projet à nouveau :
Entrez yes
lors de l’invite et vous recevrez les contenu de la sortie à la fin :
Les détails de la sortie droplet_ip_addresses
indiquent les adresses IP des trois Droplets déployés.
En utilisant le commande Terraform output
, vous pouvez obtenir les contenu de la sortie en JSON en utilisant son argument de commande :
Le résultat sera similaire à celui-ci :
Le parsing JSON est largement utilisé et supporté dans de nombreuses langages de programmation. De cette manière, vous pouvez analyser programmatiquement les informations sur les ressources Droplet déployées.
Utilisation d’expressions rassemblantes
Les expressions rassemblantes offrent une manière concise de parcourir tous les éléments d’une liste et de collecter les contenus des attributs de chacun d’eux, aboutissant à une liste. Une expression rassemblante qui extrairerait les adresses IP des trois instances Droplet déployées aurait la syntaxe suivante :
Le symbole [*]
parcourt la liste à gauche et prend le contenu de son attribut spécifié à droite pour chaque élément. Si la référence à gauche n’est pas une liste en soi, elle sera convertie en une liste où elle sera le seul élément.
Vous pouvez ouvrir droplets.tf
pour l’édition et modifier les lignes suivantes pour implémenter cela :
Après avoir enregistré le fichier, appliquez le projet en exécutant la commande suivante :
Vous recevrez une sortie qui est maintenant une liste et qui ne contient que les adresses IP des Droplets :
Pour recevoir la sortie sous forme de JSON, exécutez la commande suivante :
La sortie sera un seul tableau :
Vous avez utilisé les sorties en même temps que les expressions rassemblantes et les boucles `for` pour exporter les adresses IP des Droplets déployés. Vous avez également reçu le contenu de la sortie sous forme de JSON et vous utiliserez maintenant `jq` – un outil pour filtrer dynamiquement le JSON selon des expressions données – pour le parser.
Parsing des sorties en utilisant jq
Dans cette étape, vous installerez et apprendrez les bases de jq
, une outil pour traiter des documents JSON. Vous utiliserez-le pour analyser les sorties de votre projet Terraform.
Si vous êtes sur Ubuntu, exédez la commande suivante pour installer jq
:
Sur macOS, vous pouvez utiliser Homebrew pour le faire installer :
jq
applique l’expression de traitement fournie sur l’entrée qui peut être canalisée dans jq
. La tâche la plus simple avec jq
est d’afficher la sortie du document JSON parsé sans modification :
Passer l’opérateur identité (.
) signifie que tout le document JSON parsé depuis l’entrée doit être sorti sans modifications :
Vous pouvez demander juste l’adresse IP deuxième en utilisant la notation des crochets pour compter à partir de zéro :
Le résultat de la transformation sera :
Vous pouvez demander que le résultat de l’opération soit un tableau en mettant l’expression entre crochets :
Vous obtiendrez un tableau de sortie JSON très présenté :
Vous pouvez récupérer des parties d’arrays plutôt que des éléments individuels en spécifiant une plage d’indexes entre crochets :
L’output sera alors :
La plage de l’index 0:2
renvoie les deux premiers éléments — la partie supérieure de la plage (2
) n’est pas incluse, donc seules les éléments à des positions 0
et 1
sont extraites.
Vous pouvez maintenant détruire les ressources déployées en exécutant :
Dans cette étape, vous avez installé jq
et utilisé pour parser et manipuler le résultat du projet Terraform qui déploie trois Droplet.
Conclusion
Vous avez appris sur les sorties de Terraform, les utilisant pour afficher des détails sur les ressources déployées et pour exporter des structures de données construites pour une manipulation ultérieure par un processus externes. Vous avez également utilisé les sorties pour montrer les attributs d’une seule ressource ainsi que pour montrer des map et listes contenant des attributs de ressources.
Pour plus d’informations sur les fonctionnalités de jq
, visitez les documents officiels.
Ce tutoriel fait partie de la série Comment Gérer l’Infrastructure avec Terraform . La série couvre de nombreux sujets sur Terraform, du premier installement de Terraform jusqu’à la gestion de projets complexes.
<|observation|>