As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Compreendendo as variáveis, valores locais e saídas do Terraform
As variáveis aprimoram a flexibilidade do código ao permitir espaços reservados em blocos de código. As variáveis podem representar valores diferentes sempre que o código é reutilizado. O Terraform distingue entre seus tipos de variáveis por seu escopo modular. As variáveis de entrada são valores externos que podem ser injetados em um módulo, os valores de saída são valores internos que podem ser compartilhados externamente e os valores locais sempre permanecem dentro do escopo original.
Variáveis
AWS CloudFormation usa parâmetros para representar valores personalizados que podem ser definidos e redefinidos de uma implantação de pilha para a próxima. Da mesma forma, o Terraform usa variáveis 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 acessar a raça do Sparky dentro da configuração, você usaria a variávelvar.dogs[0].breed
. Se uma variável não tiver padrão e não for classificada como anulável, o valor da variável deverá ser definido para cada implantação. Caso contrário, é opcional definir um novo valor para a variável. Em um módulo raiz, você pode definir os valores das variáveis atuais na linha de comando
# terraform.tfvars dogs = [ { name = "Sparky", breed = "poodle" }, { name = "Fluffy", breed = "chihuahua" } ] random_number = 7 thing_i_made_up = "Kabibble"
O valor do arquivo terraform.tfvars neste exemplo substituiria o valor padrão na declaração da variável. dogs
Se você estiver declarando variáveis em um módulo filho, poderá definir os valores das variáveis diretamente no bloco de declaração do módulo, conforme mostrado no exemplo a seguir.
module "my_custom_module" { source = "modulesource/custom" version = "0.0.1" random_number = 8 }
Alguns dos outros argumentos que você pode usar ao declarar uma variável incluem:
-
sensitive
— Definir isso paratrue
evitar que o valor da variável seja exposto nas saídas do processo do Terraform. -
nullable
— Definir isso paratrue
permitir que a variável não tenha valor. Isso é conveniente para variáveis em que um padrão não está definido. -
description
— Adicione uma descrição da variável aos metadados da pilha. -
validation
— Defina regras de validação para a variável.
Um dos aspectos mais convenientes das variáveis do Terraform é a capacidade de adicionar um ou mais objetos de validação na declaração da variável. Você pode usar objetos de validação para adicionar uma condição que a variável deve passar, caso contrário, a implantação falhará. Você também pode definir uma mensagem de erro personalizada para ser exibida sempre que a condição for violada.
Por exemplo, você está configurando um arquivo de configuração do Terraform que os membros da sua equipe executarão. Antes de implantar as pilhas, um membro da equipe precisa criar um arquivo terraform.tfvars para definir um valor de configuração importante. Para lembrá-los, você pode fazer algo como o seguinte.
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-'" } }
Conforme mostrado neste exemplo, você pode definir várias condições dentro de uma única variável. O Terraform mostra apenas mensagens de erro para condições com falha. Dessa forma, você pode aplicar todos os tipos de regras em valores variáveis. Se o valor de uma variável causar uma falha na tubulação, você saberia exatamente o motivo.
Valores locais
Se houver algum valor em um módulo que você queira criar um alias, use a locals
palavra-chave em vez de declarar uma variável padrão que nunca será atualizada. Como o nome sugere, um locals
bloco contém termos que têm como escopo interno esse módulo específico. Se você quiser transformar um valor de string, por exemplo, adicionando um prefixo a um valor de variável para uso em um nome de recurso, usar um valor local pode ser uma boa solução. Um único locals
bloco pode declarar todos os valores locais do seu módulo, conforme mostrado no exemplo a seguir.
locals { moduleName = "My Module" localConfigId = concat("prefix-", var.important_config_setting) }
Lembre-se de que, quando você está acessando o valor, a locals
palavra-chave se torna singular, comolocal.LocalConfigId
.
Valores de saída
Se as variáveis de entrada do Terraform forem como CloudFormation parâmetros, você poderia dizer que os valores de saída do Terraformoutput
bloco a seguir ao 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 os valores de saída do Terraform podem ser usados na mesma pilha, você também pode usar o sensitive
atributo em um output
bloco para impedir que o valor seja exibido na saída da pilha. Além disso, um output
bloco pode usar precondition
blocos da mesma forma que as variáveis usam validation
blocos: para garantir que as variáveis sigam um determinado conjunto de regras. Isso ajuda a garantir que todos os valores em um módulo existam conforme o esperado antes de prosseguir com a implantação.
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." } }