Simplificando Terraform: Como Usar Locals para um Código Limpo e Eficiente


No mundo de DevOps, escrever código de Infraestrutura como Código (IaC) com Terraform é uma prática diária. Mas não basta apenas fazer a infraestrutura subir; é crucial que nosso código seja limpo, legível e fácil de manter. À medida que os projetos crescem, a complexidade aumenta, e com ela a repetição de código e as expressões difíceis de entender.
É aqui que um recurso simples, mas extremamente poderoso do Terraform, entra em cena: os locals
.
Se você já se pegou copiando e colando a mesma combinação de variáveis para criar nomes ou tags, ou se sentiu perdido em lógicas complexas dentro de um bloco de resource
, este artigo é para você. Vamos explorar como o uso de locals
pode transformar seu código.
O que são locals
no Terraform?
Pense nos locals
(ou valores locais) como constantes dentro do seu módulo Terraform.
Diferente das variables
, que são feitas para receber valores externos (por exemplo, do usuário via linha de comando ou de um arquivo .tfvars
), os locals
são definidos e usados internamente. Eles permitem que você atribua um nome a uma expressão, tornando-a reutilizável em todo o seu código.
Em resumo, locals
são a personificação do princípio DRY (Don't Repeat Yourself) no Terraform.
As Vantagens: Por que você deveria usar locals
?
As imagens deixam claro os benefícios, e eles são impactantes na prática:
Facilita a Manutenção: Se uma lógica de nomeação ou uma tag padrão precisa ser alterada, você muda em um único lugar: no bloco
locals
. Não é preciso "caçar" todas as ocorrências espalhadas pelos seus recursos.Economiza Linhas e Evita Repetição: Em vez de reescrever a mesma expressão várias vezes, você a define uma vez e a referencia por um nome simples. Menos código, menos chance de erro.
Deixa seu Código Mais Legível: Esta é talvez a maior vantagem. Expressões complexas podem ser encapsuladas em um
local
com um nome descritivo. Isso transforma seu código de algo difícil de decifrar para algo que se auto-documenta.
Mão na Massa: Um Exemplo Prático
Vamos ver a mágica acontecer com o exemplo prático apresentado nas imagens.
O Cenário "Antes"
Imagine que você está criando uma instância EC2 e precisa definir uma tag Name
que siga um padrão, como ambiente-projeto
. Sem locals
, seu código poderia ser assim:
resource "aws_instance" "example" {
ami = var.ami
instance_type = var.instance_type
tags = {
Name = "${var.env}-${var.project}"
}
}
Funciona, mas imagine ter que repetir a expressão "${var.env}-${var.project}"
para um bucket S3, um Security Group, um RDS, etc. Se o padrão de nomenclatura mudar, o trabalho de refatoração será enorme e propenso a erros.
O Cenário "Depois" com locals
Agora, vamos refatorar esse código usando um bloco locals
.
locals {
# Define um ambiente padrão caso a variável não seja fornecida
env = var.env != null ? var.env : "develop"
# Cria o nome padrão para os recursos, usando o local.env
common_name = "${local.env}-${var.project}"
}
resource "aws_instance" "example" {
ami = var.ami
instance_type = var.instance_type
tags = {
# Referencia o nome padronizado de forma simples e limpa
Name = local.common_name
}
}
resource "aws_s3_bucket" "data" {
bucket = local.common_name
tags = {
Name = local.common_name
}
}
Veja a diferença!
Centralização da Lógica: Toda a lógica para criar o nome padrão (
common_name
) e até para definir um ambiente padrão (env
) está no blocolocals
.Legibilidade: O bloco
resource
agora é muito mais limpo. A tagName
simplesmente recebelocal.common_name
. Fica óbvio qual é a sua intenção.Reutilização: Se precisarmos criar outro recurso, como o bucket S3 no exemplo, podemos reutilizar
local.common_name
para o nome do bucket e para a tag, garantindo consistência total com zero esforço adicional.
Conclusão
Adotar o uso de locals
é um passo fundamental para elevar a qualidade do seu código Terraform. É uma mudança simples que paga dividendos enormes em termos de manutenção, legibilidade e escalabilidade. Ao centralizar expressões e lógicas repetitivas, você não só economiza tempo, mas também torna seus projetos de infraestrutura mais robustos e fáceis de gerenciar para toda a equipe.
Abra seus projetos Terraform agora mesmo. Onde você pode substituir uma expressão repetida por um local
bem nomeado? Comece a refatorar e sinta a diferença!
Subscribe to my newsletter
Read articles from Erik Nathan directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Erik Nathan
Erik Nathan
DevOps and Create Content