Comprendre les variables, les valeurs locales et les sorties Terraform - AWS Directives prescriptives

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. Les variables peuvent être déclarées n'importe où dans un fichier de configuration Terraform et sont généralement déclarées avec le type de données requis ou la valeur par défaut. Les trois expressions suivantes sont des déclarations de variables Terraform valides.

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, en tant que variables d'environnement ou dans le fichier terraform.tfvars. L'exemple suivant montre comment saisir des valeurs de variables dans le fichier terraform.tfvars, qui est stocké dans le répertoire de premier niveau du module.

# terraform.tfvars dogs = [ { name = "Sparky", breed = "poodle" }, { name = "Fluffy", breed = "chihuahua" } ] random_number = 7 thing_i_made_up = "Kabibble"

dogsDans 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 pour true empêcher que la valeur de la variable ne soit exposée dans les sorties du processus Terraform. 

  • nullable— La définition de cette valeur true 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 sorties. CloudFormation Les deux sont utilisés pour exposer les valeurs issues d'une pile de déploiement. Cependant, étant donné que le module Terraform est davantage ancré dans la structure de l'outil, les valeurs de sortie Terraform sont également utilisées pour exposer les valeurs d'un module à un module parent ou à d'autres modules enfants, même si ces modules font tous partie de la même pile de déploiement. Si vous créez deux modules personnalisés et que le premier module doit accéder à la valeur ID du second module, vous devez ajouter le output 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'sensitiveattribut 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." } }