Compartilhar via


ALM - DevOps - Infraestrutura como Código ou “Infrastructure as Code”

Introdução

Esse artigo tem como objetivo explicar sobre o termo Infrastructure as Code (IaC), seu uso em ALM (DevOps), estudos de caso, práticas e ferramentas disponíveis no mercado para auxiliar a entrega de aplicativos mais rápidos, com qualidade e cada vez mais aproximando o time de operações e desenvolvimento.

 

https://qualidadeeti.files.wordpress.com/2015/06/image_thumb2.png?w=644&h=364

Figura do site da Microsoft (DevOps)

O que é o IaC?

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:

https://qualidadeeti.files.wordpress.com/2015/06/image_thumb3.png?w=244&h=184

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.

Vantagens

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;

https://qualidadeeti.files.wordpress.com/2015/06/image_thumb4.png?w=244&h=210

Cenários

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?

Todos esses cenários são possiveis com o IaC.

Pontos Chaves para o Sucesso

Antes de mais nada, é importante frisar que ferramentas são um meio de se obter o que é necessário, mas antes mesmo de entrar na esfera de ferramentas, deve-se ter muito bem “mapeado” dentro de sua empresa quais são as dificuldades atuais, quais são as barreiras a serem “quebradas” quais são os objetivos a serem atingidos o como o IaC pode ajudar. Inicialmente se sugere que leia o artigo da Forrester na integra para identificar em quais pontos a sua empresa se encontra para poder trabalhar neles.

No que se tem visto ao uso do IaC nas empresas que adotaram tal conceito, foi-se:

– Melhor colaboração entre os times;

– Ganho de velocidade nas entregas (desde o desenvolvimento até a produção);

E os pontos trabalhados para se entender onde o IaC pode ajudar foi no:

– Estudo de pontos de “falha” no processo de configuração entre os times de Dev, Ops e até mesmo Dev e Testes;

– Alinhamento de quais ferramentas e códigos serão usados para a adoção do IaC, para que todos estejam “falando” a mesma lingua;

– Entender os locais de gargalo atuais na preparação e disponibilização de ambientes, e como o IaC pode ajudar (se a causa for realmente configuração);

– Ter as equipes comprometidas e alinhadas nessa nova fase de adaptação;

– Tempo e dinheiro para as equipes treinarem e se capacitarem nas tecnologias emergentes e consolidadas para serem usadas com assertividade, diminuindo-se o “tentativa e erro” que é uma das maiores causas de frustração e cancelamento de uma boa idéia.

Ferramentas e Materiais Disponíveis

Atualmente há diversas ferramentas no mercado, e aqui há algumas que estão disponiveis para serem usadas dentre as quais:

– Powershell DSC

Ferramenta disponivel nativamente no Windows Server 2012 R2 e Windows 8.1, que facilita a implementação features e configurações no Windows. Sua diferença do Powershell como conhecemos é que essa ferramenta utiliza duas simples lógicas “Present” e “Absent” ou seja, em pouco mais de 05 linhas de comando simples você determina se uma configuração, chave de registro, permissão, feature ou requisito está presente ou ausente do servidor ou computador cliente e o Powershell encarrega-se de entregar isso. E o mais legal dessa ferramenta é que você pode ter um servidor central, onde todos os demais servidores ou computadores clientes consultam esse servidor a cada 05 minutos, mantendo-se integro as configurações determinadas, mesmo que as permissões, chaves, features forem removidas incorretamente ou por falha, dando assim qualidade e garantia em seu ambiente. Como isso, você pode realizar um cenário similar ao abaixo:

https://qualidadeeti.files.wordpress.com/2015/06/image_thumb5.png?w=244&h=118

ou

https://qualidadeeti.files.wordpress.com/2015/06/image_thumb6.png?w=244&h=163

– Release Management

O Release Management é uma ferramenta parte integrante da solução de Application Lifecycle Management da Microsoft que tem como objetivo dar velocidade e qualidade na implantação de aplicativos em ambientes de testes, homologação e produção. Com o gerenciamento de lançamentos no Visual Studio, você pode configurar, aprovar e implantar seus aplicativos para qualquer ambiente. Crie orquestrações de implantação automatizadas para cada ambiente, independentemente da complexidade da configuração. A entrega de seu software com mais frequência e facilidade para um ambiente permite que seus testadores trabalhem na validação de seu sistema e mantém os participantes envolvidos em fornecer comentários.

Há diversas outras ferramentas a serem exploradas, e que está disponíveis no Portal do TechNet Wiki para conhecimento e estudos.

– Artigos sobre IaC

no Portal do TechNet Wiki há artigos sobre essa tecnologia, para saber mais vá na pesquisa e procure por termos como ALM, DevOps, IaC.

Maiores Informações e Fontes de Referência

Recursos técnicos para praticantes de DevOps

Microsoft DevOps