Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Comprendre les variables, les valeurs locales et les sorties Terraform
Les variables améliorent la flexibilité du code en autorisant des espaces réservés dans les blocs de code. Les variables peuvent représenter des valeurs différentes chaque fois que le code est réutilisé. Terraform distingue ses types de variables par leur portée modulaire. Les variables d'entrée sont des valeurs externes qui peuvent être injectées dans un module, les valeurs de sortie sont des valeurs internes qui peuvent être partagées en externe, et les valeurs locales restent toujours dans leur champ d'application d'origine.
Variables
AWS CloudFormation utilise des paramètres pour représenter des valeurs personnalisées qui peuvent être définies et réinitialisées d'un déploiement de stack à l'autre. De même, Terraform utilise des variables d'entrée, ou variables
variable "thing_i_made_up" { type = string } variable "random_number" { default = 5 } variable "dogs" { type = list(object({ name = string breed = string })) default = [ { name = "Sparky", breed = "poodle" } ] }
Pour accéder à la race de Sparky dans la configuration, vous devez utiliser la variablevar.dogs[0].breed
. Si une variable n'a pas de valeur par défaut et n'est pas classée comme nulle, la valeur de la variable doit être définie pour chaque déploiement. Dans le cas contraire, il est facultatif de définir une nouvelle valeur pour la variable. Dans un module racine, vous pouvez définir les valeurs des variables actuelles sur la ligne de commande
# terraform.tfvars dogs = [ { name = "Sparky", breed = "poodle" }, { name = "Fluffy", breed = "chihuahua" } ] random_number = 7 thing_i_made_up = "Kabibble"
dogs
Dans cet exemple, la valeur du fichier terraform.tfvars remplacerait la valeur par défaut dans la déclaration de variable. Si vous déclarez des variables dans un module enfant, vous pouvez définir les valeurs des variables directement dans le bloc de déclaration du module, comme indiqué dans l'exemple suivant.
module "my_custom_module" { source = "modulesource/custom" version = "0.0.1" random_number = 8 }
Parmi les autres arguments que vous pouvez utiliser lors de la déclaration d'une variable, citons :
-
sensitive
— Définissez ce paramètre pourtrue
empêcher que la valeur de la variable ne soit exposée dans les sorties du processus Terraform. -
nullable
— La définition de cette valeurtrue
permet à la variable de ne pas avoir de valeur. Cela est pratique pour les variables pour lesquelles aucune valeur par défaut n'est définie. -
description
— Ajoutez une description de la variable aux métadonnées de la pile. -
validation
— Définissez les règles de validation pour la variable.
L'un des aspects les plus pratiques des variables Terraform est la possibilité d'ajouter un ou plusieurs objets de validation dans la déclaration de variable. Vous pouvez utiliser des objets de validation pour ajouter une condition selon laquelle la variable doit satisfaire, faute de quoi le déploiement échoue. Vous pouvez également définir un message d'erreur personnalisé à afficher chaque fois que la condition n'est pas respectée.
Par exemple, vous configurez un fichier de configuration Terraform que les membres de votre équipe exécuteront. Avant de déployer les stacks, un membre de l'équipe doit créer un fichier terraform.tfvars pour définir une valeur de configuration importante. Pour le leur rappeler, vous pouvez faire quelque chose comme ceci.
variable "important_config_setting" { type = string validation { condition = length(var.important_config_setting) > 0 error_message = "Don't forget to create the terraform.tfvars file!" } validation { condition = substr(var.important_config_setting, 0, 7) == "prefix-" error_message = "Remember that the value always needs to start with 'prefix-'" } }
Comme le montre cet exemple, vous pouvez définir plusieurs conditions dans une seule variable. Terraform affiche uniquement les messages d'erreur en cas d'échec. De cette façon, vous pouvez appliquer toutes sortes de règles sur les valeurs des variables. Si une valeur variable provoque une défaillance du pipeline, vous saurez exactement pourquoi.
Valeurs locales
Si vous souhaitez créer un alias dans un module pour certaines valeurs, utilisez le locals
mot-clé plutôt que de déclarer une variable par défaut qui ne sera jamais mise à jour. Comme son nom l'indique, un locals
bloc contient des termes dont le champ d'application est interne à ce module spécifique. Si vous souhaitez transformer une valeur de chaîne, par exemple en ajoutant un préfixe à une valeur de variable à utiliser dans le nom d'une ressource, l'utilisation d'une valeur locale peut être une bonne solution. Un seul locals
bloc peut déclarer toutes les valeurs locales de votre module, comme illustré dans l'exemple suivant.
locals { moduleName = "My Module" localConfigId = concat("prefix-", var.important_config_setting) }
N'oubliez pas que lorsque vous accédez à la valeur, le locals
mot-clé devient singulier, par exemplelocal.LocalConfigId
.
Valeurs de sortie
Si les variables d'entrée Terraform sont comme des CloudFormation paramètres, on peut dire que les valeurs de sortie Terraform sont comme des sortiesoutput
bloc suivant au second module.
output "module_id" { value = local.module_id } Then in the first module you could use it like this: module "first_module" { source = "path/to/first/module" } resource "example_resource" "example_resource_name" { module_id = module.first_module.module_id }
Étant donné que les valeurs de sortie Terraform peuvent être utilisées dans la même pile, vous pouvez également utiliser l'sensitive
attribut dans un output
bloc pour empêcher l'affichage de la valeur dans la sortie de la pile. De plus, un output
bloc peut utiliser des precondition
blocs de la même manière que les variables utilisent des validation
blocs : pour garantir que les variables suivent un certain ensemble de règles. Cela permet de s'assurer que toutes les valeurs d'un module existent comme prévu avant de procéder au déploiement.
output "important_config_setting" { value = var.important_config_setting precondition { condition = length(var.important_config_setting) > 0 error_message = "You forgot to create the terraform.tfvars file again." } }