Infraestrutura como código (IaC) é um termo adotado na ramificação de ALM (Application Lifecycle Management) denominado DevOps e que está sendo amplamente divulgado devido a sua abordagem no quesito velocidade e principalmente qualidade na entrega de ambientes de desenvolvimento, testes e produção para atender cada vez mais rápido o mercado de tecnologia.
Resumindo, a abordagem IaC nada mais é do que a entrega de uma infraestrutura ágil, utilizando-se de codificação simples e objetiva, sem a necessidade mais de diversos passos e processos para se preparar um ambiente, sem perder o poder de controle, segurança, qualidade e disponibilidade.
A Forrester® fez um estudo intitulado Infrastructure As Code: Fueling The Fire For Faster Application Delivery em que se demonstra através de um estudo de caso com diversos profissionais o ganho do uso de IaC em seus ambientes, diminuindo-se a latência entre a disponibilização de um software do time de desenvolvimento até a entrada do mesmo em ambiente de QA e Produção. Nesse excelente estudo, um dos pontos abordados foi quais os maiores desafios para se prover e configurar uma infraestrutura. Os pontos levantados foram os abaixo:
Sendo que uma das maiores dificuldades vistas foi justamente a falta de colaboração entre os times de Operações e Desenvolvimento, seguido de falta de habilidades em fazer scripts de configuração e erros de configuração. Essas situações são extremamente comuns no dia a dia e um dos principais ofensores nas entregas de aplicativos, pois consome-se muito tempo em gerenciamento de conflitos entre times, além de retrabalhos devido a BUGS mapeados devido a configurações incorretas realizadas, gerando todo um fluxo de trabalho para os envolvidos.
Olhando-se para o cenário exposto acima, é perceptivel o quanto o conceito IaC pode ajudar a mitigar as situações acima mencionadas. Como esse conceito, torna-se muito mais fácil a gestão de um ambiente de desenvolvimento, testes e produção, local, remoto ou hibrido, On-Premise, Datacenter ou Nuvem. A vantagem do uso do IaC está na lógica do conceito de se preparar ambientes com codificações simples e seguras, utilizando-se de soluções disponiveis no mercado, facilitando a gestão do time de operações, pois com pouca gestão e tempo, consegue-se disponibilizar ambientes extremamente complexos e com qualidade para serem usados. Além disso, da-se a liberdade ao time de Desenvolvimento, através de suas ferramentas de codificação, a "subir" um ambiente localmente ou em nuvem, sem a necessidade de intervenção do time de Operações na parte de entrega do ambiente, dando mais velocidade na entrega de aplicativos, assim o time de Operações consegue focar mais no "Core" do ambiente, não tendo que se preocupar em estar atendendo solicitações de ambientes.
Outra vantagem é a assertividade do uso do IaC na entrega de ambientes no quesito configuração e pré-requisitos, pois usando-se das tecnologias disponiveis, evita-se falhas de configuração, falta de pré-requisitos, falta de chaves de registro, diretórios, permissões, etc.
– Velocidade na disponibilização de ambiente, mudando-se o tempo de entrega de ambientes e dias para horas;
– Gestão efetiva dos ambientes;
– Liberdade ao time de desenvolvimento sem perder o controle, pois é possível ainda usar de ferramentas de aprovação, se assim a empresa necessitar, dando uma gestão, controle e atendendo a legislações e práticas de modelos ISO, CMMI, entre outros;
– Integração com ferramentas de entregas de ambientes como o Microsoft Azure, System Center e Lab Management, Release Management e TFS Build Server vNext, e muitas outras;
Imagine o cenário onde-se consegue disponibilizar um ambiente de virtualização, com todos os pré-requisitos instalados e todas as configurações feitas em minutos, e sem erros?
Ou garantir que uma configuração ou feature estará instalada no servidor, mesmo que alguém a remova de lá?
Um time de testes ou desenvolvimento, através de sua própria ferramenta como Visual Studio, Lab Management, ou similar, conseguir "subir" um ambiente em minutos totalmente preparado para sua necessidade, com fácil gestão de scripts?
Um time de Operações demandar toda uma infraestrutura simplesmente usando um sistema de aprovação com o Service Manager, sem a necessidade de estar sempre tendo que formatar, criar VM, aplicar updates, ativar features, configurar permissões, etc.?
Ou ter ainda todo esse tramite de DEV, QA, Homologação e Produção em seu SaaS, ambiente Corporativo, sendo local, remoto ou hibrido, usando um gerenciamento de liberações com sistema de aprovações?