Compreendendo as variáveis, valores locais e saídas do Terraform - AWS Orientação prescritiva

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 ou variáveis. As variáveis podem ser declaradas em qualquer lugar em um arquivo de configuração do Terraform e geralmente são declaradas com o tipo de dados necessário ou o valor padrão. Todas as três expressões a seguir são declarações de variáveis válidas do Terraform.

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, como variáveis de ambiente ou no arquivo terraform.tfvars. O exemplo a seguir mostra como inserir valores variáveis no arquivo terraform.tfvars, que é armazenado no diretório de nível superior do módulo.

# 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 para true evitar que o valor da variável seja exposto nas saídas do processo do Terraform. 

  • nullable— Definir isso para true 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 Terraform são como CloudFormation saídas. Ambos são usados para expor valores de dentro de uma pilha de implantação. No entanto, como o módulo Terraform está mais enraizado na estrutura da ferramenta, os valores de saída do Terraform também são usados para expor valores dentro de um módulo a um módulo pai ou a outros módulos secundários, mesmo que esses módulos estejam todos na mesma pilha de implantação. Se você estiver criando dois módulos personalizados e o primeiro módulo precisar acessar o valor de ID do segundo módulo, você precisará adicionar o output 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." } }