Infraestrutura como Código

Infraestrutura como Código

Infraestrutura como Código

Como o próprio nome diz, é a prática de tratar sua infraestrutura como sendo código da mesma forma como se desenvolve software.

Antigamente todo o gerenciamento de Infraestrutura era um trabalho muito difícil, todos os Administradores de Sistemas tinham que configurar e gerenciar manualmente todo o hardware e software que uma determinada aplicação precisava para rodar.

Quando alguma pessoa necessitava de algum servidor, normalmente uma solicitação do time de desenvolvimento, era necessário seguir o processo da empresa para conseguir este servidor pronto. Normalmente este processo era abrir um ticket no sistema para o time de operações e esperar que alguém realizasse a tarefa. Estas tarefas poderiam demorar dias ou até semanas para serem concluídas, e de novo, normalmente todos os processos era refeitos de forma manual ou atrávés de algum script que somente resolvia uma parte do problema.

Scripts foram utilizados em grande escala por empresas para terem algum tipo de automação naquele tempo, bem antes de existir a palavra DevOps ou de fato falarmos em automação de Infraestrutura.

Estes scripts provavelmente não haviam documentação de quais funcionalidades ou quais problemas poderiam ser resolvidos por ele e muito menos eram versionados corretamente por um Sistema de versionamento de código, terminando assim em uma grande coletânea de scripts versionados de forma também manual e com o decorrer do tempo, ninguém mais sabia de fato qual o propósito inicial daquele script existir.

Porém com o surgimento nos últimos anos cada vez maior do uso de Cloud Computing, seja privada ou pública, muitos destes processos manuais tiveram que ser revistos.

O surgimento de Infraestrutura como código se originou com o processo de Desenvolvedores (developers) e Operações (Operations) trabalharem juntos com a proposta inicial em 2009 escrita por Patrick Debois após ter assistido uma palestra no evento chamado Velocity onde foi apresentado uma palestra com o título "10+ Deployes Per Day: Dev and Ops Cooperation at Flickr", onde contavam todos os resultados e também os desafios quando equipes (Desenvolvedores e Operações) começaram a trabalhar juntas e não mais isoladas.

Importância da Infraestrutura como Código

Nos últimos vimos uma grande revolução de como estamos tratamos Infraestrutura, com vários processos bem definidos e ferramentas surgindo para resolver tipos de problemas diferentes e a Infraestrutura moderna não comporta mais trabalhar de forma manual, portanto entregar Infraestrutura manualmente não serve mais.

Hoje com o desenvolvimento cada vez mais rápido de aplicações, seja por frameworks bem estabelecidos, ou ferramentas que auxiliam e ajudam o desenvolvimento, como Docker, temos novos desafios, por exemplo:

  • Profissionais de Operações devem mudar a cabeça que existem formas ágeis de entregar Infraestrutura e esquecer processos manuais e repetitivos.
  • Profissionais de Operações devem conhecer um pouco sobre programação.
  • Profissionais de Operações devem conhecer um sistema de controle de versão, como Git.

Uma vez estabelecido essa mudança na cabeça nos profissionais de Operação, novos horizontes acabam se abrindo, por exemplo:

  • Desenvolver Infraestrutura em código e não mais scripts.
  • Criar códigos que sejam reutilizáveis.
  • Repetir quantas vezes necessárias este código e sempre ter o mesmo resultado (idempotência).
  • Tratar seu código como qualquer software, ou seja, Pull/Merge Requests, Tags, Branchs tem que fazer parte do seu dia-a-dia.

Com esta nova forma de tratar Infraestrutura definida, temos várias vantagens, como:

  • Mostrar que alterações na Infraestrutura são seguras.
  • Implementar mudanças incrementais (criar ou também destruir), ou seja, o que já foi executado e está em funcionamento não será alterado, apenas a parte que deseja modificar.
  • É possível mostrar, uma vez que tudo é código, para outros times que determinada alteração não afetará o projeto.
  • Times de Segurança da Informação podem validar qualquer tipo de mudança de forma muito mais ágil.
  • Temos histórico de todas modificações ocorridas, pois com controle de versão (Git) tudo fica gravado e quem fez determinada alteração.
  • Podemos lançar diferentes versões da Infraestrutura e testar o comportamento desta mudança.
  • Temos ambientes sempre iguais (ou sempre o mais próximo) da produção.