Fundamentos do Terraform (part. 3)

18/12/2024

Componentes do Terraform (continuação)

Variables

Variables (variáveis) são um mecanismo que permite parametrizar e reutilizar suas configurações, tornando-se mais flexíveis, dinâmicas e fáceis de manter. As variáveis permitem que você substitua valores fixos (hardcoded) por valores dinâmicos, que podem ser definidos no momento da execução ou fornecidos por diferentes fontes, como arquivos de configuração, entrada do usuário ou variáveis de ambiente.

Tipos de variáveis no Terraform

  • Variáveis de entrada (input variables): são usadas para passar informações dinâmicas para a configuração do Terraform
  • Variáreis de saída (output variables): servem para exibir ou exportar valores de recursos gerenciados
  • Variáveis locais (local variables): tem a finalidade de calcular ou derivar valores intermediários dentro de um módulo, sem exposição externa

Variáveis de Entrada

Essas variáveis permitem que você altere os valores que controlam como os recursos serão criados, sem modificar o código base. São definidas usando o bloco variable e podem ser passadas de diferentes maneiras.

Definindo Variáveis de Entrada
variables u0022instance_typeu0022 {n  description = u0022Tipo de instância para EC2u0022n  type        = stringn  default     = u0022t2.microu0022n}
HCL
  • Nome da variável: "instance_type" é o nome da variável que pode ser usada em outros lugares da configuração
  • Description: um comentário sobre para descrever a função da variável
  • Type: é o tipo de dado que a variável aceitará. Pode ser string, number, bool, list, map, entre outros
  • Default: se não for fornecido um valor durante a execução, o valor "t2.micro" será usado como padrão

Para usar a variável instance_type na configuração de um recurso, faríamos da seguinte forma:

Usando as variáveis
resource u0022aws_instanceu0022 u0022exampleu0022 {n  ami           = u0022ami-0c55b159cbfafe1f0u0022n  instance_type = var.instance_type   # Referenciando a variáveln}
HCL

É possível fornecer os valores para as variáveis de várias maneiras:

Linha de Comando: Durante a execução do Terraform, você pode passar valores diretamente na linha de comando:

Bash
terraform apply -var="instance_type=t2.large"
Bash

Arquivo .tfvars: você pode criar um arquivo com as variáveis de entrada. Por exemplo, variables.tfvars

variables.tfvars
instance_type = "t2.large"
HCL

e aplicar esse arquivo com o comando:

Bash
terraform apply -var-file="variables.tfvars"
Bash

Variáveis de Ambiente: o Terraform permite definir variáveis de ambiente no formato TF_VAR_<nome_da_variável>.

Bash
export TF_VAR_instance_type="t2.large"
Bash

dessa maneira passaria o valor "t2.large" para a variável instance_type sem precisar alterar o código ou usar arquivo.

Variáveis de Saída

Variáveis de saída servem para expor informações de recursos gerenciados pelo Terraform, geralmente ao final da execução do terraform apply. Esses valores são úteis caso haja necessidade de reutilizar ou compartilhar, como endereço de IP, IDs de recursos, etc.

Definindo variáveis de saída
output "instance_ip" {
  description = "Endereço IP da instância"
  value       = aws_instance.example.public_ip
}

# Nesse exemplo após a execução do terraform é exibido o endereço IP da instância EC2
HCL

Variáveis Locais

Usadas para calcular ou definir valores temporários dentro do código do Terraform, facilitando a manutenção e o uso repetido de expressões complexas.

Definindo Variáveis Locais
locals {
  instance_name = "MyAppServer-${var.environment}"
  instance_tags = {
    Name = local.instance_name
    Env  = var.environment
  }
}

# Nesse exemplo a variável local instance_name cria um nome personalizado para a instância com base no valor da variável environment, e a variáel instance_tags usa esse nome para criar um conjunto de tags reutilizável.
HCL

Tipos de Dados para Variáveis

As variáveis de entrada podem ser definidas com diferentes tipos de dados:

variables.tf
# String (texto simples)
variable "name" {
  type    = string
  default = "my-server"
}

# Number (valor numérico)
variable "replicas" {
  type    = number
  default = 3
}

# Boolean (true or false)
variable "enable_monitoring" {
  type    = bool
  default = true
}

# List (conjunto de valores organizados em uma lista)
variable "allowed_ips" {
  type = list(string)
  default = ["192.168.0.1", "10.0.0.1"]
}

# Map (conjunto de pares chave-valor)
variable "instance_tags" {
  type = map(string)
  default = {
    Name = "my-instance"
    Env  = "production"
  }
}
HCL

As variáveis no Terraform oferecem flexibilidade e reutilização, permitindo que você ajuste as configurações de infraestrutura conforme necessário, sem modificar o código-base repetinamente. Usar variáveis de entrada, saída e locais é uma prática recomendada para garantir que suas configurações sejam modulares, dinâmicas e fáceis de manter.

Condicionais e Funções com Variáveis

O Terraform permite o uso de expressões condicionais e funções para tornar as variáveis ainda mais dinâmicas.

Expressão Condicional
variable "environment" {
  type    = string
  default = "dev"
}

locals {
  instance_type = var.environment == "prod" ? "t2.large" : "t2.micro"
}

# Aqui, o tipo de instância t2.large se o ambiente for "prod", caso contrário, será t2.micro
HCL
Funções
variable "allowed_ips" {
  type = list(string)
}

output "num_ips" {
  value = length(var.allowed_ips)
}

# O Terraform oferece várias funções úteis que podem ser usadas com variáveis. No exemplo acima, a função lenght para contar o número de elementos em uma lista.
HCL

IamGrucci

Sou um engenheiro de infraestrutura com mais de 10 anos de experiência, especializado em modernização de sistemas e na criação de soluções IaC (Infrastructure as Code) utilizando ferramentas como Terraform e CloudFormation. Com sólida expertise em automação e orquestração de ambientes cloud. Apaixonado por aprender e ensinar novas tecnologias, dedico-me a ajudar outros profissionais a ingressarem no mundo da TI e a adotar práticas modernas de infraestrutura.

Deixe um comentário