Boas Práticas de Automação de Infraestrutura
Infraestrutura idempotente, versionada e auditável mantém as mudanças de produção previsíveis. Estas regras se aplicam se você usa Ansible, Pulumi, Terraform/CDKTF ou scripts boto3.
Como Usar Esta Lista
- Adote antes do primeiro apply em produção - retrofits são dolorosos após o acúmulo de drift.
- Transforme itens não verificados em tickets rastreáveis com proprietários, não exceções silenciosas.
- Revise trimestralmente conforme contas, regras de conformidade e tamanho da equipe mudam.
- Emparelhe com Testando Código de Infraestrutura para aplicação em CI.
A - Fonte da Verdade
- Armazene todas as definições de infraestrutura no git. Correções manuais no console devem ser retroportadas ou revertidas em um dia útil.
- Fixe as versões das ferramentas em lockfiles.
pulumi,cdktf,ansiblee pacotes de provedores instalam a partir de locksuv/pipem CI. - Um esquema lógico de nomenclatura de recursos. Nomes lógicos estáveis evitam substituições em motores de IaC.
- Marque cada recurso com Ambiente, Proprietário, Centro de Custo. A política de CI rejeita criações sem marcação.
- Documente o mapeamento stack-para-conta no README. Evita aplicar o stack
prodna conta AWS errada.
B - Disciplina de Planejamento e Aplicação
- Execute plan/preview em todo PR que toque na infraestrutura. Anexe a saída ao PR ou ao armazenamento de artefatos de CI.
- Bloqueie alterações destrutivas não revisadas. Exclusões em recursos com estado exigem aprovação explícita em ticket.
- Use arquivos de plano salvos para apply.
terraform apply tfplan- não um plano implícito fresco no momento da aplicação. - Separe o estado por ambiente. Sem estado compartilhado de Terraform/Pulumi entre dev e prod.
- Falhe fechando em erros de política. Falhas de pytest/OPA interrompem o pipeline - sem substituição manual sem registro de incidente.
C - Segredos e Configuração
- Nunca comite segredos em
group_vars,tfvarsou configuração do Pulumi. Use configuração criptografada ou referências a gerenciadores de segredos. - Renderize templates a partir de YAML em camadas, não de arquivos bifurcados por ambiente. Um template, apenas overlays de dados do ambiente.
- Valide a configuração com Pydantic ou testes de schema antes de renderizar. Erros de digitação devem falhar na CI, não em deploys de produção.
- Restrinja permissões de arquivos renderizados ao usuário do serviço. Modo
0600para arquivos contendo credenciais. - Rotacione segredos sem editar IDs de recursos de IaC. Atualize valores de segredos no gerenciador, re-renderize a configuração do app.
D - Idempotência e Drift
- Prefira módulos em vez de shell bruto no Ansible. Preserve o relatório
changed=0e as semânticas de convergência. - Implemente helpers
ensurepara código de cola boto3. Verifique a existência antes de criar; converja tags e configurações. - Agende trabalhos de detecção de drift. Compare atributos da AWS ao vivo com a especificação declarada; alerte sobre incompatibilidades.
- Segunda convergência do Ansible deve reportar zero alterações. Molecule ou CI provam idempotência.
- Importe recursos adotados no estado de IaC. Não deixe recursos criados no console sem rastreamento.
E - Operações e Auditoria
- Emita logs estruturados em JSON da automação. Inclua ator, stack, SHA do commit e contagens de ação.
- Use federação OIDC para roles AWS de CI. Sem
AWS_ACCESS_KEY_IDde longa duração em segredos do GitHub/GitLab. - Conta sandbox para testes de integração. Credenciais de produção nunca alimentam pipelines de PR.
- Execute
ruffepytestem pacotes Python de infraestrutura. Mesma barra de qualidade do código de aplicação. - Mantenha o acesso ao console de "break-glass" raro e registrado. Pós-incidente, reconcilie mudanças do console no git.
FAQs
Qual é a configuração mínima viável de IaC?
Repositório Git, plano em PR, estado isolado por ambiente, tags obrigatórias e segredos fora do git. Adicione Molecule/OPA conforme você amadurece.
Pequenas equipes podem pular o Terraform?
Scripts ensure Pulumi Python ou boto3 disciplinados funcionam para pequenas pegadas - ainda exigem revisão tipo plano e rastreamento de estado.
Como forçar tags?
Política pytest sobre JSON de plano, regras AWS Config ou Políticas de Controle de Serviço - defesa em profundidade supera uma verificação.
Quando uma alteração manual no console é aceitável?
Apenas em incidentes de "break-glass". Abra um ticket para importar ou reverter a alteração em IaC antes da próxima aplicação agendada.
Com que frequência devo executar a detecção de drift?
Diariamente para recursos críticos de produção, semanalmente para níveis inferiores - ajuste com base no histórico de incidentes e velocidade de mudança.
Desenvolvedores devem aplicar em produção?
Prefira promoção via CI com portões de aprovação. Aplicações diretas em produção de laptops multiplicam o risco de auditoria e erro de conta.
Como Ansible e Pulumi dividem a propriedade?
Pulumi/Terraform para primitivas de nuvem; Ansible para configuração em nível de SO em instâncias. Documente a passagem em runbooks.
O que pertence ao pytest vs OPA?
Regras simples de organização (tags, nomenclatura) em pytest para velocidade. Políticas complexas de grafo (sem regras SG públicas) em OPA no JSON de plano completo.
Como fazer rollback de infraestrutura?
Reverta o commit git e reaplique, ou restaure o snapshot de estado se o backend suportar - pratique o rollback em sandbox primeiro.
Por que logs estruturados?
Incidentes precisam de quem mudou o quê e quando. print("done") em texto plano não sobrevive à busca centralizada de logs.
Relacionados
- Fundamentos de Automação de Infraestrutura - Fundamentos de IaC
- Testando Código de Infraestrutura - Portões de CI e política
- Gerenciamento de Configuração - Configuração em camadas e segredos
- Pulumi (IaC Python) - Provisionamento nativo Python
- Provisionando Recursos na Nuvem - Configuração repetível na nuvem
Versões de Stack: Esta página foi escrita para Python 3.14.0 (stable 3.14, maintenance 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.