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.

Iac
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.

azure-resource-manager

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.