Infraestrutura como código (IaC) é o gerenciamento e provisionamento de infraestrutura por meio de código em vez de processos manuais. E vem crescendo em popularidade.
Com IaC são criados arquivos de configuração que contêm as especificações de infraestrutura, o que facilita a edição e distribuição das configurações. IaC também garante que sempre o mesmo ambiente seja provisionado.
Ao codificar e documentar as especificações de configuração, IaC auxilia no gerenciamento de configuração e ajuda a evitar alterações de configuração não documentadas e ad-hoc.
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.
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.
Benefícios da IAC
A infraestrutura de provisionamento tem sido historicamente um processo manual demorado e caro. Agora, o gerenciamento de infraestrutura mudou do hardware físico em data centers, embora isso ainda possa ser um componente para sua organização, para virtualização, contêineres e computação em nuvem.
Com a computação em nuvem, o número de componentes de infraestrutura cresceu, mais aplicativos estão sendo lançados em produção diariamente e a infraestrutura precisa ser ativada, dimensionada e desativada com frequência. Sem uma prática de IaC, fica cada vez mais difícil gerenciar a escala da infraestrutura atual.
IaC pode ajudar uma empresa a gerenciar as necessidades de infraestrutura de TI, ao mesmo tempo em que melhora a consistência e reduz os erros e a configuração manual. Principais benefícios:
- Redução de custos
- Aumento na velocidade de implantações
- Redução de erros
- Melhora na consistência da infraestrutura
- Redução (ou mesmo eliminação) do desvio de configuração
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
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.
David Matos
Referências:
Link 1 – What is Infrastructure as Code (IaC)?