Introdução

Gerenciar infraestrutura manualmente funciona enquanto o ambiente é pequeno. Conforme servidores, redes, bancos de dados e outros serviços aumentam, surgem problemas de repetibilidade, documentação, padronização e controle de mudanças.

Infrastructure as Code, ou IaC, trata a infraestrutura como código versionável e reproduzível.

Em vez de depender de uma sequência de cliques em um console, descrevemos o estado desejado da infraestrutura em arquivos.

O que é Infrastructure as Code?

IaC é uma abordagem na qual recursos de infraestrutura são definidos por meio de arquivos que podem ser versionados, revisados e executados automaticamente.

Um fluxo manual poderia ser:

  1. Criar uma rede.
  2. Criar sub-redes.
  3. Criar uma máquina.
  4. Configurar regras de acesso.
  5. Repetir tudo em outro ambiente.

Com IaC, essa configuração pode ser descrita em código e reaplicada.

Benefícios

  • Replicabilidade: o mesmo código pode criar ambientes semelhantes.
  • Versionamento: alterações podem ser acompanhadas pelo Git.
  • Revisão: mudanças podem passar por pull requests.
  • Automação: pipelines podem executar validações e planos.
  • Padronização: equipes podem seguir estruturas e convenções comuns.

O que é Terraform?

Terraform é uma ferramenta de Infrastructure as Code baseada em configuração declarativa desenvolvida pela empresa Hashcorp.

Em vez de informar cada passo que a ferramenta deve executar, descrevemos o resultado desejado.

Por exemplo, conceitualmente:

resource "example_server" "app" {
  name = "app-server"
  size = "small"
}

O Terraform interpreta essa configuração, compara o estado desejado com o estado conhecido da infraestrutura e determina quais mudanças são necessárias.

Imperativo x declarativo

Uma abordagem imperativa tende a responder:

“Execute estas ações nesta ordem.”

Uma abordagem declarativa responde:

“Quero que minha infraestrutura tenha estas características.”

Essa diferença é fundamental para entender Terraform.

O ciclo básico

O fluxo básico do terraform é:

Código
terraform init
terraform plan
terraform apply
Infraestrutura

Quando a configuração muda, o Terraform calcula novamente as diferenças.

Mas antes de escrever infraestrutura, é importante entender o modelo mental do Terraform.

Os conceitos mais importantes são:

Terraform
├── Configuration
├── Providers
├── Resources
├── Data Sources
├── State
└── Modules

Nesse artigo, vamos nos concentrar nos conceitos fundamentais.

Configuration

A configuração é o conjunto de arquivos .tf que descreve a infraestrutura desejada.

Exemplo:

resource "example_server" "app" {
  name = "app-server"
}

O código não descreve necessariamente cada passo de criação. Ele declara como queremos que o recurso esteja.

Providers

Terraform não conhece nativamente todos os serviços de nuvem, SaaS ou APIs existentes.

Providers são plugins que permitem ao Terraform interagir com essas APIs.

Exemplos de categorias de providers:

  • Cloud providers
  • Kubernetes
  • GitHub
  • DNS
  • Monitoramento
  • Bancos de dados e outros serviços

Um provider disponibiliza recursos e data sources que podemos usar na configuração.

Resources

Resources representam objetos que o Terraform pode criar, alterar ou remover.

Exemplo conceitual:

resource "example_server" "app" {
  name = "app-server"
}

A estrutura é:

resource "TIPO" "NOME" {
  configuração
}

O endereço desse recurso no Terraform será:

example_server.app

Data Sources

Data Sources permitem consultar informações existentes sem necessariamente gerenciar o ciclo de vida daquele objeto.

Conceitualmente:

data "example_network" "default" {
  name = "default"
}

A distinção é importante:

  • Resource: normalmente representa algo que o Terraform gerencia.
  • Data Source: normalmente representa uma informação que o Terraform consulta.

State

O State é uma das partes mais importantes do Terraform.

Ele registra informações sobre os recursos que Terraform está gerenciando e ajuda a relacionar a configuração com a infraestrutura real.

Não devemos tratá-lo simplesmente como um “banco de dados qualquer”. Ele faz parte do mecanismo de gerenciamento do Terraform.

Vamos estudar State em profundidade posteriormente.

O fluxo mental

Podemos simplificar a execução assim:

Configuração desejada
        +
Estado conhecido
Terraform calcula mudanças
Provider executa operações
Estado é atualizado

Esse ciclo explica boa parte do comportamento da ferramenta.

Declarativo não significa mágico

O Terraform decide quais operações precisa realizar, mas isso não elimina a necessidade de compreender dependências, alterações destrutivas, estado e características do provider.

Por isso, terraform plan é uma etapa essencial.

Próximo artigo

No próximo artigo, vamos fazer a instalação do Terraform e começar a colocar a mão na massa.