Bom pessoal, continuando então com a declaração dos nossos recursos aqui no nosso projeto Terraform, nós iremos agora definir o nosso Internet Gateway, conforme eu expliquei na aula anterior. Nós não temos associado a nossa máquina o IP público, porque a nossa VPC não tem associada a ela o Internet Gateway. Então não é possível a comunicação da nossa VPC com a Internet. Nós habilitamos essa comunicação criando o internet gateway. Nós teremos aqui então um recurso do tipo AWS internet gateway. O nome que nós teremos aqui vai seguir o mesmo padrão exemplo IGW, beleza? O único recurso que nós ou o único atributo, melhor dizendo que nós precisamos informar aqui é a nossa VPC, tá? Nós precisamos associar esse internet gateway a nossa VPC da seguinte forma teremos aqui AWS nossa VPC, tá? Nós precisamos associar esse Internet Gateway à nossa VPC da seguinte forma. Teremos aqui a WSVPC, exemplo VPC, e informamos o ID. E beleza, dessa forma nós já teremos ali associado à nossa VPC o nosso Internet Gateway, beleza? Agora o próximo recurso que nós iremos definir será o nosso Elastic IP, certo? Nós podemos ter um IP estático, como eu já expliquei, então se a nossa máquina, por algum motivo qualquer, nós perdermos a nossa máquina, nós não tivermos acesso, nós precisarmos derrubar a nossa instância e criar uma outra instância, nós não precisamos nos preocupar quanto ao IP público. Por quê? Porque nós temos um IP estático disponível aqui. Então, sempre nós podemos criar uma instância e associar com esse IP. Mas essa associação acontece, claro, somente com recurso. Não tem como associar o mesmo IP com duas máquinas ao mesmo tempo. Beleza? Então, vamos criar esse IP estático aqui e nós chamaremos de example IP. E aqui existem diversas formas, diversos recursos com os quais nós podemos associar o nosso IP. Se nós dermos uma olhada na documentação, inclusive estou com a documentação aqui aberta. Nós temos o exemplo onde ele associa esse IP com uma instância, que é o nosso caso. Nós vamos associar com essa instância lá do EC2, mas você pode associar também com uma network interface já de forma explícita e você também pode fazer a associação com o IP privado. Esse recurso vai estar alocado na sua VPC e você pode dedicar o IP privado específico para este Elastic IP, certo? Temos algumas outras formas aqui, alguns outros argumentos ou parâmetros que você pode dar uma olhada, para você entender todas as opções disponíveis relacionadas a esse recurso, beleza? Bom, então nós vamos aqui criar ou fazer a associação com a nossa instância, utilizando este atributo instance, nós faremos aqui da seguinte forma, aws instance example instance e vamos associar com o id, tá? na própria documentação desse curso, que é o seguinte, o Elastic IP pode exigir que o Internet Gateway já exista antes que aconteça a associação. Então, se nós criarmos ali simplesmente o nosso IP e associarmos com a nossa instância, nós podemos ter um erro. Por quê? Porque às vezes o Internet Gateway ainda não foi criado, ainda não está disponível. E é por isso que nós podemos fazer o uso deste atributo dependes on, que é um atributo muito utilizado em muitos cenários, ele nos ajuda. Por quê? Porque ele define uma dependência de forma explícita entre recursos. Então, nós vamos colocar aqui dependes on, nós vamos passar um array, porque nós podemos depender de vários outros recursos, Vamos passar um array, porque nós podemos depender de vários outros recursos, mas no nosso caso, a nossa única dependência será com o nosso Internet Gateway. Nós colocamos, então, que o nosso Elastic IP depende do Internet Gateway e isso informa para o Terraform que ele precisa primeiro criar o Internet Gateway, e garantir que o Internet Gateway esteja disponível para ele fazer a criação do nosso Elastic IP. Beleza? Então esse daqui é um conceito bastante utilizado. Nós precisamos fazer uso aqui desse depend zone quando a dependência não é implícita. Por quê? Porque tem casos, por exemplo, em que a dependência é implícita, como no caso do internet gateway. Nós precisamos, para associar o Internet Gateway com a VPC, que a VPC já exista. Não faz sentido nós criarmos primeiro o Gateway sem ter a VPC com a qual nós possamos associar este recurso. Mas isso já está implícito aqui. O Terraform já entende, quando eu faço essa referência dessa forma, ele já entende que primeiro é faço essa referência dessa forma ele já entende que primeiro é preciso nós criarmos a nossa VPC para então criarmos aqui o nosso InternetGator, beleza? Já no caso do Elastic IP, nós não temos isso de forma implícita, simplesmente colocando o Insta, é por isso que nós colocamos esse Dependence On beleza? Agora para nós finalizarmos, esse será o último recurso que nós iremos declarar aqui nessa aula, nós teremos aqui o nosso parâmetro lá no ParameterStore. Então, vamos dar uma olhada aqui no nosso diagrama. Nós temos o seguinte recurso que nós precisamos criar, um parâmetro aqui dentro desse serviço, ParameterStore, que vai armazenar o IP público associado a este Elastica IP, beleza? Então, isso daqui é simplesmente para um exemplo, mas este ParameterStore é muito importante, como eu já expliquei, porque nós não precisamos armazenar, de nós mesmos gerenciarmos parâmetros que possam ser utilizados por várias aplicações, tá? Nós salvamos aqui no Parameter Store e as aplicações, elas podem acessar esses parâmetros sem ter esses valores hardcode, beleza? Então, vamos lá. Nós teremos, então, um novo recurso, o tipo desse recurso será AWS SSM Parameter e aqui nós teremos o nome do nosso parâmetro, ou na verdade o ID associado a esse recurso, tá? Que pode ser qualquer um, que no nosso caso será simplesmente parámetro. Nós teremos aqui o nome, name, nós vamos colocar aqui dm ip, bem simples. Nós teremos o type, então nós temos aqui diferentes tipos, no nosso caso nós vamos colocar string. Nós precisamos armazenar aqui o ip como sendo uma string. E o nosso valor virá aqui do nosso AWS EIP, exemplo IP. Temos vários atributos, nós podemos utilizar qualquer atributo. Poderíamos utilizar, por exemplo, o public DNS, mas nesse exemplo eu vou colocar o public IP. Certo? Temos aqui já agora o nosso parâmetro definido. E eu vou colocar dois outputs aqui, só para que a gente consiga visualizar as informações após nós rodarmos o Terraform Apply. Nós teremos o output PrivateDNS, que vai ser o DNS da VM que nós vamos criar. Nós poderíamos obter também o PrivateDNS do nosso ID, mas neste exemplo eu vou obter aqui a partir da nossa instância, então private DNS, e eu vou colocar aqui também o nosso Elastic IP, então nós teremos aqui um output que será EIP, beleza value AWS EIP exemplo IP, teremos aqui public IP então nós estamos salvando nosso IP público no Parameter Store e estamos também retornando este IP público como output do nosso arquivo de configuração. Então vamos lá, nós faremos agora o seguinte, caso você não tenha destruído a sua infraestrutura, conforme eu fiz no final da aula anterior, você verá aqui simplesmente o plano do Terraform para adicionar novos recursos. Aqui no meu caso, como eu destruí os recursos, agora eu tenho aqui todos os seis recursos para serem adicionados, então criarei toda a infraestrutura do zero. Vamos lá, vamos dar agora no Terraform Apply. Beleza, nós teremos agora aqui a confirmação yes. Nós sabemos que o provisionamento desse recurso pode demorar alguns segundos, é por isso que eu vou pausar a gravação dessa aula e quando finalizar a criação dos recursos, eu volto com a gravação. Todos os recursos foram provisionados com sucesso, então nós temos aqui os seis recursos adicionados e temos também os nossos outputs. Temos o nosso IP público 34.209.23.241 e temos também o nosso DNS privado para acesso à nossa máquina, claro, dentro da nossa VPC, beleza? Vamos dar uma olhada agora no console da AWS, nós vamos acessar aqui o serviço EC2, o serviço de máquinas virtuais e nós podemos ver aqui que nós temos uma instância rodando e temos também um Elastic IP. Vamos dar uma olhada nessa instância, beleza, nós temos aqui o status check ainda inicializando, e agora sim, agora nós temos o IP público, conforme nós vimos lá no nosso output, se nós observarmos aqui também o nosso private IP DNS name, nós temos aqui justamente o DNS que nós retornamos como output. Vamos dar uma olhada também em networking. Se nós acessarmos aqui um pouco mais embaixo, nós temos o nosso Elastic IP address agora associado a esta máquina virtual, beleza? Então, esse recurso aqui nos garante que nós não vamos perder este IP. Bom, então aqui está tudo certo com a nossa máquina virtual. Nós vamos agora acessar o Parameter Store. Então, vamos pesquisar aqui, Parameter Store, beleza? Nós temos aqui o serviço Systems Manager, que na verdade é o serviço que contém essa feature de Parameter Store essa feature que armazena parâmetros então nós vamos acessar esse Systems Manager beleza acessando aqui o serviço nós temos o lado esquerdo Parameter Store vamos dar uma olhada aqui, e nós temos agora o nosso parâmetro VM IP nós podemos clicar aqui e nós vamos visualizar o valor que é 34, 209, 23, 241, que é justamente o IP público que nós criamos. Beleza? Então, dessa forma, nós finalizamos a criação de todos os recursos. É claro que nós ainda temos algumas coisas que nós podemos fazer aqui para melhorar um pouco. E nós temos também uma outra funcionalidade que eu prometi que nós faríamos, que é acessar um secret. Mas esse secret não será criado pelo nosso arquivo de configuração. Nós faremos isso manualmente e nós simplesmente vamos referenciar esse secret no nosso arquivo de configuração. Beleza? Além disso, nós iremos também refatorar nas próximas aulas o nosso projeto para permitir o reuso desses recursos, o reuso disso que nós criamos. Nós falaremos sobre isso quando nós estivermos falando sobre módulos. E é isso. Eu espero que você tenha gostado. Nós nos vemos na nossa próxima aula.