Infraestrutura como Código ou “Infrastructure as Code”
Tags: devops, iac, cloud, terraform
Published: 2023-01-22 15:04:45

 Vamos começar com uma definição de "Iac".
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.
O controle de versão é uma parte importante em IaC e os arquivos de configuração devem estar sob controle de versionamento como qualquer outro arquivo de código-fonte de software. A implantação da infraestrutura como código também significa que você pode dividir sua infraestrutura em componentes modulares que podem ser combinados de diferentes maneiras por meio de automação.
Automatizar o provisionamento de infraestrutura com IaC significa que os desenvolvedores não precisam provisionar e gerenciar manualmente servidores, sistemas operacionais, armazenamento e outros componentes de infraestrutura sempre que desenvolverem ou implantarem um aplicativo. A codificação da infraestrutura fornece um modelo a ser seguido para provisionamento e, embora isso ainda possa ser feito manualmente, uma ferramenta de automação pode tornar o trabalho mais simples e rápido.

Vantagens
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 disponíveis 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, dá-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 disponíveis, 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;
Por Que IaC é Importante em DevOps?
IaC é uma parte importante da implementação de práticas de DevOps, MLOps, DataOps e integração contínua/entrega contínua (CI/CD). IaC reduz a maior parte do trabalho de provisionamento pois permite executar um script e ter a infraestrutura pronta para funcionar.
Dessa forma, as implantações de aplicativos não ficam esperando pela infraestrutura e os administradores de sistema não estão gerenciando processos manuais demorados.
CI/CD depende de automação contínua e monitoramento contínuo em todo o ciclo de vida do aplicativo, desde a integração e teste até a entrega e implantação.
Para que um ambiente seja automatizado, ele precisa ser consistente. A automação de implantações de aplicativos não funciona quando a equipe de desenvolvimento implanta aplicativos ou configura ambientes de uma maneira e as equipes de operações implantam e configuram de outra maneira.
Alinhar as equipes de desenvolvimento e operações por meio de uma abordagem DevOps leva a menos erros, implantações manuais e inconsistências. E esse tem sido um movimento cada vez mais frequente em MLOps e DataOps, embora ainda esteja bem no começo.
IaC ajuda a alinhar o desenvolvimento e as operações porque ambas as equipes podem usar a mesma descrição da implantação do aplicativo, dando suporte a uma abordagem DevOps.
O mesmo processo de implantação deve ser usado para todos os ambientes, incluindo o ambiente de produção. IaC gera o mesmo ambiente toda vez que é usado.
IaC também elimina a necessidade de manter ambientes de implantação individuais com configurações exclusivas que não podem ser reproduzidas automaticamente e garante que o ambiente de produção seja consistente.
As melhores práticas de DevOps também são aplicadas à infraestrutura em IaC. A infraestrutura pode passar pelo mesmo pipeline de CI/CD que um aplicativo faz durante o desenvolvimento de software, aplicando o mesmo teste e controle de versão ao código de infraestrutura.
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 híbrido, usando um gerenciamento de liberações com sistema de aprovações?
Todos esses cenários são possíveis 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 língua;
– 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 a “tentativa e erro” que é uma das maiores causas de frustração e cancelamento de uma boa idéia.
IaC Declarativa versus IaC Imperativas
Existem 2 maneiras de abordar a IaC: declarativa ou imperativa.
Uma abordagem declarativa define o estado desejado do sistema, incluindo quais recursos você precisa e quaisquer propriedades que eles devem ter. Uma abordagem declarativa também mantém uma lista do estado atual dos objetos do sistema, o que torna a desativação da infraestrutura mais simples de gerenciar.
Uma abordagem imperativa define os comandos específicos necessários para alcançar a configuração desejada e esses comandos precisam ser executados na ordem correta.
Muitas ferramentas de IaC usam uma abordagem declarativa e provisionam automaticamente a infraestrutura desejada. Se você fizer alterações no estado desejado, uma ferramenta IaC declarativa aplicará essas alterações para você. Uma ferramenta imperativa exigirá que você descubra como essas alterações devem ser aplicadas.
As ferramentas de IaC geralmente são capazes de operar em ambas as abordagens, mas tendem a preferir uma abordagem à outra.

Ferramentas IaC
As ferramentas de gerenciamento de configuração e automação geralmente podem ser usadas para IaC. Existem também soluções específicas para IaC. Estas são algumas escolhas populares:
Chef
Puppet
Red Hat Ansible Automation Platform
Saltstack
Terraform
AWS CloudFormation