Guilherme: Neste vídeo, vamos entender o que é infraestrutura como código (IaC). Leonardo, o que significa essa sigla?
O que é IaC?
Leonardo: A infraestrutura como código, também chamada de IaC, é uma forma que nós temos de escrever e executar código para definir, implantar, atualizar e gerenciar a infraestrutura.
Uma característica importante do IaC é que ele pode gerenciar servidores, bancos de dados, redes, arquivos de log, configurações de aplicativos, documentação, testes automatizados, entre outras coisas, por meio de código.
Guilherme: De volta ao exemplo da Ana, ela teria total controle de todo o ambiente dela, isto é, de toda a infraestrutura necessária para controlar o ambiente em que está, tudo isso feito com código.
A Ana conseguiria definir todo o ambiente dela com código. Imaginamos que esse código terá um histórico, para saber em qual atualização estamos, qual ferramenta já foi atualizada ou não, e assim por diante. Portanto, ela conseguiria fazer o deploy, atualizar e gerenciar todos os módulos e pacotes necessários para o projeto dela.
Porém, quais ferramentas podemos utilizar para criar esse ambiente todo com código?
Quais ferramentas são utilizadas para isso?
Leonardo: Para isso, existem algumas ferramentas. Entre elas, temos o Terraform, que permite criar, alterar e melhorar a infraestrutura de forma rápida e previsível.
Temos também o Ansible, que permite automatizar a instalação e a atualização de aplicativos dentro dos nossos servidores e também gerenciar algumas configurações, além de ferramentas de entrega contínua.
Além disso, temos outras ferramentas, como Chef e Puppet, que fazem a mesma função do Ansible, e o Crossplane, que funciona dentro do Kubernetes, também para gerenciar a infraestrutura.
Gerenciamento da infraestrutura com script em bash
Guilherme: Quando falamos de infraestrutura como código, se a Ana fizesse um script em bash com Python ou Ruby para gerenciar toda a estrutura dela, isso daria certo, Leonardo?
Leonardo: Até daria certo, mas é difícil manter isso a longo prazo, porque cada vez que criamos um script desse, cada um vai escrever de um jeito diferente.
Além disso, esses scripts dependem muito do ambiente em que são executados. Então, tentar executar esse script que criamos em outra máquina, pode ser que haja alguma diferença.
Também existe a convenção do código. Não necessariamente os scripts que criamos em bash, por exemplo, estarão escritos da mesma forma. Assim, torna-se difícil dar manutenção no futuro.
Há também a questão de atualização. Se estivermos usando a AWS e ela atualizar algum comando e precisar de outros parâmetros ou algo diferente, o nosso script precisará ser atualizado também, porque ele não estará pronto para essa atualização. As ferramentas feitas para IaC, como o Terraform, por exemplo, dão suporte a essas atualizações futuras.
Por fim, temos a questão da idempotência. O que essa palavra significa? Se executarmos várias vezes o nosso código, devemos ter certeza de que terá sempre a mesma saída, mesmo executando em uma máquina em que ele já foi executado anteriormente.
Guilherme: Então a ideia seria o seguinte: se criamos um script em Python e em bash, precisamos garantir que não estamos tentando atualizar duas vezes o mesmo pacote, para manter a infraestrutura funcionando de forma correta.
Isso seria um grande problema, e pensando nesse ponto, o Terraform seria a primeira ferramenta que a Ana usaria? Isso faz sentido, Leonardo?
Leonardo: Sim, faz bastante sentido.
Guilherme: E como ele funciona?
Como o Terraform funciona?
Leonardo: O Terraform funciona da seguinte maneira: nós escrevemos um script de configuração com uma linguagem específica do Terraform, uma linguagem simples que iremos utilizar.
Esse script será interpretado pelo Terraform e ele fará a "mágica" por trás, que na verdade não é mágica, mas sim código. Portanto, com o mesmo script, conseguimos subir a nossa infraestrutura em vários provedores. Ou seja, conseguimos subir na AWS, na Azure, no Google Cloud, entre outros.
Quais são os benefícios efetivos da IaC?
Guilherme: Temos bastante informação. Porém, quais são de fato os benefícios efetivos de utilizar a IaC, Leonardo?
Leonardo: Os benefícios efetivos de utilizar a IaC são os seguintes: primeiro, com a infraestrutura como código, conseguimos fazer um processo de deploy automatizado. Ele é mais rápido, porque o computador faz essas etapas melhor do que uma pessoa, tornando o processo mais seguro e consistente.
Temos também o controle de versão. Conseguimos guardar essas atualizações que fazemos no código de forma simples. E, se houver algum problema, conseguimos voltar para uma versão anterior da infraestrutura, evitando problemas com o nosso aplicativo fora do ar.
Além disso, temos velocidade e segurança, pois está tudo definido em um arquivo, que é fácil de ler, não só hoje, mas no futuro também. Ele vai executar sempre da mesma forma e da forma mais otimizada possível.
Por fim, temos o reuso. Conseguimos copiar blocos de código e reutilizá-los para fazer outras partes da nossa infraestrutura, deixando todo o processo um pouco mais ágil.
Guilherme: Uma coisa que me chamou a atenção nesse ponto dos benefícios, é a parte do controle de versão. Teoricamente, teríamos um estado de como está a nossa infraestrutura na versão 1.
De repente, atualizamos um pacote ou fazemos algo, e a própria ferramenta (nesse caso, o Terraform) saberia o que mudou, o que foi alterado, semelhante a um Git da infraestrutura.
Leonardo: Exatamente, Guilherme. E nós geralmente guardamos esses arquivos em um Git.
Conclusão
Guilherme: Visto isso, vamos começar a criar o primeiro código para manter e gerenciar toda a nossa infraestrutura!