A Infrastructure as code (IaC) vai muito além de utilizar linguagem de alto nível (descritiva) nas configurações e automações para provisionar a infraestrutura em seu ambiente corporativo. Trata-se de habilitar a escala, load balance, disponibilidade e performance exigidas por aplicações modernas.
É um ótimo approach no processo DevOps, envolvendo melhorias nas práticas de CI (Continuous Integration): versionamento de código-fonte, provisionamento rápido e seguro de ambientes, uso de Docker, Cloud Computing, processo de deployment e infraestrutura de rede.
Fonte: Sam Guckenheimer
Entre as principais ferramentas que podem contribuir no IaC:
- Azure Resource Manager: controle sobre múltiplos deploys de aplicações, gerenciando os recursos utilizados e acessos.
- AWS CloudFormation: ferramenta com linguagem comum para provisionar recursos de infra em cloud e automatizar deploys.
- Chef: permite criar “receitas” em Ruby (DSL), definindo os passos a serem executados para atingir a configuração desejada no servidor. Pode trabalhar com Azure, AWS ou Google Cloud Platform.
- Puppet: outra ferramenta de gerenciamento de configuração que permite trabalhar com DSL. É mais direcionada a Sysadmins.
- Ansible: ferramenta criada pela Red Hat, que modela sua infra gerenciando a relação entre os componentes. Não utiliza agentes.
Veja então como funciona o Azure Resource Manager, trabalhando a implantação, atualização ou exclusão dos recursos da sua solução (por exemplo, servidor de aplicação, BD e UI) como um grupo. Há uma camada de gerenciamento que permite realizar as tarefas utilizando o Azure PowerShell, CLI, Portal Azure, API REST e SDKs.
As ferramentas interagem com o Azure Resource Manager via API, que controla o acesso e autoriza as solicitações para o Resource Provider Contract.
Por fim, vale relembrar algumas práticas recomendadas por Martin Fowler:
- Utilizar arquivos de definição (shell scripts ou Chef receipts, por exemplo) para evitar mudanças manuais em servidores.
- Auto-documentar sistemas e processos ao invés de instruções.
- Versionamento de tudo (que for possível) para manter rastreamento e controle.
- Continuously test systems and processes ajudam a encontrar erros rapidamente.
- Frequência reduz a complexidade – quanto maior o tamanho do update na infraestrutura, mais difícil será detectar o erro, se houver.
- Manter serviços continuamente disponíveis, com melhorias para evitar downtimes. Técnicas como BlueGreenDeployment podem auxiliar nas atualizações com disponibilidade.
IaC habilita inúmeros benefícios na equipe, e inicia a jornada Everything as code
LikeLike