in

Infraestrutura como código (IaC): futuro ou realidade?

Se você já conhece ‘aplicações que funcionam em ambiente de homologação e não funcionam em produção’, leia este artigo.

A infraestrutura como código já é uma realidade em empresas de todos os tamanhos. É uma prática normalmente associada à cultura DevOps e às metodologias ágeis que, juntas, trazem uma grande vantagem competitiva em um mercado acirrado, que precisa lançar novidades a todo o momento e exigente na qualidade dos serviços.

Em essência, a IaC (Infraestructure as Code) trata-se de lidar com a infraestrutura de TI assim como é feito o desenvolvimento de software em uma aplicação, ou seja, toda a infraestrutura passa a ser criada e mantida através de códigos em arquivos que podem ser versionados. Estes códigos podem ser escritos de diversas formas, inclusive em shell script. No entanto, felizmente atualmente temos diversas ferramentas open source disponíveis que facilitam este processo, dentre elas podemos citar o Ansible, Puppet, Chef etc.. Estas ferramentas trazem diversas operações reutilizáveis, tratam idempotência das operações e permitem que com poucas linhas de código uma infraestrutura inteira seja descrita sem a necessidade de conhecimentos profundos de programação.

Quando falamos em microsserviços, a IaC é praticamente um requisito, pois normalmente temos uma grande quantidades de aplicações com tecnologias heterogêneas e que podem estar espalhadas em diversos provedores de cloud ou até híbridos de infraestrutura em cloud e on-premisses. Já pensou como seria complexo e custoso a manutenção e a administração manual destes ambientes?

A padronização de ambientes é um dos principais benefícios de se utilizar IaC, pois assim que temos a infraestrutura descrita em arquivos podemos criar ambientes locais, de desenvolvimento, de homologação e produção com os mesmos arquivos apenas trocando algumas parametrizações, isso evita os famosos cenários onde as coisas funcionam localmente, ou em ambiente de homologação e não funcionam em produção.

Infraestrutura como código (IaC): futuro ou realidade?

Infraestrutura como código (IaC): futuro ou realidade?

A agilidade na criação de ambientes é outra vantagem no uso de IaC, pois podemos criar toda uma infraestrutura com a execução de apenas “um comando”. Por exemplo, através da ferramenta Terraform podemos provisionar todo um parque de máquinas em cloud e provisionar todo seu conteúdo através do Ansible. Isto abre uma gama de possibilidades, dentre elas podemos citar a automação de ambientes temporários para execuções de tarefas pontuais, como a realização de testes e homologações de maneira ágil e eficiente, ou seja, o ambiente é criado e excluído assim que a tarefa em questão for concluída, reduzindo o uso de recursos de hardware em ambiente on-premisses ou reduzindo custos de ambientes em cloud.

Quando trabalhamos com IaC, podemos tratar a infraestrutura de maneira mutável ou imutável. A infraestrutura mutável é a que estamos mais acostumados, é aquela infraestrutura que é criada uma única vez e toda vez que precisamos alterar algo, realizamos uma mudança, seja ela automatizada ou manual. Já na infraestrutura imutável, toda vez que é necessária uma alteração, o ambiente atual é descartado e recriado com as alterações necessárias, que é o que ocorre normalmente com uso de containers Docker.

Nos cenários de infraestrutura mutável, a realização da gerência de configuração é um requisito fundamental. Através de ferramentas como Ansible AWX/Tower, Puppet ou Chef podemos garantir que todo um parque de máquinas permaneça com as configurações desejadas, evitando que qualquer tentativa de configurações manuais sejam realizadas. Mudanças somente podem ser feitas de forma centralizada e através de ‘códigos’.

Por outro lado, quando utilizamos infraestruturas imutáveis, a garantia das configurações do ambiente acaba ocorrendo naturalmente, pois, seu ciclo de vida é curto devido a reconstrução constante do ambiente, dessa forma alterações manuais são descartadas automaticamente em pouco tempo. Nestes cenários trabalhamos com a geração de artefatos a partir dos nossos códigos, muito similar a um processo de compilação de aplicações, só que aqui os nossos artefatos normalmente são imagens de máquinas virtuais ou containers que posteriormente são enviados a repositórios e utilizados em orquestradores como, por exemplo, o Kubernetes.

Assim como no desenvolvimento de software, o versionamento na IaC também é fundamental. Através dele podemos realizar o rollback de configurações, trabalhar em equipe, recriar ambientes a partir de qualquer versão, além de manter um histórico indicando quem, quando e o que fez em cada alteração. Para realizar o versionamento da IaC temos a ferramenta GIT, o qual é o SCM ( Source Code Management) distribuído mais utilizado atualmente.

Tratar infraestrutura como código também nos possibilita criar pipelines utilizando Jenkins. As pipelines permitem criar fluxos que podem garantir o funcionamento, o desempenho e a segurança da infraestrutura através de testes de roles e playbooks com o Molecule; de deploy de ambientes temporários e a execução de testes de infraestrutura com o Inspec; execução de testes de stress com o Jmeter e demais testes de segurança.

De maneira geral podemos dizer que utilizando corretamente a IaC:

  • mitigamos riscos através de realização de testes;

  • garantimos que nossas configurações estão aplicadas de maneira homogênea;

  • temos os mesmos ambientes desde a máquina do desenvolvedor até o ambiente produção;

  • utilizamos os recursos de maneira eficiente através do uso de ambientes temporários;

  • temos todo o histórico das alterações realizadas no ambiente.

Atualmente o mundo open source domina este mercado, tanto no quesito de ferramentas quanto nos software utilizados na infraestrutura. Falando de ferramentas de automação e gerência de configuração temos o Ansible que tem a Red Hat como principal contribuidor, o Terraform, Packer e o Vagrant desenvolvidos pela Hashicorp, além do Puppet e o Chef com suas próprias empresas. Apesar de muitas dessas ferramentas terem suporte a algumas tecnologias proprietárias, o seu uso é majoritariamente com Linux e seu “ecossistema” de ferramentas open source.

Para concluir, vemos que, mesmo quem ainda não “adotou” a IaC por completo, normalmente já iniciou a mudança ou pretende adotar futuramente, e que diante das inúmeras vantagens que esse modelo proporciona, em breve a infraestrutura como código será um pré-requisito para todos os ambientes.

Caso tenha interesse neste assunto e tenha vivenciado ‘ aplicações que funcionam em ambiente de homologação e não funcionam em produção’, fale com nossos consultores e conheça nossa solução baseada em software open source para você montar a sua IaC. Ou se preferir, conheça todas as nossas soluções baseadas em software open source.

Escrito por Redação SempreUpdate

Os artigos vinculados à este usuário são de terceiros. A informação aqui contida não foi elaborada originalmente por nós do SempreUpdate. Mas, publicamos conforme solicitação, envio ou recomendações do próprio autor, assessoria e outros departamentos comerciais ou não comerciais.