Uso de Variáveis no Terraform

LinuxBeginner
Pratique Agora

Introdução

Terraform é uma ferramenta poderosa para construir, alterar e versionar infraestrutura de forma segura e eficiente. Uma funcionalidade chave que torna as configurações do Terraform flexíveis e reutilizáveis é o uso de variáveis de entrada (input variables). As variáveis permitem parametrizar suas configurações, evitando a codificação rígida (hardcoding) de valores e facilitando a personalização de implantações sem alterar o código-fonte.

Neste laboratório, você aprenderá os fundamentos do uso de variáveis no Terraform. Você criará uma configuração simples que gera um arquivo local. O nome e o conteúdo deste arquivo serão determinados por variáveis que você definirá e passará durante a execução de seus comandos Terraform.

Ao final deste laboratório, você entenderá:

  • Como declarar variáveis em um arquivo .tf.
  • Como referenciar variáveis dentro de um bloco de recurso (resource block).
  • Como fornecer valores para suas variáveis ao executar terraform apply.

Criar o arquivo variables.tf para definições de variáveis

Nesta etapa, você criará um arquivo dedicado para armazenar suas declarações de variáveis. Embora você possa declarar variáveis em qualquer arquivo .tf, é uma convenção comum colocá-las em um arquivo chamado variables.tf. Essa prática ajuda a manter seu projeto organizado e facilita para outros entenderem quais valores de entrada sua configuração espera.

Todo o seu trabalho será realizado no diretório ~/project. Primeiro, crie o arquivo variables.tf usando o comando touch.

touch variables.tf

Você pode verificar se o arquivo foi criado listando o conteúdo do diretório:

ls

Você deverá ver variables.tf na saída.

variables.tf

Por enquanto, este arquivo está vazio. Nas etapas seguintes, você adicionará definições de variáveis a ele.

Definir variável de string para o nome do arquivo

Nesta etapa, você definirá sua primeira variável. Esta variável será usada para especificar o nome do arquivo que o Terraform criará.

As variáveis são declaradas usando um bloco variable. Cada bloco define uma única variável de entrada (input variable). Vamos definir uma variável chamada filename.

Abra o arquivo variables.tf que você criou na etapa anterior usando o editor nano.

nano variables.tf

Agora, adicione o seguinte código ao arquivo. Este código declara uma variável chamada filename, especifica seu tipo como string e inclui uma descrição útil.

variable "filename" {
  description = "The name of the file to create."
  type        = string
}
  • variable "filename": Isso inicia a declaração de uma variável chamada filename.
  • description: Este argumento opcional fornece uma descrição legível da finalidade da variável.
  • type: Este argumento especifica o tipo de dado para a variável. Aqui, usamos string para indicar que ela aceitará valores de texto.

Após adicionar o código, salve o arquivo e saia do nano pressionando Ctrl+X, seguido por Y e, em seguida, Enter.

Definir variável de string para o conteúdo

Nesta etapa, você definirá uma segunda variável para armazenar o conteúdo que será escrito no arquivo. Isso segue o mesmo padrão da etapa anterior.

Abra o arquivo variables.tf novamente com nano.

nano variables.tf

Adicione o seguinte bloco variable abaixo da definição da variável filename que você adicionou anteriormente.

variable "content" {
  description = "The content to write into the file."
  type        = string
}

Seu arquivo variables.tf completo deve agora se parecer com isto:

variable "filename" {
  description = "The name of the file to create."
  type        = string
}

variable "content" {
  description = "The content to write into the file."
  type        = string
}

Isso define dois parâmetros de entrada (input parameters) para sua configuração do Terraform: um para o nome do arquivo e outro para o seu conteúdo.

Salve o arquivo e saia do nano (Ctrl+X, Y, Enter).

Referenciar variáveis no bloco de recurso local_file

Nesta etapa, você criará o arquivo de configuração principal do Terraform, main.tf, e usará as variáveis que acabou de definir. Você utilizará o recurso local_file, que faz parte do provedor hashicorp/local, para criar um arquivo no sistema de arquivos local.

Primeiro, crie um novo arquivo chamado main.tf.

nano main.tf

Agora, adicione a seguinte configuração ao arquivo main.tf.

terraform {
  required_providers {
    local = {
      source  = "hashicorp/local"
      version = "2.4.0"
    }
  }
}

resource "local_file" "my_file" {
  filename = var.filename
  content  = var.content
}

Vamos analisar esta configuração:

  • terraform { ... }: Este bloco configura as configurações do Terraform, incluindo os provedores necessários (required providers). Estamos dizendo ao Terraform que nossa configuração necessita do provedor local.
  • resource "local_file" "my_file": Isso define um recurso do tipo local_file e lhe atribui o nome local my_file.
  • filename = var.filename: É aqui que você referencia uma variável. O prefixo var. seguido pelo nome da variável (filename) instrui o Terraform a usar o valor da variável filename para este argumento.
  • content = var.content: Da mesma forma, isso atribui o valor da variável content ao argumento content do recurso.

Após adicionar o código, salve o arquivo e saia do nano (Ctrl+X, Y, Enter).

Executar terraform apply com valores de variáveis

Nesta etapa final, você executará sua configuração do Terraform e fornecerá valores para suas variáveis.

Primeiro, você precisa inicializar o diretório de trabalho do Terraform. O comando terraform init baixa e instala os provedores definidos na configuração (no nosso caso, o provedor local).

Execute o seguinte comando:

terraform init

Você deverá ver uma saída indicando que o Terraform foi inicializado com sucesso.

Initializing the backend...

Initializing provider plugins...
- Finding hashicorp/local versions matching "2.4.0"...
- Installing hashicorp/local v2.4.0...
- Installed hashicorp/local v2.4.0 (signed by HashiCorp)

Terraform has been successfully initialized!
...

Agora, você pode aplicar a configuração. Para passar valores para suas variáveis, você pode usar a flag de linha de comando -var. Também usaremos a flag -auto-approve para pular o prompt de confirmação interativo.

Execute o comando terraform apply com valores para filename e content:

terraform apply -var="filename=hello.txt" -var="content=Hello, Terraform Variables." -auto-approve

O Terraform agora executará o plano e criará o arquivo. A saída será semelhante a esta:

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  ## local_file.my_file will be created
  + resource "local_file" "my_file" {
      + content              = "Hello, Terraform Variables."
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "hello.txt"
      + id                   = "..."
    }

Plan: 1 to add, 0 to change, 0 to destroy.

local_file.my_file: Creating...
local_file.my_file: Creation complete after 0s [id=...]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Para verificar se tudo funcionou, use o comando cat para exibir o conteúdo do arquivo recém-criado.

cat hello.txt

Você deverá ver o conteúdo que forneceu na variável:

Hello, Terraform Variables.

Parabéns! Você usou com sucesso as variáveis do Terraform para criar um arquivo.

Resumo

Neste laboratório (lab), você aprendeu o fluxo de trabalho fundamental para usar variáveis no Terraform. Você parametrizou com sucesso uma configuração, tornando-a mais dinâmica e reutilizável.

Você aprendeu a:

  • Organizar as declarações de variáveis em um arquivo dedicado variables.tf.
  • Declarar variáveis usando o bloco variable, especificando seu type (tipo) e description (descrição).
  • Referenciar variáveis dentro de blocos de recurso usando a sintaxe var.<nome_da_variável>.
  • Inicializar um projeto Terraform com terraform init para baixar os provedores necessários.
  • Fornecer valores de variáveis em tempo de execução usando a flag -var com o comando terraform apply.

Este conhecimento é um bloco de construção crucial para criar infraestrutura como código (Infrastructure as Code) mais complexa e modular com o Terraform.