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.
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:
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:
terraform apply -var="instance_type=t2.large"
BashArquivo .tfvars: você pode criar um arquivo com as variáveis de entrada. Por exemplo, variables.tfvars
instance_type = "t2.large"
HCLe aplicar esse arquivo com o comando:
terraform apply -var-file="variables.tfvars"
BashVariáveis de Ambiente: o Terraform permite definir variáveis de ambiente no formato TF_VAR_<nome_da_variável>
.
export TF_VAR_instance_type="t2.large"
Bashdessa 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.
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
HCLVariá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.
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.
HCLTipos de Dados para Variáveis
As variáveis de entrada podem ser definidas com diferentes tipos de dados:
# 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"
}
}
HCLAs 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.
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
HCLvariable "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