Olá pessoal, seja muito bem-vindo a mais uma sessão aqui do nosso curso sobre infraestrutura como código e nessa sessão nós falaremos sobre testes automatizados. Sim, usando o Terraform nós podemos automatizar todos os nossos testes. Então agora nós não temos somente testes para a nossa aplicação, nós temos testes também para o provisionamento e configuração da nossa infraestrutura, beleza? E nós temos aqui a possibilidade de testar, de criar esses testes utilizando diversos frameworks, tá? Então, existe, por exemplo, um framework muito comum disponível na linguagem Go, muita gente utiliza esse framework, mas a ideia aqui é nós utilizarmos o próprio HCL, uma vez que nós já aprendemos essa linguagem, que nós já estamos familiarizados com a sintaxe do HCL, então nós vamos utilizar o próprio framework que o Terraform nos oferece. Eu estou aqui com a documentação aberta e nós temos aqui algumas informações sobre como utilizar esse framework do Terraform. Primeiro, nós precisamos pensar um pouquinho como os testes automatizados podem nos ajudar. Bom, parece óbvio, mas vamos falar aqui de algumas coisas, de alguns fatores, como por exemplo, compliance. Então, às vezes a sua empresa exige que todo banco de dados, por exemplo, criado lá no RDS, caso você esteja trabalhando com AWS, seja encriptado de uma forma específica. Que todo bucket, por exemplo, tenha acesso somente privado. Nós podemos ter ali regras, por exemplo, de provisionamento em determinadas regiões. Então, todas essas regras de compliance, essas policies, elas podem ser verificadas através dos testes. Então, é muito importante até mesmo, antes de começar a desenvolver, antes de começar a criar o seu projeto em terraform, fazer o levantamento de todas essas validações que devem ser feitas obrigatoriamente e já definir os testes para que o provisoramento dos seus recursos siga o compliance da empresa. Além disso, nós utilizamos os testes também, obviamente para validar que o comportamento dos nossos módulos está correto. Então, nós temos ali, às vezes, algum módulo mais complexo, onde nós utilizamos alguns meta-arguments, como, por exemplo, for each, ou como, por exemplo, count, e nós queremos entender ali se a lógica está ok, se a interpolação de string que nós estamos fazendo está correta, se nós estamos seguindo os padrões de nomenclatura para os nossos recursos, enfim, são vários cenários e os testes garantem, claro, que nós vamos provisionar os nossos recursos de acordo com aquilo que é especificado, de acordo com aquilo que nós desejamos e garantem também que as alterações que nós fizemos no nosso projeto não vão causar nenhum problema na nossa infraestrutura. não vão causar nenhum problema na nossa infraestrutura. Aqui na documentação, nós temos uma comparação entre testes de integração e testes unitários, porque utilizando Terraforma nós podemos testar mais essa abordagem de integração e testar também utilizando uma abordagem unitária. Com o teste de integração, os recursos são provisionados de fato na nossa infraestrutura. É claro que nós podemos escrever as nossas variáveis para nós temos variáveis específicas para testes onde nós vamos ter o nome dos nossos recursos diferente dos recursos de fato que serão criados para desenvolvimento produção nós vamos colocar nomes ali que dizem respeito aos testes de integração vamos sobre escrever alguns parâmetros por exemplo ao invés de criar de uma infraestrutura com 10 marcas virtuais nós vamos criar simplesmente com uma para fazer somente aquele teste tal e veja nós queremos aquele alto esquema em grupo com 10 máquinas nós vamos criar ali com uma máquina por exemplo tá então nós temos essa flexibilidade de sobre escrever asver as variáveis. Dessa forma, nós garantimos que a nossa infraestrutura vai subir, porém com alguns recursos a menos, com um capacity menor, para que a gente valide o que está acontecendo naquela infraestrutura. Então, nós podemos escrever condições e verificações que serão feitas consultando a própria infraestrutura. Isso no cenário de teste de integração. E quando esses testes de integração são finalizados, toda aquela infraestrutura criada para os testes, ela será destruída automaticamente pelo Terraform, tá? Por outro lado, nós podemos também escrever testes unitários, onde a infraestrutura não é criada, porém o Terraform vai rodar o Terraform em pleno e ele vai ali ter o estado desejado daquela infraestrutura após a execução do Apply. Mas todas as verificações que nós fazemos, elas acontecem verificando o estado que nós teremos após rodar o Terraform Plan. Então, Terraform Plan, temos ali um novo estado desejado e nós fazemos a verificação comparando os valores desse estado desejado, gerado pelo Terraform Play. Beleza? Claro que à medida que nós desenvolvemos os nossos testes, todos esses conceitos ficarão muito mais claros. Existe também outro nível de testes que nós faremos, que serão os testes em 2nd. Para isso é um pouquinho diferente, nós não utilizamos necessariamente esse framework do Terraform, mas nós vamos utilizar a linguagem HCL. Nós vamos trabalhar com checks, inclusive nós temos aqui os checks que acontecem após o deployment, após o apply da nossa infraestrutura, das nossas alterações, e aí esses checks validam se aquilo que foi implantado em produção mesmo, no nosso ambiente de desenvolvimento, está atendendo alguns requisitos. Então, isso acontece logo após o deploy, e no nosso caso, idealmente, ele vai verificar o deployment em produção ou em desenvolvimento, caso a gente queira rodar os testes de end-to-end em desenvolvimento. Mas o teste end-to-end valida de fato aquilo que foi implantado, aquilo que está rodando em produção. Beleza? Novamente, veremos em mais detalhes à medida que nós desenvolvemos e que nós criamos alguns exemplos aqui. Eu espero que você esteja animado. Vejo você na nossa próxima aula.