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

Erik NathanErik Nathan
4 min read

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:

  1. 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.

  2. 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.

  3. 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!

  1. 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 bloco locals.

  2. Legibilidade: O bloco resource agora é muito mais limpo. A tag Name simplesmente recebe local.common_name. Fica óbvio qual é a sua intenção.

  3. 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!

0
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