Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Comprensión de las variables, los valores locales y los resultados de Terraform
Las variables mejoran la flexibilidad del código al permitir colocar marcadores de posición dentro de los bloques de código. Las variables pueden representar valores diferentes siempre que se reutilice el código. Terraform distingue sus tipos de variables por su alcance modular. Las variables de entrada son valores externos que se pueden inyectar en un módulo, los valores de salida son valores internos que se pueden compartir externamente y los valores locales siempre permanecen dentro de su ámbito original.
Variables
AWS CloudFormation usa parámetros para representar valores personalizados que se pueden configurar y restablecer de una implementación de pila a la siguiente. Del mismo modo, Terraform usa variables o variables de entrada
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" } ] }
Para acceder a la raza de Sparky dentro de la configuración, debes usar la variable. var.dogs[0].breed
Si una variable no tiene valores predeterminados y no está clasificada como anulable, se debe establecer el valor de la variable para cada implementación. De lo contrario, es opcional establecer un nuevo valor para la variable. En un módulo raíz, puede establecer los valores de las variables actuales en la línea de comandos
# terraform.tfvars dogs = [ { name = "Sparky", breed = "poodle" }, { name = "Fluffy", breed = "chihuahua" } ] random_number = 7 thing_i_made_up = "Kabibble"
El valor del archivo terraform.tfvars de este ejemplo anularía el valor predeterminado de la declaración de variables. dogs
Si declaras variables dentro de un módulo secundario, puedes establecer los valores de las variables directamente dentro del bloque de declaración del módulo, como se muestra en el siguiente ejemplo.
module "my_custom_module" { source = "modulesource/custom" version = "0.0.1" random_number = 8 }
Algunos de los otros argumentos que puedes usar al declarar una variable son:
-
sensitive
— Configurarlo paratrue
evitar que el valor de la variable quede expuesto en las salidas del proceso de Terraform. -
nullable
— Si se configura de esta manera, setrue
permite que la variable no tenga ningún valor. Esto resulta práctico para las variables en las que no se establece un valor predeterminado. -
description
— Añadir una descripción de la variable a los metadatos de la pila. -
validation
— Establecer reglas de validación para la variable.
Uno de los aspectos más convenientes de las variables de Terraform es la posibilidad de añadir uno o más objetos de validación dentro de la declaración de variables. Puede usar los objetos de validación para agregar una condición que la variable deba cumplir o, de lo contrario, el despliegue fallará. También puede configurar un mensaje de error personalizado para que se muestre cada vez que se infrinja la condición.
Por ejemplo, estás configurando un archivo de configuración de Terraform que ejecutarán los miembros de tu equipo. Antes de implementar las pilas, un miembro del equipo debe crear un archivo terraform.tfvars para establecer un valor de configuración importante. Para recordárselo, puedes hacer algo como lo siguiente.
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-'" } }
Como se muestra en este ejemplo, puede establecer varias condiciones dentro de una sola variable. Terraform solo muestra los mensajes de error de las condiciones fallidas. De esta forma, puede hacer cumplir todo tipo de reglas sobre los valores de las variables. Si un valor variable provoca un fallo en la canalización, sabrá exactamente por qué.
Valores locales
Si hay algún valor dentro de un módulo al que desee asignar un alias, utilice la locals
palabra clave en lugar de declarar una variable predeterminada que nunca se actualizará. Como su nombre indica, un locals
bloque contiene términos que se refieren internamente a ese módulo específico. Si quieres transformar un valor de cadena, por ejemplo, añadiendo un prefijo a un valor de variable para usarlo en el nombre de un recurso, usar un valor local puede ser una buena solución. Un solo locals
bloque puede declarar todos los valores locales del módulo, como se muestra en el siguiente ejemplo.
locals { moduleName = "My Module" localConfigId = concat("prefix-", var.important_config_setting) }
Recuerda que cuando accedes al valor, la locals
palabra clave pasa a ser singular, por ejemplolocal.LocalConfigId
.
Valores de salida
Si las variables de entrada de Terraform son como CloudFormation parámetros, entonces se podría decir que los valores de salida de Terraformoutput
bloque al segundo módulo.
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 }
Como los valores de salida de Terraform se pueden usar en la misma pila, también puedes usar el sensitive
atributo en un output
bloque para evitar que el valor se muestre en la salida de la pila. Además, un output
bloque puede usar precondition
bloques de la misma manera que las variables usan validation
bloques: para garantizar que las variables sigan un conjunto determinado de reglas. Esto ayuda a garantizar que todos los valores de un módulo existan según lo esperado antes de continuar con la implementación.
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." } }