Infraestrutura como código (IaC) é um processo que automatiza o provisionamento e o gerenciamento de recursos em nuvem. O software IaC utiliza alguns scripts de entrada que descrevem o estado desejado e depois se comunica com o(s) fornecedor(es) de nuvem, normalmente por meio de API, para fazer com que a realidade corresponda ao estado desejado.
Este artigo abordará os aspectos importantes da IaC, começando por como ela surgiu (ou seja, quais problemas ela resolveu), seguido por seus benefícios e, finalmente, como integrar a IaC à sua organização.
Era uma vez, quando uma empresa queria rodar software, sua única opção era solicitar algum equipamento físico e acesso à Internet de um provedor de rede. Eram centros de dados no local, onde as empresas tinham que encomendar servidores e equipamentos de rede com semanas ou até meses de antecedência com base no tráfego previsto e depois provisioná-los manualmente no local. Isso exigia um local físico com sistemas de refrigeração e inúmeras horas para realizar instalações e operações de manutenção.
Mas então surgiu um centro de dados público que poderia gerenciar os servidores de outras empresas.
Operar centro de dados tornou-se um negócio viável por si só, com grandes vantagens para os clientes:
O advento da virtualização trouxe ainda outra evolução: a nuvem. Numa nuvem pública (ou privada), o equipamento físico está localizado no centro de dados do fornecedor da nuvem, o que ainda requer manuseio manual. Os servidores virtuais tornaram-se disponíveis para as empresas através de interfaces web, permitindo-lhes provisionar servidores e outros recursos em questão de segundos (ou minutos para os maiores recursos). Nesta fase, embora a virtualização permitisse um provisionamento muito rápido, a maioria das operações ainda era manual.
Um desenvolvimento final veio com o advento dos conceitos e ferramentas da IaC. Depois que a nuvem ficou acessível por meio de uma API, o provisionamento e o gerenciamento de recursos puderam ser feitos por scripts e ferramentas automatizadas, e não por humanos. Portanto, agora, uma vez instalado e conectado o equipamento físico (operações ainda manuais), todo o resto pode ser automatizado, incluindo o provisionamento de todos os recursos de hardware virtual.
A capacidade de acessar programaticamente a nuvem pública permitiu o surgimento da IaC. Antes do advento do IaC, os engenheiros de sistema tinham que passar manualmente pelas interfaces da web para provisionar e configurar recursos. Com o IaC, o provisionamento e a configuração dos recursos são descritos em scripts, que são lidos por ferramentas que se comunicam com a API da nuvem pública para garantir que a realidade corresponda ao estado desejado.
Conforme mencionado acima, as ferramentas IaC usam entradas de scripts; esses scripts são escritos por humanos e descrevem um estado desejado para determinados recursos da nuvem. As ferramentas se comunicam com o fornecedor de nuvem por meio de sua API para criar, atualizar ou excluir recursos para que a realidade corresponda ao estado desejado descrito nos scripts de entrada. Comparado ao provisionamento e configuração manuais, o IaC oferece uma única fonte de verdade (os scripts de entrada), eliminando assim a maior parte dos erros humanos.
A execução de um script IaC é uma operação repetível, que sempre produzirá exatamente o mesmo resultado. Isso pode ajudar de várias maneiras, por exemplo:
Os scripts IaC podem ser salvos em um repositório git, fornecendo um histórico da sua infraestrutura. Como um bônus adicional, como os scripts são apenas texto, é possível comparar versões para ver o que foi adicionado, alterado ou removido.
Outro benefício é que o IaC permite que um administrador de sistema júnior ou pessoa não técnica crie uma carga de trabalho inteira sem conhecimento técnico. Se você configurar sua conta na nuvem corretamente, poderá até mesmo permitir que um usuário com permissões limitadas crie tal carga de trabalho por meio de ferramentas IaC, mesmo que o usuário não tenha direitos para criar os recursos diretamente. Você também pode aproveitar ferramentas e modelos adicionais para garantir que as políticas de segurança sejam implementadas mais cedo para limitar a chance de vazamentos de segurança e configurações incorretas por quem instancia a pilha IaC.
Além da repetibilidade exata, uma das melhores vantagens do IaC sobre as operações manuais é que ele é escalonável. Na verdade, você só precisa escrever os scripts IaC uma vez, e as cargas de trabalho podem ser instanciadas quantas vezes você quiser, quase instantaneamente. Por fim, ao dedicar mais tempo para criar as permissões corretas em seus scripts IaC, a desvantagem típica do trabalho manual que concede muitas permissões a funções e recursos pode ser evitada.
Normalmente, você desejaria automatizar algumas operações que está executando manualmente. Portanto, a primeira etapa é documentar as etapas manuais necessárias para construir a infraestrutura necessária para sua carga de trabalho. Estas são as etapas que você automatizará por meio do IaC.
Você então precisa escolher um software IaC. Esta não deve ser uma escolha difícil, pois existem apenas alguns, e todos os três principais provedores de nuvem têm os seus próprios: Amazon Web Services oferece CloudFormation, Microsoft Azure oferece Azure Resource Manager e Google Cloud Platform oferece Google Cloud implantação Manager. A opção independente de fornecedor mais conhecida é o Terraform, que não apenas oferece suporte aos três fornecedores de nuvem mencionados acima, mas a muitos mais.
Em seguida, você precisará escrever alguns scripts para a ferramenta IaC de sua escolha para reproduzir as etapas manuais documentadas. Geralmente é uma boa ideia testá-los à medida que avança. Em outras palavras: escreva um pouco de código IaC, implante-o, teste-o e, quando estiver satisfeito com a boa aparência, passe para o próximo trecho de código. Se você escrever tudo de uma vez, poderão surgir falhas graves em seu código que você só descobrirá depois de muitas horas de trabalho, o que significa que talvez seja necessário reescrever uma parte significativa de seus scripts.
Além disso, o tema Shift Left continua em tendência. Basicamente, isso significa que você começa a testar o mais cedo possível e se concentra na prevenção de problemas (em vez de detectá-los e resolvê-los depois que ocorrem). A ideia é que a qualidade geral e a segurança melhorem como resultado.
Idealmente, esta Mudança para a Esquerda deveria aproveitar a automação tanto quanto possível. Na verdade, existem várias ferramentas disponíveis para automatizar certos aspectos da escrita de scripts IaC, como segurança e Conformidade. Essas ferramentas verificariam o código antes de qualquer implantação para reduzir a incidência de problemas como configurações incorretas, configurações excessivamente permissivas e vulnerabilidade conhecida. Alguns casos de uso relacionados a isso estão disponíveis aqui para sua leitura.
Para usar o IaC corretamente, a pessoa que escreve os scripts do IaC deve ter um conhecimento profundo da plataforma de nuvem que está sendo usada. Portanto, é aconselhável garantir que as partes mais críticas do seu trabalho de IaC sejam realizadas por engenheiros seniores de DevOps.
Geralmente é uma boa ideia ter uma equipe de engenheiros seniores de DevOps (ou pelo menos um) encarregado de liderar seu esforço de IaC. Essa equipe será capaz de se concentrar nas melhores práticas e na segurança e, assim, fornecer um modelo a ser seguido por mais engenheiros juniores. Ele também será capaz de escrever módulos genéricos que podem ser reutilizados em scripts IaC em sua organização, fornecendo blocos de construção pré-avaliados e prontamente disponíveis para engenheiros mais juniores.
Se a segurança rigorosa for importante, provavelmente esta equipe também poderá ser responsável por examinar módulos e softwares disponíveis publicamente. É muito fácil encontrar alguns módulos IaC online; O Terraform ainda possui um repositório oficial deles. No entanto, esses módulos disponíveis publicamente podem não estar em conformidade com os padrões de segurança aplicados na sua organização ou projeto. Portanto, é importante garantir que apenas módulos avaliados sejam usados pela sua equipe IaC.
Além disso, seria uma boa ideia que sua equipe de SecOps trabalhasse junto com sua equipe de DevOps. Essa cooperação permitirá que os processos DevOps sejam otimizados em termos de segurança no início do projeto. Erros detectados após uma implantação de produção podem custar muito caro, especialmente em termos de relacionamento com o cliente. Garantir alta qualidade no início do processo contribuirá muito para evitar tal desastre.
Embora seja um desenvolvimento bastante recente, a IaC deve hoje em dia ser parte integrante da estratégia de provisionamento de qualquer organização que necessite de recursos em nuvem e deve, no mínimo, ser avaliada para inclusão nas suas equipas. Qualquer que seja o tamanho da sua organização, você provavelmente deseja que a IaC gerencie pelo menos parte de suas cargas de trabalho.