Olá pessoal, sejam muito bem-vindos a mais uma aula. E nessa aula nós iremos incrementar um pouco o nosso exemplo. Nós temos simplesmente um recurso, e agora nós adicionaremos um outro recurso e veremos como nós podemos referenciar atributos de um recurso em um outro recurso. Isso pode ter parecido abstrato, pode ter parecido complexo, mas com o exemplo que nós iremos criar vai ficar tudo muito mais claro, vai ficar muito mais simples. Então vamos lá. Vamos dar uma olhada aqui no registro do Terraform. Aqui eu estou com a página dos providers aberta. Eu gostaria que você desse uma olhada aqui comigo nesse provider random. Esse provider aqui, como o próprio nome sugere, ele nos permite criar recursos com valores aleatórios. Isso pode ser muito útil quando nós precisamos, por exemplo, gerar uma ID para um determinado recurso que nós estamos criando em um Cloud Provider qualquer. Bom, então vamos dar uma olhada aqui primeiro em documentação. Aqui nós temos todos os recursos que podem ser criados. Então você pode criar aqui uma sequência de bytes aleatória, um ID aleatório, um valor inteiro aleatório e assim por diante. Mas para o nosso exemplo, eu gostaria de utilizar esse randomPatch, que gera um nome aleatório de um animal. E aqui nós temos o exemplo de uso e nós temos aqui o esquema, que eu gostaria que você se atentasse a esse esquema. Primeiro nós temos esse atributo keepers, que nós vamos ignorar aqui neste exemplo. E nós temos os outros atributos, que é o length, que indica a quantidade de palavras que terá no nome deste animal. Nós temos o prefixo, que indica, claro, um prefixo para o nome do animal, então nós poderíamos colocar aqui senhor, ou poderíamos colocar um outro nome qualquer, ou poderíamos deixar em branco também. Temos o separator, que indica qual característica vai separar cada uma das palavras que compõem o nome deste animal. O default é o traço. E temos uma propriedade readOnlyId. E essa propriedade aqui vai ser muito importante para o exemplo que nós vamos criar. Então vamos lá. Primeiro nós vamos entender como nós utilizamos esse provider. E aqui nós temos o useProvider, onde primeiro nós precisamos declarar esse provider aqui como sendo um required provider. Então, eu vou copiar esse trecho aqui, esse random, e eu vou copiar, colar aqui, na verdade, no nosso arquivo de configuração. Então, aqui já temos esse random definido. Então, antes de nós nos esquecermos, eu já vou abrir aqui o terminal, beleza? E eu vou fazer a instalação deste cá. Então, eu vou dar terraform init e vou colocar aqui a figrate. Beleza? Dessa forma, nós vemos aqui que foi instalado esse provider random, tá? Então, nós já temos ele disponível para ser utilizado aqui no nosso projeto. Então, vamos lá. Vamos criar esse recurso. Nós vamos criar aqui o recurso RandomPatch, o próprio Visual Studio Code já nos ajuda aqui com o AutoComplete. Vamos dar um nome, eu vou colocar só como meu patch, tá? Beleza? E agora nós vamos especificar os atributos. Nós vamos especificar um enfe aqui, que eu gostaria de colocar 3, ou seja, vai ser gerado um nome de animal com 3 palavras. Eu vou colocar um prefixo como exemplo, eu vou colocar aqui senhor ponto, tá? E eu vou colocar também um separator, que no nosso caso será um espaço em branco, beleza? Vamos agora dar um terraform plan para nós vermos o que nós teremos aqui, tá? Terraform plan, não vou especificar nenhum arquivo de configuração, de variáveis, nem nada do tipo, beleza? Temos aqui o nosso local file exemplo, e aqui nós podemos observar algo interessante que nós não havia mencionado antes, que é um id, ele gera um id para esse recurso. E nós temos também a indicação de que será criado um novo recurso, que será o recurso RandomPatch, meu patch que nós acabamos de especificar. Então nós temos aqui todas as informações que nós passamos. Vamos dar agora um Terraform Apply, vamos aqui dar um Yes e foi criado. E agora eu gostaria que você observasse que nós temos aqui um id, então nós temos random pet, meu pet, e temos aqui um id para esse recurso e no nosso caso, o id é o nome gerado por este recurso, então nós temos aqui, senhor strongly driving bug, então nós temos aqui este id, mas para que serve esse id? Será que nós conseguimos utilizar esse id de alguma forma? Sim, nós conseguimos utilizar e isso é um recurso muito interessante do terraform, nós podemos por exemplo aqui no nosso arquivo fazer referência ao nome do nosso patch nós podemos aqui, eu vou colocar aqui na segunda linha, uma frase meu patch e eu vou referenciar este cara, e para nós referenciarmos nós fazemos o seguinte, nós vamos especificar qual que é o nome do atributo, então eu vou colocar aqui random patch, beleza. Vou especificar aqui agora meu patch, que o próprio Visual Studio Code me sugeriu, e quando eu dou um ponto, ele me sugere também os atributos que eu posso referenciar. Então eu posso referenciar o id, que foi o nome gerado, o output desse recurso, mas eu posso especificar também outros atributos deste recurso específico. No nosso caso, eu vou especificar ID. Vou salvar aqui. Agora nós vamos dar uma olhada em qual é o plano do Terraform. E nós veremos o seguinte. Nós temos aqui que este arquivo será gerado novamente, temos este meu patch com o valor que nós vimos anteriormente, beleza? E temos aqui, temos também os outros atributos do arquivo que acabam sendo alterados também. E é isso, então vamos entender aqui o que acontece quando nós aplicamos Terraform Apply. Vamos dar um yes, beleza foi gerado, nós temos aqui o id do recurso, perfeito e agora se nós observarmos o nosso exemplo, nós temos que o meu patch é o senhor strongly driving bug, que foi o nome gerado aleatoriamente quando nós executamos o nosso comando de apply da primeira vez e depois executamos o nosso plan, tá? então dessa forma fica evidente como nós conseguimos criar dependências entre os recursos então quando nós referenciamos um recurso dentro de um outro recurso, nós temos ali uma dependência implícita está implícito essa dependência então o Terraform sabe que primeiro ele precisa criar esse recurso no meu patch, para então ele conseguir criar esse arquivo. Isso é bem interessante porque quando nós trabalhamos com recursos reais na cloud, é necessário às vezes que a gente saiba qual é o DNS atribuído a uma determinada máquina virtual no momento em que ela foi criada, para que a gente salve, por exemplo, esse DNS como sendo uma variável de ambiente de uma função lambda, lá na AWS, por exemplo. Então, há essa dependência entre recursos, há essa referência de atributos de recursos dentro do Terraform que nós conseguimos aplicar aos recursos que nós estamos criando nos nossos Cloud Providers. Eu espero que tenha ficado claro, eu espero que você tenha gostado, que você tenha aprendido e vejo você na nossa próxima aula.