Bom pessoal, agora que nós já temos o nosso ambiente preparado, nós criaremos o nosso primeiro exemplo em Terraform. E tudo em Terraform começa com os arquivos de configuração. Esses arquivos vão especificar todos os recursos que nós pretendemos criar. E esses arquivos possuem uma extensão específica que é a extensão .tf. Então nós vamos criar como exemplo um arquivo aqui chamado main.tf. um arquivo aqui chamado main.tf. Este nome main não é obrigatório, nós podemos utilizar qualquer outro nome desde que a extensão seja tf. Porém, main é um nome bastante comum que nós vamos ver sendo utilizado muito quando nós falamos em módulos. Nós falaremos sobre isso um pouco mais adiante. Temos aqui o nosso arquivo main.tf e nós utilizamos nesses arquivos de configuração a linguagem HCL, que é a linguagem criada pela própria HashCorp. É uma linguagem muito simples, muito fácil de nós entendermos. Basicamente é o seguinte, ela funciona em blocos. Então, todo bloco possui um chip específico, por exemplo, o block, que nós vamos dar o exemplo aqui. E aqui, logo em segu seguida nós especificamos labels para esses blocos tá esses blocos esses blocos podem ter uma ou mais labels na verdade existem blocos que nem mesmo precisam ter labels tá então nós vamos especificar aqui um exemplo de uma de uma label qualquer vamos dizer aqui label 1 e podemos ter uma segunda label que será chamada label 2 tá em seguida nós abrimos o nosso bloco e aqui dentro do bloco nós passamos os nossos argumentos. Então, nós podemos ter aqui arg1 com seu valor, arg2 com seu valor específico também. E nós podemos também ter dentro de blocos outros blocos alinhados. Nós podemos ter aqui um novo bloco, então vamos ter aqui newBlock. E nós estamos especificando aqui um novo bloco sem labels, então isso é possível também como já foi reforçado anteriormente. Beleza? Inclusive existem blocos que não possuem argumentos, você pode ter um bloco sem argumentos específicos, apesar de ser bem raro. Bom, então vamos começar com um exemplo real, certo? Vamos utilizar aqui um bloco do tipo resource ou seja nós queremos criar um recurso nós vamos especificar aqui então resource beleza e aqui o próprio Visual Studio já nos ajudou né Visual Studio Code já nos ajudou quando nós trabalhamos com blocos do tipo resource nós especificamos a primeira label como sendo o provider mais o tipo do recurso. Então, por exemplo, nós vamos especificar aqui local, underline, e nós já temos aqui até uma outra sugestão do Visual Studio Code, que é o que nós vamos utilizar, local, underline, file. E bom, é importante nós entendermos a estrutura dessa label. Primeiro aqui, a primeira parte, antes do underline, nós temos o nosso provider, que no nosso caso é local, mas poderia ser, por exemplo, a AWS, poderia ser, por exemplo, Azure. Então, essa primeira parte vai representar o nosso provider. Em seguida, nós temos qual é o tipo de recurso que nós queremos criar. No nosso caso, nós queremos criar um arquivo. Então, nós vamos criar um arquivo local utilizando a especificação desse recurso. Em seguida, nós temos uma segunda label que é o identificador do recurso. Então, nós podemos colocar aqui qualquer coisa. Inclusive, o Visual Studio já nos sugeriu aqui name, mas nós vamos mudar para exemplo. Então, nós teremos aqui um local file, um recurso sendo identificado pela key exemplo, agora nós precisamos dos argumentos, bom quando nós estamos falando na criação de um arquivo é claro que nós precisamos pensar no nome do nosso arquivo, que no nosso caso aqui também para manter simples será exemplo txt, em seguida nós queremos saber também qual é o conteúdo deste arquivo. Então, vamos especificar aqui content e nós vamos colocar aqui hello world para seguir a tradução. Então, hello world será o conteúdo do nosso arquivo. Nós temos outros argumentos aqui, porém, esses dois aqui são suficientes para o nosso exemplo. E beleza, nós já temos aqui o nosso primeiro arquivo de configuração definido, onde nós estamos criando um arquivo local. Mas, agora que nós já temos o arquivo de configuração, como que nós executamos, como que nós fazemos com que esse arquivo seja criado de fato? Então, vamos lá. Primeiro, nós vamos aqui no nosso terminal, executar o comando terraform init, como o próprio nome sugere, ele vai inicializar o nosso projeto. Bom, vamos entender o que está acontecendo aqui através dos logs, tá? Primeiro nós temos aqui um log dizendo que o backend está sendo inicializado e logo em seguida nós temos aqui um log dizendo que os plugins estão sendo inicializados, os plugins dos nossos providers. E aqui ele diz, encontrando a versão mais recente do hashcorp barra local. Então, o que aconteceu aqui? Quando nós rodamos Terraform init, o Terraform procurou por todos os arquivos com a extensão tf e ele encontrou o arquivo main.tf. E neste arquivo, nós temos um recurso onde ele identificou que foi utilizado o provider local. Então, ele sabe agora que ele precisa baixar este provider aqui para a nossa máquina, para que este provider possa ser utilizado. E foi isso que ele fez. Ele encontrou a versão mais recente deste provider. É claro que nós falaremos sobre o gerenciamento dessas versões, né? Porque como você pode estar imaginando, se nós rodarmos isso, por exemplo, daqui a um mês, pode ser que esse provider tenha sido atualizado e nós vamos ter uma outra versão. Mas, para isso, nós temos aqui, então, que o... uma informação no nosso log, né? Dizendo que o arquivo de log foi criado, se nós abrirmos esse arquivo de lock aqui, nós veremos a especificação do provider e a versão, inclusive, com os hashes. E ele diz aqui que se nós salvarmos esse arquivo, se nós versionarmos esse arquivo, sempre que nós executarmos o comando terraform init em qualquer máquina, nós vamos ter sempre essa versão, tá? Então aqui nós já temos um pouco do gerenciamento das versões dos nossos providers, mas existem outras formas de nós definirmos também que nós veremos mais adiante, tá? Então nós temos a inicialização do nosso projeto, com a criação deste arquivo lock.hcl e temos também a pasta .terraform onde nós temos o nosso provider terraform provider local que é o arquivo binário que especifica esse provider, certo? Então, temos aqui já o nosso projeto propriamente inicializado e agora nós precisamos rodar um outro comando, tá? Que é o comando terraform plan. Então, como o próprio nome sugere, nós vamos visualizar aqui o planejamento do Terraform para a criação desses recursos para o provisionamento da nossa infraestrutura. E é muito importante que a gente esteja bem atentos, que nós estejamos bem atentos ao que o Terraform estará fazendo. Então é por isso que nós rodamos este comando, para nós entendermos de fato se as ações que serão executadas correspondem àquilo que nós queremos. E aqui nós temos o seguinte, o Terraform vai executar as seguintes ações. Local file ponto exemplo será criado. E aqui nós temos a especificação do recurso, conforme nós colocamos. Claro, com outros argumentos com seus valores de full. Então nós temos o conteúdo, temos aqui vários argumentos que serão conhecidos após nós aplicarmos, após nós, de fato, criarmos essa infraestrutura. E temos dois argumentos, melhor dizendo, com valores de full, que são a permissão do diretório e a permissão do arquivo que nós vamos deixar dessa forma mesmo, certo? Então, novamente eu reforço a importância de nós executarmos este comando, o Terraform Plan, e de nós entendermos com bastante atenção o que o Terraform vai executar. E bom, uma vez que nós temos certeza que é isso que nós queremos, a gente vai executar aqui terraform apply. E agora sim nós vamos chegar num ponto de não retorno, tá? Nós vamos colocar yes aqui e pronto. Agora o terraform já aplicou tudo aquilo que nós pedimos de acordo com os arquivos de configuração. E no nosso caso, como você pode observar aqui, nós temos dois novos arquivos, que é o arquivo terraform.tf.state, que mantém aqui o estado atual da nossa infraestrutura. Falaremos com mais detalhes sobre isso, sobre o state. Vamos deixar esse arquivo de lado por enquanto. E temos também o arquivo exemplo.txt. E bom, aqui nós temos o nosso conteúdo hello world da forma como nós especificamos, então tudo foi aplicado conforme nós especificamos e temos aqui o nosso primeiro exemplo bom, o que acontece se nós alterarmos aqui o nosso conteúdo, então se nós colocarmos aqui hello, por exemplo, full cycle vou colocar aqui hello full cycle beleza, temos uma alteração agora vamos entender o que o Terraform entende quando nós fazemos isso, nós vamos Por exemplo, full cycle, vou colocar aqui hello full cycle. Beleza, temos uma alteração. Agora vamos entender o que o Terraform entende quando nós fazemos isso. Nós vamos colocar aqui Terraform plan. Vamos ver qual que é o planejamento. E aqui nós temos o seguinte, local file ponto exemplo deve ser substituído. Então ele entendeu que o conteúdo alterou, então ele não vai abrir o arquivo e alterar o conteúdo. Ele vai simplesmente substituir este arquivo por um arquivo com a nova alteração. E ele inclusive nos mostra aqui que o conteúdo foi alterado. E a alteração de conteúdo obriga a substituição do arquivo. Então isso aqui já é uma característica muito interessante do Terraform. Dependendo das configurações que nós alteramos os argumentos que nós alteramos às vezes é necessário que o terraform exclua aquele recurso então crie novamente é por isso que novamente nós temos a importância de analisar o nosso plano plano do terraform beleza e quem entra aquela parte de e bem potência como o terraform ele guarda o estado atual da nossa infraestrutura ele sabe exatamente o que deve ser executado para que aquela nova versão ela tome lugar para que aquela nova versão seja de fato estado da nossa infraestrutura vamos lá vamos aplicar aqui essa alteração então nós colocarmos aqui terraform e colocarmos, por exemplo, apply nós vamos ter que confirmar aqui novamente, yes beleza, temos aqui mais alguns arquivos adicionais que é um arquivo de backup, então esse arquivo aqui também nós falaremos sobre ele mais adiante mas como o próprio nome sugere, ele é um arquivo para o caso de nós precisarmos voltar para a versão anterior, nós temos esse arquivo aqui com o estado anterior. E agora nós temos o nosso exemplo com o valor HelloFullCycle, beleza? E dessa forma nós concluímos o nosso Hello World, agora nós já temos um exemplo de uma infraestrutura criada utilizando o Terraform, claro que é um exemplo muito simples, mas nas próximas aulas nós vamos nos aprofundar nessa linguagem HCL, vamos nos aprofundar nos recursos que o Terraform nos oferece e nós iremos mais adiante também provisionar recursos lá na AWS, tá bom? Espero que você tenha gostado, vejo você na nossa próxima aula.