Olá pessoal, sejam muito bem-vindos a mais uma aula. Bom, nós já vimos como nós conseguimos declarar variáveis, já vimos que nós podemos setar os valores dessas variáveis de forma interativa, então quando nós rodamos, por exemplo, o Terraform Apply, se nós não tivermos valores de full atribuídos a essas variáveis, nós podemos digitar os valores ali no prompt. Nós podemos também setar esses valores de full, e também podemos especificar os valores através da opção var do próprio comando terraform plan ou terraform apply. Mas além disso, existem outras formas também de atribuir esses valores às variáveis, que na verdade são formas inclusive mais comuns de fazer atribuição. Uma delas é utilizando variáveis de ambiente. Então, vamos a um exemplo aqui. Vamos abrir aqui o arquivo variables.tf, onde nós temos todas as nossas variáveis, e vamos criar uma variável de ambiente com o nome tf, underline var, underline file content. Então, sempre que nós quisermos atribuir valores a variáveis utilizando variáveis de ambiente, nós criamos uma variável de ambiente que tem o prefixo tf__var__, então com letras maiúsculas, exatamente dessa forma, e em seguida nós passamos o nome da variável e atribuímos o valor. Então eu posso atribuir aqui, por exemplo, a essa variável fileContent, valor vindo da variável fileContent, valor vindo da variável de ambiente. Então, de variável de ambiente, de varEnv, eu vou colocar dessa forma aqui para resumir. Beleza, criei essa variável de ambiente. Agora eu vou voltar para o arquivo main e só para facilitar aqui a nossa visualização, eu vou deixar aqui varFileContent como sendo o primeiro valor, tá? Vou deixar dessa forma, eu vou colocar aqui conteúdo, tá? Só para nós conseguirmos visualizar de forma mais simples. Bom, revisando, nós temos aqui o file content que tem o valor default, com conteúdo default, tá? Mas nós criamos uma variável de ambiente aqui, tf var file content, e quando nós rodamos terraform.plan, nós veremos o seguinte, que agora o nosso conteúdo é valor vindo de var.env, então o terraform, no momento em que nós rodamos terraform.plan, ele carregou todas as variáveis de ambiente que se iniciam com tf.var.underline, e de acordo com o sufixo dessas variáveis de ambiente, ele fez o match com o nome das variáveis e ele encontrou a variável file content. Então, essa é uma forma de nós especificarmos valores para as variáveis. Uma outra forma muito comum é nós criarmos um arquivo de definição de variáveis, o que eles chamam de variable definition file. Então, nós podemos criar aqui o terraform.tfvars. Essa daqui é a extensão dos arquivos de definição de variáveis. E nós podemos definir da seguinte forma. Nós podemos utilizar aqui novamente o File Content. E eu vou especificar o valor como sendo o valor vindo do arquivo terraform.tf.vars. Beleza? Vou salvar este arquivo e vou rodar novamente o nosso comando terraform.plen. E nós teremos aqui que o conteúdo é valor vindo do arquivo terraform.tf.vars. E aqui já vem algo muito importante. Então, quando nós declaramos, quando nós criamos o arquivo terraform.tf.vars, esse arquivo vai ser lido após o carregamento das variáveis de ambiente. O que significa que se eu tiver uma variável file content neste arquivo, essa variável vai sobredescrever a variável de ambiente tf.var.file.content. Então, a precedência é, primeiro ele carrega as variável de ambiente, tf, var, file, content. Então, a precedência é, primeiro ele carrega as variáveis de ambiente e depois carrega o arquivo terraform, tf, vars, e as variáveis deste arquivo sobrescrevem as variáveis de ambiente. Este arquivo tem precedência sobre as variáveis de ambiente. Beleza? Agora, é importante notar também que nós temos aqui os outros valores sendo preenchidos. Estes outros valores aqui, eles vêm dos valores de full. Mas se nós colocarmos aqui, por exemplo, uma outra variável, se nós criarmos uma outra variável que eu chamarei de tf var, vamos lá, tf var var bool, e agora eu vou colocar true, porque o valor atual é falso, deixa eu verificar aqui. O valor atual é falso. Agora eu vou criar essa variável de ambiente true. Cetei ela aqui e vou rodar de novo terraform plan. E agora nós vemos que o valor booleano é true. Então o que aconteceu? Ele carregou essas duas variáveis de ambiente que nós temos, tf var file content e tf var var bool. Carregou esses dois conteúdos logo em seguida ele carregou o arquivo terraform.tf vars este arquivo possui a variável file content então este file content sobrescreveu a variável de ambiente porém este arquivo não possui a variável var bool então ele manteve o valor que estava na variável de ambiente, ele manteve o tf var bool, beleza? é Então, ele manteve o valor que estava na variável de ambiente, ele manteve o tf.var.boom. É importante entender essa ordem de precedência do carregamento de variáveis. Além do arquivo tf, do arquivo terraform.tf.vars, esse arquivo deve ser nomeado exatamente dessa forma. Se você criar um outro arquivo, por exemplo, variables.tf.vars, esse arquivo não vai ser lido automaticamente. Somente o arquivo terraflav.tfvars é lido automaticamente. Mas existem também as opções que são as seguintes. Nós podemos criar um outro arquivo, que eu vou chamar aqui de variables.alto.tfvars. Então, quando eu tenho esse ponto alto, significa que este arquivo deve ser lido automaticamente. Ele sempre vai ser lido. Então, se eu especificar aqui, file content, colocar aqui valor vindo do arquivo variables.auto.tfvars e rodar de novo o terraform plan nós podemos ver agora que o valor está vindo de terraform.tfvars na verdade deixa eu ver aqui se eu salvei corretamente este arquivo, deixa eu dar um plan novamente e agora sim, agora eu salvei o arquivo agora está certo, então o valor está vindo do arquivo variables.auto.tfvars. Por quê? Porque primeiro o Terraform lê terraform.tfvars e logo em seguida ele lê todos os arquivos que possuem o sufixo auto.tfvars. Então, qualquer arquivo que possuir .auto.tfvars no final do nome do arquivo será lido e sobrescreverá o arquivo terraform.tfvars se este arquivo existir. Beleza? Então, espero que tenha ficado claro. Qualquer arquivo que tenha este nome, que termine com .auto.tfvars, será lido e sobrescreverá o arquivo terraform.tfvars. Agora pode ficar uma dúvida, né? E o que acontece se eu tiver mais de um arquivo auto.tfvars? Bom, vamos verificar aqui. Nós vamos criar um outro arquivo que eu chamarei aqui de exemplo de xyz.auto.tfvars, beleza? E eu vou criar aqui essa mesma variável file content porém agora, este valor ele vem, ele será xyz, então o conteúdo será valor vindo do arquivo xyz salvei o arquivo, vou rodar novamente terraform plan e agora nós temos que o valor aqui vem do arquivo xyz mas por que? Por que que ele pegou aqui vem do arquivo xyz. Mas por quê? Por que ele pegou o valor do arquivo xyz e não pegou o do arquivo variables.auto.tfvars? Porque a leitura dos arquivos é feita em ordem alfabética de acordo com o nome dos arquivos. Então primeiro ele lê o arquivo variables.auto.tfvars e depois ele lê o arquivo xyz. Então o arquivo xyz sobrescreveu o arquivo variables. E agora como exemplo, vamos renomear aqui este arquivo agora. Eu vou dar um rename aqui e eu vou colocar como sendo abc. Vou colocar aqui abc. Beleza. E agora ao rodar terraform pleno, o que acontece? O valor está vindo do arquivo variables.auto.tf.varso, porque variables vem depois que abc, de acordo com a ordem alfabética. Então, existe essa ordem também de acordo com o nome dos arquivos, beleza? Claro que isso pode ficar confuso, pode gerar muita confusão nós confiarmos nessa ordem alfabética. E é por isso que nós temos uma outra opção, que é preferível, que seria o terraform. Terraform plan ou apply, tá? Então, isso vai se aplicar também para o apply, onde nós especificamos o var file. Nós especificamos exatamente qual file, nós especificamos exatamente qual arquivo que nós queremos utilizar. E quando nós fazemos isso, então eu vou colocar aqui abc.auto.pf vars. Quando nós fazemos dessa forma, todas as variáveis definidas neste arquivo que nós especificamos como parâmetro terão precedência. Este será o último arquivo lido, portanto vai sobrescrever qualquer outro arquivo, qualquer outra variável definida que exista neste arquivo, e é por isso que nós vemos aqui o valor vindo do arquivo abc.auto.tf.vars. Então você pode especificar estes arquivos com a extensão .auto.tf.vars, ou então especificar qualquer outro arquivo .tfvars. Na verdade, é mais comum utilizar dessa forma. Então, ao invés de utilizar auto, nós poderíamos utilizar aqui, production, por exemplo, production.tfvars. Lembrando que quando nós não temos o auto no nome do arquivo, esse arquivo não é lido automaticamente, então nós especificamos o nome dele aqui neste argumento var file, production, beleza, tf vars, e aqui nós temos o conteúdo que é abc, eu acabei não mudando, mas eu vou colocar aqui production, só para não ter confusão, e vou rodar novamente, e aqui nós devemos ver production agora no conteúdo do arquivo. Beleza, production.tf. E essas são as principais formas de definir variáveis quando nós trabalhamos com Terraform. E aqui você já pode entender como nós podemos definir valores diferentes, como nós conseguimos customizar os nossos módulos, a criação dos nossos recursos para diferentes ambientes, para diferentes cenários, utilizando arquivos de definição de variáveis. Beleza? Então, eu espero que você tenha gostado, eu espero que você tenha aprendido. Vejo você na nossa próxima aula.