Bom pessoal, agora que nós já temos o nosso módulo de network criado, nós vamos criar também o módulo para o nosso cluster. Então todos esses recursos de data sources que nós temos aqui no nosso arquivo main.tf relacionado ao nosso root module, nós iremos mover para um módulo à parte. E agora aqui no nosso root module nós teremos simplesmente referências a módulos filhos, a child modules. referências a módulos filhos, a child modules. Então nós vamos aqui copiar todos esses recursos, eu vou inclusive copiar essa parte comentada aqui, sobre a qual nós falaremos nas aulas posteriores, e aqui dentro de modules nós teremos agora uma nova pasta, que será a pasta cluster, e nós vamos seguir a mesma estrutura que nós seguimos para o módulo de networks, nós teremos aqui o arquivo main.ts, beleza? Onde eu já vou copiar aqui todos esses recursos que eu copiei do arquivo main do root module, deixa eu já salvar também o main.ts do root module, e aqui em cluster eu vou adicionar agora outputs.ts e vou adicionar também variables. Beleza, deixou adicionar aqui variables.tf Perfeito. Agora vamos aqui voltar no arquivo main que nós acabamos de criar. Nós temos aqui um segredo, um data source que aponta para um segredo, que aponta para as informações de metadata desse segredo e temos também aqui o data source que aponta para a versão corrente do nosso Secret e através dele que nós conseguimos acessar o seu valor. Temos a criação da nossa instância e logo em seguida nós temos aqui a criação do nosso Elastic IP e do nosso Parameter que está comentado por enquanto. A ideia aqui primeiro é nós observarmos tudo aquilo que tem uma dependência externa. E neste momento, a dependência externa que nós temos aqui, ela se refere a subnet e ao nosso security group ID, tá? A todos esses grupos de segurança. Então, nós vamos aqui em variables, definir a variável. Subnet, né? Subnet ID. Nós temos simplesmente uma subnet, referência a uma única subnet beleza, e nós vamos colocar aqui o type type, será string, e nós teremos aqui a variable security group security group id beleza e o type agora vai ser uma lista de string Deixa eu formatar aqui Perfeito, temos aqui o nosso variables criado Além disso, vamos colocar também o prefixo Nós vamos dar um nome para a nossa máquina virtual E para isso nós vamos precisar do nosso prefixo Assim como nós fizemos para o outro módulo, o módulo de network E o tipo aqui é uma string Beleza, voltando aqui em main para o outro módulo, módulo de network. E o tipo aqui é um string. Beleza? Voltando aqui em main, nós vamos referenciar agora o nosso var.subnetid e aqui nós vamos referenciar o nosso var.securitygroup.ids. Além disso, nós vamos definir aqui uma tag. Então, vamos colocar aqui tags, beleza? Nós vamos definir aqui a tag name, cujo valor será, deixa eu pegar aqui o valor que eu já havia definido anteriormente, para a gente não perder tempo, beleza? Bem simples, né? Deixa eu só mudar aqui o idioma do meu teclado agora sim, agora nós temos o prefixo e o node porque nós estamos criando um node dentro do nosso cluster e a ideia de um cluster é que nós tenhamos mais de uma máquina, não faz sentido falar em cluster de um nó só por isso nós vamos aqui utilizar por enquanto nós vamos refatorar nas próximas aulas mas neste momento nós vamos utilizar aquela meta property que nós já vimos, que é o count, e que nós podemos dizer o seguinte, que nós queremos uma quantidade específica de máquinas, que no nosso caso virá também das nossas variáveis, nós ainda não definimos, mas nós vamos definir aqui instance count. Beleza, vamos aqui de novo voltar até Variables. Variable InstanceCount. E agora nós queremos um tipo numérico. Então nós vamos ter aqui Number. E agora sim, temos aqui o nosso InstanceCount. Vamos criar, por exemplo, aqui duas máquinas. Nós podemos passar como valor para essa variável 2 para nós vermos isso funcionando na prática. E para nós vermos uma diferença no nome, agora nós podemos utilizar o count.index. Beleza. Temos aqui agora o nosso cluster definido. Deixa eu só mudar aqui o exemplo instance agora para instance. Faz muito mais sentido, né? Ótimo, agora nós precisamos de referenciar este módulo lá no nosso módulo root, no nosso módulo raiz. Por enquanto nós não vamos definir outputs, mas posteriormente se nós precisarmos dos outputs nós vamos defini-los. Vamos voltar aqui em main.df da pasta raiz, e aqui nós teremos agora module, nós chamaremos de cluster e nós teremos source vindo de module, modules cluster, beleza? Nós precisamos passar um prefixo, que no nosso caso vai ser var prefixo também, nós vamos precisar passar aqui a nossa subnet id, e aqui nós vamos pegar do nosso módulo de network temos subnet id, e nós vamos escolher aqui aleatoriamente uma das subnets, no caso a primeira subnet que nós tivermos criado instance count agora será 2, nós vamos passar 2 poderia ser qualquer outro valor, e por fim nós precisamos do security group id que no nosso caso também vem do módulo de Network, que nós podemos referenciar aqui dentro. SecurityGroupID, como nós esperamos uma lista, nós vamos aqui colocar isso aqui dentro de uma lista. Perfeito. Agora nós já temos aqui o nosso cluster definido. Para melhorar, ao invés de nós termos hardcode e e instance count, nós vamos definir também dentro de uma variável. Então nós teremos aqui variable instance count, que será do tipo number. Perfeito, vamos agora colocar o valor 2 aqui dentro do nosso tf.vars, instance count igual a 2. Agora sim, eu acho que agora falta simplesmente nós referenciarmos InstanceCount aqui dentro, tá? Vamos abrir um novo terminal. Eu vou digitar aqui Terraform Plan. Para nós visualizarmos o plano do Terraform. Nós temos módulos que não estão declarados, porque nós acabamos de criar um novo módulo e nós precisamos, então, de rodar aqui o Terraform init. Beleza, tudo inicializado, agora sim nós podemos executar o Terraform plane, e nós temos, novamente, aqui um módulo, ah, sim, nós temos uma referência que não está declarada, nós estamos referenciando aqui example instance. Então, vamos dar uma olhada em outputs. Beleza. Claro, nós agora não temos mais essa instância aqui disponível, mas, bom, aqui nesse caso, como nós já temos essa dependência que nós estamos colocando aqui no output, vamos já definir o output para o nosso cluster, que eu acho que vai ficar melhor aqui. Então, nós teremos agora a WS Instance. A nossa Instance é simplesmente Instance e nós vamos colocar aqui Private DNS. Agora, aqui dentro, ao invés de nós colocarmos dessa forma no output do nosso root module, nós vamos referenciar module cluster e nós vamos referenciar Private DNS, nós vamos referenciar module cluster e nós vamos referenciar private DNS, que por enquanto é o nosso único output e isso provavelmente resolverá o nosso problema, tá? Então vamos lá. Terraform plan, deixa eu verificar aqui. Ah, faz todo sentido, claro, porque nós agora estamos definindo um count e aqui no nosso caso nós precisamos de referenciar uma única instância. Então, por enquanto, para corrigir isso, eu vou colocar instances aqui só para que a gente tenha um nome um pouquinho melhor. Deixa eu voltar aqui em cluster. Beleza. Instances. E por enquanto, eu vou referenciar uma única subnet só para que, melhor dizendo, uma única uma única subnet só para a gente, melhor dizendo uma única instância, só para que a gente teste se o que nós estamos fazendo até agora está funcionando beleza, agora o nosso plane parece que funcionou ok, tá vamos verificar aqui a criação das nossas máquinas virtuais para verificar se ele está de fato criando duas instâncias temos aqui a instância 1 e a instância 0, aparentemente ok, mas é claro que nós vamos saber se tudo vai funcionar depois de nós só darmos terraform apply e eu vou dar aqui um auto approve e claro nós sabemos aqui que o deploy desses componentes demoram, eu havia já excluído todos os recursos provisionados anteriormente, após a aula anterior, e agora eu estarei criando aqui tudo do zero. Então, eu vou pausar a gravação da aula por alguns instantes, até que a criação desse recurso seja finalizada. Os recursos acabaram de ser provisionados, temos aqui 12 recursos adicionados, inclusive nós temos o nosso output, que é o private DNS, temos aqui o DNS da nossa máquina. Agora, se nós navegarmos até o console da AWS, nós podemos acessar o serviço EC2, e aqui nós veremos que nós temos duas instâncias rodando, e agora com o nome atribuído a elas. Temos Full Cycle Node 0 e Full Cycle Node 1. Beleza? Então, agora nós já temos aqui o nosso projeto em Terraform, muito mais modularizado, se nós observarmos o main.tf do nosso root module, voltando aqui, nós temos simplesmente a declaração de dois módulos. E daqui para frente, sempre que nós precisarmos de criar uma solução que contenha esses recursos, agora basta nós declararmos os módulos. É claro que o nosso módulo de cluster ele na verdade é um módulo bem simples, nós estamos passando aqui um instance count, estamos passando uma única subnet e estamos passando aqui o nosso único security group. Seria melhor se nós melhorássemos ou se nós refatorarmos esse módulo para ele ser um pouco mais dinâmico. E nós falaremos sobre isso na próxima aula. Eu espero que até aqui você tenha gostado. Vejo você lá!