Vamos iniciar agora o módulo de automação de infraestrutura. Nesse módulo falaremos um pouquinho mais sobre infraestrutura como código, o que é, quais são os benefícios, quais são as principais ferramentas que são utilizadas no mercado. Também falaremos um pouquinho sobre GitOps, o que é, quais são os benefícios, algumas das ferramentas, os conceitos aqui de gerenciamento e de configuração. Também falaremos sobre pipeline de infraestrutura, onde teremos uma demo com o provisionamento de um ambiente, a geração de uma documentação, toda a parte de versionamento. Bom, infraestrutura como código é a capacidade de provisionar e suportar infraestrutura usando código em vez de configurações e processos manuais. Para suportar as aplicações, se faz necessário diversos componentes de infraestrutura, permitindo gerenciar ambientes através de arquivos de configurações integrados a um SCM, um Git, por exemplo, e se beneficiar de práticas como o uso de módulos para reuso de código. Existem dois tipos de abordagens quando a gente fala de IAC, a declarativa e a imperativa. A abordagem declarativa define o estado desejado do sistema, incluindo os recursos necessários, as propriedades que eles precisam ter e uma ferramenta de IAC para configurá-lo. Essa abordagem também mantém uma lista do estado atual dos objetos do sistema, simplificando o gerenciamento da desativação da infraestrutura. Por outro lado, a abordagem imperativa define os comandos específicos necessários para alcançar a configuração desejada. Depois, esses comandos precisam ser executados na ordem correta. os comandos precisam ser executados na ordem correta. Muitas das ferramentas de IAC que usam uma abordagem declarativa provisionam automaticamente a infraestrutura desejada. Se você alterar o estado desejado, uma ferramenta de IAC declarativa aplicará as alterações para você. Uma ferramenta imperativa exige que você saiba como as alterações deverão ser aplicadas. Então aqui a gente está falando de duas abordagens bem distintas. Eu particularmente gosto mais da abordagem declarativa. A abordagem hiperativa acho que fica muito mais quando a gente vai fazer algum tipo de automação mais manual, como por exemplo exemplo algum tipo de humbook beleza, a gente pode até pensando em alguns scripts de automação onde a gente consiga também executar e ter essa abordagem mais imperativa mas pensando aqui em ter uma documentação mais viva ali a gente bater o olho no código e saber exatamente em ter uma documentação mais viva ali, a gente bater o olho no código e saber exatamente que aquilo está representando o nosso ambiente de produção, a abordagem declarativa é um pouquinho melhor. E dentro dessa categoria de infraestrutura como código, a gente tem ferramentas que a gente pode citar, que são mais voltadas para provisionamento, então são ferramentas como Terraform, CloudFormation, ARM, o Google Cloud Deployment Manager, a gente também tem algumas ferramentas mais voltadas para a gestão de configuração, que a gente também vai explorar um pouquinho mais para frente, como Rensible, Puppet, Chef ou SouthStack da HatchCorp. E também ferramentas mais voltadas para a orquestração de container, como Docker e Kubernetes, que é amplamente utilizado dentro do mercado. Então, falando um pouquinho mais de ferramenta, a gente tem aí Kubernetes, que hoje é um orquestrador de containers, a gente não consegue falar de um ambiente moderno, é muito difícil a gente não estar falando aí de microserviços, e microserviços a gente precisa ter um orquestrador, né, para conseguir olhar para todos os, a complexidade ali, todo o leque de microserviços que a gente possui. A gente tem uma ferramenta chamada Helm, que é um gerenciador de pacotes para Kubernetes, então quem já mexeu com Kubernetes sabe que existem algumas complexidades, a gente trabalha com diversos kinds de arquivos, né? E quando a gente vai fazer um deployment, você muitas vezes não tem só um arquivinho declarativo, né? De deployment, você tem um arquivinho de service, você tem um arquivinho ali para você subir uma HPA, para você conseguir ter scale, você consegue muitas vezes ter a necessidade de subir algum service account, para você ter uma integração ali para a geração de credencial, e para a gente não ter que ficar subindo cada um desses arquivos de forma manual, a gente pode utilizar uma ferramenta como o Helm para empacotar todos esses arquivos e fazer o deployment como se fosse uma coisa só. A gente também tem uma ferramenta super rica e amplamente utilizada, que é o Argo. A gente tem alguns produtos dentro do Argo, o Argo CD, o Argo Rollouts, o Argo Workflow, então é uma ferramenta mais voltada para o mundo de GitOps. Uma outra ferramenta seria o Crossplane, o Crossplane é bem legal porque você consegue fazer o provisionamento de toda a sua infraestrutura utilizando manifestos de Kubernetes então a gente sobe ali um operator dentro do do nosso cluster e você consegue fazer o deployment de toda a infraestrutura utilizando o Helm por exemplo o Helm, o Argo e o Crossplane podem aí fazer e junto com o Kubernetes, ter um poder riquíssimo para a gente conseguir fazer automações dentro do nosso ambiente. Também temos ferramentas como o Chef e o Puppet, que são ferramentas mais voltadas para a gestão de configuração, então elas têm um modelinho um pouquinho diferente, ela é um pouco mais pool-based, ela fica monitorando quais são as configurações que aquele ambiente precisa ter, e com base no que a gente escreveu, ele monitora e vai fazendo enforcement para que a gente consiga ter um ambiente, vamos dizer assim, um ambiente corrente e sempre compliance com o que a gente definiu ali de desired. Algumas ferramentas também para aprovisionamento em Cloud Computing, cloud computing como o CloudFormation da AWS, o Azure Biceps ou o Azure ARM. Para o Google a gente tem o Cloud Deployment Manager. Também tem uma ferramenta mais voltada para a gestão de configuração feita pela HashCorp, que é o SaltStack. Terraform é uma ferramenta também amplamente utilizada para provisionamento em nuvem pública, então é uma ferramenta agnóstica, tem bastante suporte da comunidade. O Colume, que é uma ferramenta um pouco mais nova, é uma ferramenta enterprise, mas também é super rica e tem diversas funcionalidades. E por fim, o Ansible. A gente também tem um leque bem grande aí, você consegue utilizar ele tanto nessa parte de provisionamento de infraestrutura, quanto na parte de gestão de configuração.