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:
- Criar uma rede.
- Criar sub-redes.
- Criar uma máquina.
- Configurar regras de acesso.
- 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.
