Pular para o conteúdo principal

Conceitointermediário

Infraestrutura como Código

Visão Geral

Infraestrutura como código é declarar o ambiente desejado em arquivos versionados, e deixar uma ferramenta convergir a realidade para essa declaração.

O ganho não é automação — é reprodutibilidade: o ambiente pode ser recriado do zero, igual, quantas vezes for preciso.

E, com ela, vêm revisão, histórico, e a capacidade de responder "por que isto está assim?" consultando o repositório em vez de perguntar a alguém.

Problema

Infraestrutura criada pelo console é rápida e produz um ambiente que ninguém sabe reconstruir.

O sintoma aparece tarde:

"por que esta regra existe?" ninguém sabe
"conseguimos recriar isto?" talvez
"produção e homologação são iguais?" não
"o que mudou ontem?" não há registro

Ver IaaS. O problema não é a criação inicial — é tudo o que vem depois.

Conceitos Centrais

Declarativo, não imperativo

imperativo "crie uma instância, depois configure a rede, depois..."
declarativo "o ambiente deve ter isto; convirja para lá"

A diferença prática: o declarativo é idempotente — aplicar duas vezes produz o mesmo resultado — e permite calcular a diferença entre o desejado e o real antes de agir.

Ver Kubernetes, que aplica o mesmo princípio a contêineres.

Isso muda a operação: em vez de executar passos, altera-se a declaração e revisa-se o plano de convergência antes de aplicá-lo.

Desvio de configuração é o inimigo

Alguém altera algo pelo console — durante um incidente, para testar, por conveniência. A realidade passa a divergir da declaração.

As consequências:

a próxima aplicação desfaz a alteração quebrando o que dependia dela
ou a ferramenta erra porque o estado real não é o esperado
o ambiente deixa de ser reproduzível

O que sustenta a ausência de desvio:

Detecção contínua. Comparar o real com o declarado periodicamente e alertar.

Acesso restrito. Alteração manual em produção exige permissão elevada e temporária. Ver menor privilégio.

Caminho fácil. Se alterar pela declaração leva 40 minutos e pelo console leva 2, as pessoas vão pelo console. O atrito é o que produz o desvio.

A terceira é a que decide. Times que tornam a declaração o caminho mais rápido não precisam proibir o outro.

O estado é um artefato crítico

A ferramenta mantém um registro do que ela criou — o estado. Perdê-lo significa que ela não sabe mais o que gerencia.

armazenamento remoto nunca local, nunca no repositório
versionado para recuperar de corrupção
bloqueado duas aplicações simultâneas corrompem
cifrado ele contém identificadores e, às vezes, segredos

O último ponto merece atenção: valores sensíveis que passam pela declaração acabam no estado, em texto legível. Ver segredos.

Modularizar, com moderação

A tentação de abstrair tudo em módulos genéricos produz camadas onde é difícil saber o que é criado de fato.

bom módulo para o que se repete — um serviço padrão, uma rede padrão
ruim módulo genérico com trinta parâmetros para servir a todos os casos

O critério: um módulo deve remover repetição real, não antecipar variação hipotética.

E módulos precisam ser versionados: um módulo compartilhado alterado sem versão muda o comportamento de todos os ambientes que o usam, simultaneamente. Ver redundância — é o mesmo problema de correlação.

Aplicar em produção é implantação

A declaração de infraestrutura merece o mesmo tratamento que código de aplicação:

revisão outra pessoa olha
plano visível o que vai mudar, antes de mudar
ambientes em ordem teste, homologação, produção
gradual zona a zona, não tudo de uma vez
reversível a declaração anterior está no histórico

A quarta linha é frequentemente ignorada, e é onde ocorrem os incidentes mais amplos: uma mudança de infraestrutura aplicada simultaneamente a todas as zonas remove a proteção que a redundância deveria dar.

Nem tudo cabe

Alguns recursos não se declaram bem:

dados migrações são outro problema
segredos gerenciador dedicado, referenciado
recursos de vida curta criados e destruídos por aplicação
configuração de aplicação variáveis e flags, não infraestrutura

Misturar dados ou segredos na declaração é a origem de vazamentos e de operações destrutivas acidentais — uma remoção de recurso que apaga um banco junto.

Proteções contra exclusão em recursos com estado não são detalhe, são obrigatórias.

Modelo Mental

A declaração é a verdade; o ambiente é a consequência. Desvio é a distância entre as duas, e ela precisa ser medida.

Quando Usar

  • Praticamente sempre, para infraestrutura de nuvem.
  • Onde ambientes precisam ser equivalentes.
  • Onde a recriação precisa ser possível.
  • Onde há auditoria sobre mudanças de infraestrutura.
  • Para ambientes efêmeros. Ver gestão de ambientes.

Quando Não Usar

Misturando dados ou segredos na declaração.

Sem detecção de desvio.

Com módulos genéricos que escondem o que é criado.

Sem versionar módulos compartilhados.

Aplicando em todas as zonas de uma vez.

Sem proteção contra exclusão em recursos com estado.

Para um único servidor que ninguém vai recriar — o custo não se paga.

Alternativas

  • Ferramentas de configuração de servidor — para o que roda dentro da máquina, em vez de os recursos de nuvem.
  • Imagens pré-construídas — o ambiente vem pronto na imagem, e a infraestrutura só a instancia. Ver contêineres na entrega.
  • Interfaces de plataforma — o desenvolvedor declara a intenção e a plataforma traduz. Ver plataformas internas.

A última é a evolução natural em organizações grandes: nem todo time precisa escrever infraestrutura.

Trade-offs

DeclaradoManual
ReproduzívelNão
Histórico e revisãoNenhum
Mudança mais lentaImediata
Curva de aprendizadoConsole familiar
Desvio detectávelInvisível
MódulosDeclaração direta
Sem repetiçãoExplícita
Abstração a entenderDireto
Mudança propagaIsolada

Modos de Falha

Desvio acumulado. A declaração já não descreve a realidade.

Estado perdido ou corrompido.

Aplicação simultânea. Duas execuções corrompem o estado.

Exclusão acidental. Um recurso com dados removido pela convergência.

Segredo no estado.

Módulo alterado sem versão. Todos os ambientes mudam juntos.

Aplicação em todas as zonas. A redundância não protege.

Erros Comuns

Não detectar desvio.

Estado local ou no repositório.

Não bloquear execuções concorrentes.

Não proteger recursos com estado contra exclusão.

Módulos genéricos demais.

Tornar a declaração mais lenta que o console, o que garante o desvio.

Exemplo Real

Uma empresa de logística migrou a infraestrutura para declaração ao longo de um ano. Ao fim, 90% dos recursos estavam declarados.

Um incidente revelou o que os outros 10% significavam.

Uma aplicação da declaração, em produção, removeu uma regra de rede que não estava declarada — criada manualmente durante um incidente, oito meses antes, e nunca incorporada.

A regra permitia o acesso de um parceiro. A integração parou por 5 horas, e o diagnóstico foi lento porque ninguém sabia que a regra existia.

A investigação encontrou 34 recursos criados manualmente, nenhum documentado.

As mudanças:

Detecção de desvio diária, com relatório do que existe e não está declarado, e do que está declarado e diverge. A primeira execução produziu a lista dos 34.

Acesso ao console restrito em produção, com elevação temporária e justificativa. Ver menor privilégio.

Caminho rápido. A queixa das pessoas era legítima: aplicar uma mudança declarada levava 25 minutos entre revisão, plano e aplicação. A esteira foi otimizada para 4 minutos, e o desvio praticamente parou — não por proibição, por conveniência.

Proteção contra exclusão em bancos, armazenamentos e recursos com estado. Uma tentativa de removê-los pela convergência falha e exige remoção explícita da proteção.

Aplicação por zona, com observação entre elas. Uma mudança de rede aplicada a uma zona não derruba as três.

Módulos versionados, encerrando a prática de alterar o módulo compartilhado e ver a mudança propagar para todos os ambientes na próxima aplicação.

O que a equipe registra: a proibição de usar o console tinha sido tentada antes e falhado. O que funcionou foi tornar o caminho declarado mais rápido — o desvio era sintoma de atrito, não de indisciplina.

Conceitos Relacionados

Exercício Prático

Compare o que existe na sua conta de nuvem com o que está declarado.

Os recursos que aparecem só na primeira lista são o seu desvio — e cada um é uma surpresa esperando a próxima aplicação.

Perguntas de Entrevista

  • Por que declarativo permite calcular a diferença antes de agir?
  • Por que desvio é sintoma de atrito e não de indisciplina?
  • Por que aplicar a todas as zonas de uma vez anula a redundância?

Para Aprofundar

  • Morris, Kief. Infrastructure as Code. 2ª ed. O'Reilly, 2020.
  • Humble, Jez; Farley, David. Continuous Delivery. Addison-Wesley, 2010.
  • Burgess, Mark. Promise Theory — a base do modelo declarativo.
Terminou de ler este documento?Seu progresso fica salvo apenas neste navegador.