Olá pessoal, sejam muito bem-vindos. Nas últimas aulas nós criamos alguns exemplos em Terraform, claro, de recursos bem simples. Nós trabalhamos ali com recursos locais, como o local file ou o recurso para gerar valores aleatórios, por exemplo. Nós criamos esses recursos mais simples para que a gente conseguisse entender como funciona o Terraform, como funciona a linguagem por trás do Terraform, como nós trabalhamos com os recursos que o Terraform nos oferece. Mas evidentemente, nós não trabalharemos com esses recursos no nosso dia a dia. Nós vamos utilizar o Terraform para nós provisionarmos recursos, provavelmente em um Cloud Provider ou então on-premises. E é por isso que nós decidimos criar uma sessão aqui, onde nós vamos criar um exemplo, nós vamos provisionar alguns recursos em um Cloud Provider de verdade. E nós escolhemos aqui para o nosso exemplo a AWS, que provavelmente é o maior Cloud Provider que nós temos hoje. Mas claro que a ideia não é que você saia daqui um expert em AWS. Nós não queremos ensinar para vocês recursos ou como configurar recursos na AWS. A ideia não é que você saia daqui com recomendações de como trabalhar com esses recursos na AWS. A ideia é que você entenda os conceitos por trás do Terraform e como fazer essa comunicação com o Cloud Provider e você pode transpor todo esse conhecimento, todos esses conceitos, toda essa lógica para o Cloud Provider com o qual você precisa trabalhar. E é claro que você tem para isso a documentação. Portanto, não precisa ficar preocupado se você nunca ouviu falar de AWS, você nunca trabalhou com AWS, não se preocupe que eu vou mostrar aqui para você o que você precisa conhecer, o que você precisa saber sobre AWS para você conseguir criar este exemplo. Eu tenho aqui um diagrama que mostra quais são os recursos que nós iremos criar. É um diagrama bem simples, nós iremos criar poucos recursos, mas que já vai dar aqui para nós utilizarmos a maioria dos recursos, os recursos mais importantes que o Terraform nos oferece. Beleza? Nós temos aqui então esse quadro roxo que é a VPC. Uma VPC é uma rede virtual que nós criamos lá na AWS. Então tem inclusive aqui a documentação da AWS, onde fala justamente isso. Com uma VPC é possível que você inicie os seus recursos da AWS em uma rede virtual definida por você. E o que é interessante de uma VPC é que você consegue criar subredes, você consegue criar subnets. E cada uma dessas subnets, você consegue definir uma availability zone, ou uma zona de disponibilidade para essa subnet. Então, imagine zona de disponibilidade como se fosse um data center. E cada uma dessas AZs, ou Availability Zones, elas ficam em uma determinada distância uma da outra. Elas não podem ficar tão próximas umas das outras. Por quê? Porque caso tenha algum problema em uma zona de disponibilidade, por exemplo, caso aconteça um desastre natural naquela cidade, e a sua subnet ficar indisponível, você vai ter uma outra subnet e uma outra zona de disponibilidade disponível. Então você vai conseguir acessar essa zona de disponibilidade. Bom, aqui nós já temos a ideia um pouco de VPC, de subnet. Nós falaremos um pouco mais sobre isso enquanto nós estivermos trabalhando com Terraform, mas a ideia principal é essa. Então nós teremos aqui uma VPC, nós teremos uma subnet pública, essa subnet será pública aqui porque nós teremos uma rota para a internet, nós teremos aqui um internet gateway associado à nossa VPC, isso garante que a nossa VPC pode se comunicar com a internet. É para isso que nós teremos esse Internet Gateway. E dentro da nossa subnet, nós teremos primeiro uma instância EC2. EC2 é o nome do serviço de máquinas virtuais que a AWS oferece. Então, nós vamos subir uma máquina virtual nessa subnet e nós teremos associada a essa máquina virtual ou associada a essa máquina virtual um Elastic IP. Esse daqui é um IP que nós podemos criar. No momento em que nós criamos, nós teremos associado a esse recurso um IP público e nós podemos associar esse IP público à nossa máquina virtual. Mas por que nós precisamos de criar um recurso simplesmente para esse IP porque este IP aqui, este Elastic IP nos garante um IP estático então mesmo se nós perdemos a nossa instância nós ainda teremos acesso ao nosso IP e depois basta nós criarmos uma outra instância e fazermos essa associação. Então nós teremos aqui este IP público, e o que é interessante que nós podemos fazer é, nós podemos, no momento da criação deste IP, nós podemos salvar este IP dentro de um parâmetro do Parameter Store. Este daqui é um serviço da AWS, que como o próprio nome sugere, ele armazena parâmetros para as nossas aplicações. Dessa forma, nós não precisamos ficar salvando valores em bloco de texto, ficar salvando valores em hardcode nas nossas aplicações. Basta nós acessarmos o Parameter Store e qualquer aplicação, claro, de acordo com as permissões, pode acessar o Parameter Store. Beleza? Nós faremos isso, então, como exemplo. É bastante comum nós utilizarmos essa abordagem. Então, quando nós criamos, às vezes, um serviço gerenciado, e esse serviço gerenciado, quando nós criamos um recurso desse serviço gerenciado, nós temos ali um DNS. Geralmente, nós pegamos esse DNS, que é o output da criação desse recurso, e salvamos um ParameterStore para depois utilizar esse valor aí em alguma aplicação. Além disso, nós teremos também aqui um segredo, nós temos um serviço na AWS que é o Secrets Manager, que é bem parecido com o ParameterStore, mas ele fornece mais recursos relacionados a gerenciamento de segredos, como por exemplo, rotação de segredos. Então você consegue criar uma política de rotação de segredos utilizando o Secrets Manager. E é bem comum nós utilizarmos o Secrets Manager, por exemplo, para salvar as nossas strings de conexão. Então nós temos ali conexões com os bancos de dados, nós salvamos todas as credenciais, todas as informações para acessar esse banco de dados dentro de um secret no Secrets Manager. E o interessante é que através de Terraform nós conseguimos ali enquanto nós estamos provisionando os nossos recursos, nós conseguimos acessar esses segredos para utilizar de alguma forma em nossos recursos. Por exemplo, nós podemos no momento de criar esta máquina virtual, nós podemos criar uma variável de ambiente, setar uma variável de ambiente onde o valor venha do Secret Manager. Então, vamos supor que esta instância aqui do EC2, ela vai rodar uma determinada aplicação que precisa se conectar a um banco de dados. Bom, nós precisamos que esta aplicação acesse o Secrets Manager para obter a string de conexão. Então, nós podemos fazer isso da seguinte forma. No momento em que nós subimos a instância, nós acessamos o Secrets Manager, pegamos essa string de conexão e salvamos em uma variável de ambiente. Novamente, isso não é uma recomendação de como trabalhar está aqui vai ser simplesmente um exemplo até porque na vida real geralmente a nossa aplicação ali em tempo de execução vai consumir esse segredo tá mas aqui pra esse exemplo eu acho que é bem válido nós fazemos isso no momento da criação do recurso beleza e é basicamente isso então nós teremos um exemplo bem simples está e agora já a partir da próxima aula nós vamos acessar o console, eu vou mostrar para vocês como vocês podem criar a conta e como vocês podem criar as credenciais de acesso que vão nos permitir trabalhar com a AWS em conjunto com a Terraform, beleza? Espero que você tenha gostado, vejo você na nossa próxima aula.