כָּתְבֵם עַל לוּחַ לִבֶּךָ kotvem al luach libecha · escreve-os na tábua do teu coração · Mishlei 3:3

Blog/Artigos · Cloud e Plataforma

Infraestrutura como código: o que está escrito se cumpre igual toda vez

Terraform e Terragrunt, o modelo declarativo e idempotente, o arquivo de state, os módulos, o drift e a infraestrutura imutável.

Por Juliano Vince de Campos · · 8 min de leitura · 5 seções · 5 figuras

כְּתָב KOTVEM · MISHLEI 3:3

O provérbio manda escrever a instrução na tábua do coração, para que ela não dependa da memória e se cumpra sempre igual. O oposto de escrever é confiar na lembrança, e memória de infraestrutura é a pior das fontes: ninguém lembra por que aquele security group tem aquela regra, ou o que muda se o servidor for recriado. Infraestrutura como código é escrever a infraestrutura na tábua, em texto versionado, para que o que está escrito se materialize igual toda vez, em qualquer conta, por qualquer pessoa. Deixa de ser artesanato que mora na cabeça de alguém e vira artefato que se lê, se revisa e se reproduz.

Por que escrever a infra, em vez de clicar

Criar infraestrutura clicando no console é rápido na primeira vez e uma armadilha em todas as seguintes. Ninguém consegue recriar o ambiente igual, ninguém sabe o que mudou desde ontem, e a revisão por outra pessoa é impossível porque não há o que revisar. É o que se chama ClickOps, e o custo aparece no pior momento: quando o ambiente cai e precisa ser reconstruído, ou quando a auditoria pergunta quem mudou aquela regra e quando. A resposta mora na memória de alguém, e memória não se versiona nem se audita.

Infraestrutura como código inverte isso. A infra vira texto declarativo, guardado no Git como qualquer outro código: com histórico, com pull request, com revisão, com a possibilidade de voltar atrás. O Terraform, da HashiCorp, virou o padrão de mercado por ser agnóstico de nuvem e ter uma linguagem própria, a HCL, legível o bastante para o pull request fazer sentido. O ganho não é só reprodutibilidade; é que a mudança de infraestrutura passa a ter o mesmo rito de qualquer mudança de código, e some o operador solitário mudando produção no escuro.

Figura 1Clicar no console e escrever a infraestrutura
AspectoClickOps (console)Infra como código
Reprodutívelnão, cada ambiente vira únicosim, o mesmo código gera o mesmo ambiente
Revisávelnão há o que revisar antespull request com plan antes de aplicar
Auditávelquem mudou o quê some no tempohistórico Git responde quem, quando e por quê
Reversíveldesfazer é arqueologia manualvoltar ao commit anterior e reaplicar
Escalanão escala além de poucos recursosmódulos reusáveis em dezenas de contas
ClickOps é rápido na primeira vez e caro em todas as seguintes. IaC dá à mudança de infraestrutura o mesmo rito da mudança de código: histórico, revisão e volta atrás.

Declarativo e idempotente: descrever o fim, não o passo

A ideia central do Terraform é declarativa: você descreve o estado final desejado, três instâncias, este banco, aquela rede, e a ferramenta descobre como chegar lá a partir de onde está. Você não escreve o passo a passo; escreve o destino. E é idempotente: aplicar o mesmo código dez vezes leva ao mesmo resultado que aplicar uma, porque a ferramenta só muda o que está diferente do desejado. Isso é o que torna a operação segura de repetir, e o que separa IaC de um script que quebra se rodar duas vezes.

O rito que dá segurança a isso é o par plan e apply. O plan mostra, antes de tocar em nada, exatamente o que vai ser criado, mudado e destruído. É o momento de revisão, e é onde se pega a linha assustadora: vai destruir o banco de produção. Nenhum apply em ambiente sério acontece sem um plan revisado antes, e é por isso que o plan entra no pull request como artefato: a pessoa aprova sabendo o efeito, não a intenção. Aprovar apply sem ler o plan é assinar em branco, e a nuvem cobra caro a assinatura em branco.

Figura 2O rito do plan e apply, com revisão no meio
  1. 01Escrever o desejadodeclarar o estado final em HCL, versionado no Git
  2. 02IAPlana ferramenta calcula o que vai criar, mudar e destruir
  3. 03Revisar o plano diff entra no pull request; aprova-se o efeito, não a intenção
  4. 04Applysó o que difere do desejado é alterado, de forma idempotente
  5. 05State atualizadoo mapa do que existe é registrado para a próxima rodada

Repetir o apply é seguro: só muda o que saiu do desejado. É a idempotência que separa IaC de um script que quebra na segunda execução.

Nenhum apply sério acontece sem plan revisado antes. O plan mostra o efeito real, inclusive o assustador 'vai destruir o banco', e por isso entra no pull request como artefato de decisão.

O state e os módulos: o mapa e as peças

O Terraform mantém um arquivo de state, o mapa entre o código e o que existe de fato na nuvem. Ele é indispensável e é o ponto mais perigoso: se corromper, some a correspondência; se vazar, expõe segredo; se dois apply rodarem juntos sobre o mesmo state, ele racha. Por isso, em qualquer ambiente sério, o state fica remoto e com trava, tipicamente num bucket com lock, para que só um apply mexa por vez. Tratar o state com leveza é o erro que transforma uma mudança trivial num incidente de reconstrução.

As peças reusáveis são os módulos: um módulo de rede, um de banco, um de serviço, escritos uma vez e instanciados em dezenas de ambientes com parâmetros diferentes. É aí que o Terragrunt entra, uma camada fina sobre o Terraform que resolve a repetição, o famoso DRY, e organiza dezenas de contas e ambientes sem copiar e colar configuração. Módulo bem feito é o que faz a plataforma escalar: o time de fluxo consome o módulo de banco pronto, com as boas práticas embutidas, em vez de aprender a provisionar banco do zero. É a estrada aplainada, agora em código.

Figura 3As camadas de um projeto de infraestrutura como código
  1. Módulos reusáveis as peçasrede, banco, serviço, escritos uma vez com boas práticas embutidas
  2. Composição por ambiente Terragruntinstancia os módulos por conta e ambiente, sem copiar e colar (DRY)
  3. State remoto com trava o mapabucket com lock: só um apply mexe por vez, e o segredo não vaza
  4. Backend e provider a fundaçãoonde o state vive e com qual nuvem o código fala
O state é indispensável e perigoso: remoto e travado, sempre. Os módulos são as peças que fazem a plataforma escalar, e o Terragrunt resolve a repetição de instanciá-los em dezenas de ambientes.

Drift e imutabilidade: gado, não bicho de estimação

O inimigo silencioso do IaC é o drift: a diferença entre o que o código diz e o que a nuvem tem, criada por alguém que mexeu no console às pressas durante um incidente. O código ficou desatualizado sem ninguém saber, e o próximo apply ou reverte a correção de emergência ou quebra o que foi remendado. A defesa é detectar o drift continuamente, rodando o plan em modo de verificação e alertando quando a realidade divergiu do escrito, para que a divergência seja resolvida no código, não perpetuada no escuro.

A postura que fecha o assunto é a infraestrutura imutável, resumida na metáfora de tratar servidor como gado, não como bicho de estimação. Bicho de estimação tem nome, é remendado quando adoece e ninguém quer perder; gado é numerado e, quando adoece, é substituído por um novo idêntico. Infraestrutura imutável nunca conserta um servidor no lugar: recria a partir do código, garantindo que o que sobe é sempre o que está escrito. Isso mata o drift na raiz e transforma recuperação de desastre em reaplicar o código, não em ressuscitar um bicho de estimação que ninguém mais sabe como funciona.

Figura 4Como lidar com a mudança na infraestrutura: escrito contra realidade
A realidade da nuvem
Convergidorealidade igual ao escrito: o estado saudável que se quer manter.
Driftmudança feita no console fora do código: precisa voltar para o escrito.
Pendente de applycódigo mudou, realidade ainda não: aplicar para convergir.
Divergência duplacódigo e realidade mudaram por caminhos diferentes: conflito a resolver.
O que o código declara
O drift é a mudança no console que o código não sabe. A imutabilidade mata o drift na raiz: nunca conserta no lugar, recria a partir do escrito. Gado, não bicho de estimação.

A maturidade do IaC, e o que vem depois do Terraform

IaC amadurece em degraus. No começo é um Terraform rodado da máquina de alguém, com o state num arquivo local que vive por um fio. No meio é state remoto, módulos e o plan no pull request. No topo é o pipeline aplicando com política de segurança embutida, drift detectado sozinho e infraestrutura imutável por padrão. O mercado também se mexeu: quando o Terraform mudou de licença, nasceu o OpenTofu, um fork aberto sob a Linux Foundation, e boa parte da comunidade migrou, um lembrete de que depender de uma ferramenta é também depender da licença dela.

O IaC não vive sozinho; ele é a base sobre a qual GitOps, Policy as Code e a plataforma inteira se apoiam. O código de infraestrutura é o que o GitOps reconcilia, é onde a política do Policy as Code é verificada, é o que o golden path da plataforma entrega pronto. Escrever a infraestrutura na tábua não é um fim; é a fundação escrita que torna possível tudo o que vem por cima. Sem o que está escrito, não há o que reconciliar, o que verificar nem o que pavimentar.

Figura 5Maturidade de infraestrutura como código
  1. 0ClickOpstudo no console, nada escrito, nada reproduzível
  2. 1LocalTerraform da máquina de alguém, state num arquivo frágil
  3. 2Remotostate remoto com trava, módulos, plan no pull request
  4. 3No pipelineapply automatizado, drift detectado, segredo fora do state
  5. 4Com políticaPolicy as Code no plan, imutabilidade por padrão
  6. 5Base vivaIaC sustenta GitOps, plataforma e recuperação por reaplicar
O salto crítico é do 1 para o 2: tirar o state da máquina de alguém. Do 4 em diante o IaC deixa de ser ferramenta isolada e vira a fundação sobre a qual GitOps, política e plataforma se apoiam.

Para levar

Infraestrutura como código escreve a infra na tábua para que o que está escrito se cumpra igual toda vez, em qualquer conta, por qualquer pessoa. O modelo declarativo e idempotente, com o rito de plan e apply, dá segurança à mudança; o state remoto com trava e os módulos com Terragrunt dão escala; a detecção de drift e a infraestrutura imutável, gado e não bicho de estimação, matam a divergência na raiz. A IA gera o módulo, traduz o plan e reconcilia o drift. Mas aprovar um apply que destrói um recurso com estado continua sendo decisão de quem leu o plan e responde pelo ambiente.

Tags

  • #julianovincedecampos
  • #InfraComoCódigo
  • #Terraform
  • #Terragrunt
  • #CloudEPlataforma
  • #IaC
  • #Nuvem

Onde eu estudei, me certifiquei e trabalhei

  • University of Cambridge
  • PUC Minas
  • PUC-RS
  • PUC Goiás
  • Pontificia Universidad Católica del Perú
  • Amazon Web Services
  • Google
  • IBM
  • Oracle
  • COBIT 5 Foundation
  • ITIL v3 Foundation
  • Exemplar Global
  • Red Team Leaders
  • Infosec
  • Salesforce
  • Flowgrammers
  • ISO/IEC 27001
  • NIST Cybersecurity Framework
  • Compass UOL
  • Luby
  • Creditas
  • PicPay
  • PagoNxt, Santander
  • Mercado Pago
  • Itaú Unibanco
  • Foursys
  • Soluti Certificação Digital