Qu'est-ce qu'une sortie ?
Une sortie est comparable à une valeur de retour dans un langage de programmation. Les sorties exposent les attributs de l'infrastructure après l'exécution de terraform apply. Vous pouvez ainsi les inspecter, les transmettre entre modules ou les injecter dans d'autres outils.
Cas d'utilisation courants :
Afficher les attributs des ressources — affichez les valeurs calculées (telles que l'ID ou l'adresse IP d'une instance ECS) dans le CLI après
terraform applyTransmettre des données entre ressources — extrayez un attribut d'une ressource et référencez-le dans une autre, par exemple en utilisant l'adresse IP d'un VPC dans une règle de groupe de sécurité
Partager des données entre modules — exposez les valeurs d'un module enfant afin qu'un module parent puisse y faire référence
Intégrer avec des outils externes — transmettez les valeurs de sortie à des scripts ou à des pipelines CI/CD à l'aide de
terraform output
Syntaxe des sorties
Déclarez les sorties dans un bloc output. Vous pouvez placer les blocs output n'importe où dans vos fichiers de configuration Terraform. Nous vous recommandons toutefois de les regrouper dans un fichier dédié nommé outputs.tf pour faciliter la navigation dans votre configuration.
Le libellé qui suit le mot-clé output correspond au nom de la sortie. Les noms de sortie doivent être uniques au sein du module. Un bloc output accepte les arguments suivants :
-
value
(Obligatoire) La valeur à renvoyer à l'utilisateur du module.
-
description
(Facultatif) Une description lisible par l'homme indiquant l'objectif de la sortie. Terraform utilise cette description pour générer la documentation du module.
-
sensitive
(Facultatif) Valeur booléenne indiquant si la sortie est sensible. Si elle est définie sur
true, Terraform masque la valeur dans la sortie du CLI afin d'éviter la divulgation de données confidentielles, telles que des mots de passe ou un AccessKey Secret.
L'exemple suivant déclare une sortie nommée vpc_id pour une ressource nommée my-vpc :
# Create a VPC
resource "alicloud_vpc" "my-vpc" {
vpc_name = "tf-vpc"
cidr_block = "10.0.0.0/16"
}
output "vpc_id" {
value = alicloud_vpc.my-vpc.id
}
Une fois terraform apply exécuté avec succès, l'ID du VPC s'affiche dans la sortie du CLI :
alicloud_vpc.my-vpc: Creating...
alicloud_vpc.my-vpc: Creation complete after 7s [id=vpc-bp1gcq59rsakmwx1apmhn]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Outputs:
vpc_id = "vpc-bp1gcq59rsakmwx1apmhn"
Interroger les sorties avec la commande terraform output
Pour les ressources déjà créées, exécutez terraform output à tout moment pour afficher toutes les valeurs de sortie :
$ terraform output
vpc_id = "vpc-bp1gcq59rsakmwx1apmhn"
Pour récupérer une seule valeur sous forme de chaîne brute (adaptée aux scripts shell) :
$ terraform output -raw vpc_id
vpc-bp1gcq59rsakmwx1apmhn
Pour récupérer toutes les sorties au format JSON (adapté à une consommation programmatique) :
$ terraform output -json
{
"vpc_id": {
"sensitive": false,
"type": "string",
"value": "vpc-bp1gcq59rsakmwx1apmhn"
}
}
Les options -raw et -json affichent la valeur en clair des sorties sensibles. N'utilisez pas ces options dans des contextes où la sortie est journalisée ou capturée.
Accéder aux sorties d'un module enfant
Un module parent accède aux sorties d'un module enfant en utilisant module.<MODULE_NAME>.<OUTPUT_NAME> :
module "network" {
source = "./modules/network"
}
resource "alicloud_security_group_rule" "allow_vpc" {
cidr_ip = module.network.vpc_cidr_block
}
Le module enfant (./modules/network) doit déclarer la sortie :
output "vpc_cidr_block" {
description = "CIDR block of the VPC"
value = alicloud_vpc.main.cidr_block
}
Bonnes pratiques pour les sorties
-
Exportez uniquement les informations utiles
Exportez des attributs calculés, et non des valeurs statiques qui se contentent de répéter une variable. Pour une ressource réseau, les sorties pertinentes incluent :
id: l'identifiant de la ressource.router_id: l'identifiant du routeur créé automatiquement pour le VPC.route_table_id: l'identifiant de la table de routage créée automatiquement pour le VPC.
Utilisez des noms et descriptions explicites — respectez les mêmes conventions que pour les noms de variables et fournissez un argument
descriptionpour documenter l'intention de la sortie.**Regroupez toutes les sorties dans
outputs.tf** — un fichier dédié facilite la revue des éléments exposés par votre configuration.-
Marquez les sorties sensibles
Utilisez la fonctionnalité intégrée
sensitive = truede Terraform plutôt que de chiffrer manuellement les valeurs. Lorsqu'une sortie est marquée comme sensible, Terraform masque sa valeur dans la sortie deterraform planetterraform apply.