Então vamos criar aqui o nosso primeiro workflow no GitHub Actions. A ideia não é te mostrar como funciona o GitHub Actions, não é te dar detalhes sobre esta ferramenta, mas sim te mostrar o conceito, o conceito de como nós conseguimos executar os comandos Terraform em uma ferramenta de CICD, até porque talvez o GitHub Actions não seja a ferramenta que você esteja utilizando na sua empresa, mas você consegue levar esses conceitos e adaptar para a ferramenta que você utiliza, tá bom? Então vamos lá, aqui no GitHub, na aba Actions, nós iremos criar um novo workflow, clicando aqui em New Workflow. Beleza, vamos esperar carregar, aqui nós temos alguns templates, e nós podemos pesquisar aqui por Terraform, então vamos buscar aqui Terraform, nós temos aqui várias opções, e nós temos uma opção de provisionamento aqui, por exemplo, na AWS, um Policy Validator for AWS, mas esse aqui é específico para policies, então nós não vamos escolher esse carinha. Nós vamos trabalhar com esse daqui, Terraform by Hashfork, que é já um provisionamento mais, que é algo mais genérico, melhor dizendo, que vai funcionar para qualquer projeto terraform eu vou clicar aqui em configure e nós vamos dar uma olhada no arquivo que será aberto que é o arquivo yaml então ele já pressupõe que nós iremos criar aqui dentro de github workflows barra terraform yaml tá esse diretório que é o diretório padrão dos workflows então todos os nossos workflows precisam estar aqui dentro e que o nome nós podemos alterar, tá? Podemos, ou então podemos manter como terraform.eml que é na verdade o que eu irei fazer, tá? E ele já faz aqui o commit direto na main. Bom, nós temos aqui então uma série de detalhes, uma série de explicações aqui sobre a utilização desse workflow, dessa pipeline, mas nós vamos ignorar aqui por enquanto e vamos dar uma olhada na parte mesmo de código, na parte do emu que define esse workflow. Nós temos a trigger aqui, quando houver um push nas branches main, eu vou deixar assim por enquanto, mas depois nós podemos alterar, ou quando houver qualquer pull request. As permissões são para a leitura do conteúdo aqui do nosso repositório. E nós temos os seguintes jobs. Nós temos aqui primeiro a definição do agent, de onde roda os nossos jobs. Nós temos aqui algumas informações de full, como dizendo que o nosso shell vai ser o bash, e nós temos aqui os nossos steps, que são a parte mais importante, tá? Primeiro é o checkout, né, o default aqui, para nós obtermos o código fonte, aqui nós temos a parte de setup, então observe aqui que ele configura as credenciais aqui relativas ao Terraform, tá, quando nós estamos trabalhando com o Terraform Cloud, nós não vamos utilizar esse carinha aqui, então inclusive nós já podemos até remover. Nós temos agora aqueles comodos que nós já vimos, como por exemplo o Terraform Init. Em seguida, nós ainda não vimos isso aqui, mas nós podemos falar sobre isso brevemente nas próximas aulas, que é a parte de formatação de lint. Então nós precisamos garantir que os nossos arquivos estão formatados corretamente é muito importante para a legibilidade do nosso código e também para manter um padrão entre todos os arquivos entre todos os desenvolvedores que estão trabalhando aqui nesse projeto nós temos o play e nós temos por fim o apply então não tem muito segredo é o básico do Terraform e observe que aqui ele não está rodando nenhum comando para teste. Então, nós vamos precisar fazer estes ajustes. Nós precisamos, evidentemente, ajustar ali as nossas credenciais. Então, como nós fazemos com que o GitHub tenha permissões para acessar a nossa conta AWS, para acessar a nossa conta Azure, nós vamos trabalhar aqui com variáveis de ambiente. Então, a ideia aqui dessa aula foi dar este overview, foi criar aqui de fato a nossa pipeline. Nós podemos fazer o commit dessas alterações, tá? Não vamos alterar, mas eu vou inclusive deixar aberto aqui para a gente já ir trabalhando aqui mesmo no próprio de chave tá uma coisa que eu gostaria de fazer antes é simplesmente ajustar aqui as a estrutura de pastas do do nosso projeto nós temos aqui na raiz da pasta aws deve modos e pode gostaria de criar aqui o novo diretório vai ser o diretório environment beleza isso aqui é um padrão bastante comum, tá? Onde nós, quando nós estamos trabalhando com divisão de ambientes por módulos, nós temos aqui uma pasta de environment. E nós podemos, então, mover dev para environment, beleza? Podemos mover também prod para environment. E é claro que com isso nós precisamos ajustar aqui algumas referências. Aqui no main de dev nós temos uma referência para o nosso módulo de network, mas agora nós precisamos voltar mais um diretório. Então voltando aqui nós teremos provavelmente tudo certo. Deixa eu ajustar. Beleza. Agora nós vamos aqui também até prod arquivo main, vamos fazer o ajuste do source perfeito deixa eu garantir que eu estou logado no no Azure CLI, então eu vou dar aqui um Azure login, isso daí você precisa fazer aí aí seu lado também caso você tenha criado este módulo de história de cinco meu filho eu vou fazer aqui login beleza a tá obtendo aqui a subscript os terem vai guardar alguns segundos perfeito ele pede para nós escolhermos aqui uma subscript não só tem uma, então eu vou colocar o nome da subscription, e beleza. Agora eu vou abrir aqui um novo terminal, nós precisamos lembrar de sempre exportar aqui as nossas variáveis de ambiente, algo que nós vamos fazer também quando nós estivermos ajustando a nossa pipeline, aqui nós estamos utilizando a variável de ambiente AWS Profile, mas no GitHub Action será um pouquinho diferente, é que nós não temos um profile ali, para nós instalarmos o AWS CLI e termos esses profiles é muito mais complicado do que nós criarmos as variáveis referentes às próprias credenciais, mas não vamos nos adiantar, vamos aqui um passo de cada vez. Então beleza, eu tenho já o export aqui da minha variável de ambiente, eu vou acessar agora environments e dev. Então, vamos dar uma olhada aqui em dev, vamos rodar aqui o terraform init, para nós garantirmos que está tudo certo. E agora sim, já temos aqui o init finalizado, agora por fim nós iremos rodar o terraform plane, só para verificar se nós não temos nenhum problema aqui com essas alterações que nós fizemos, tá? Aparentemente tudo está certo, nós temos aqui a leitura dos nossos availability zones, temos aqui um warning dizendo que o nosso check só é conhecido após o apply, beleza, e temos aqui toda a criação dos nossos recursos já definidos corretamente agora eu vou fazer a mesma coisa para prod, então eu vou voltar aqui, vou navegar até prod vou rodar primeiro o init bom, e aqui eu tenho um erro, required version aqui está incorreto deixa eu dar uma olhada aqui nos meus providers providers Deixa eu dar uma olhada aqui nos meus providers. Providers. Essa daqui na linha 21. Então vamos dar uma olhada aqui na linha 21. Que é a parte da própria versão do Terraform. Nós atualizamos isso na sessão anterior. Mas eu fiz isso somente para dev. Então eu preciso ajustar também para produção. Então vamos olhar aqui provider de produção. Então, vamos olhar aqui Provider de Produção. Beleza, ajustado. E agora eu vou rodar de novo o Terraform init. Nós vamos aguardar aqui que finalize a execução do comando. Terraform init executado com sucesso. E agora nós vamos executar o Terraform plan. Comando executado com sucesso, nós temos simplesmente o warning aqui do check block da mesma forma como nós tivemos para desenvolvimento e aparentemente tudo está ok, beleza? Então agora nós vamos criar aqui uma nova branch, eu vou criar uma nova branch, organizar um pouquinho melhor aqui os nossos commits, o nosso código, chamarei aqui de CI, beleza? E farei então agora o commit de todas essas alterações, para nós já termos aqui tudo pronto no nosso repositório para de fato a gente começar a trabalhar ali no nosso arquivo IML do nosso workflow, beleza? Espero que você tenha gostado, vejo você na nossa próxima aula