Introdução
Terraform é uma ferramenta de Infraestrutura como Código (IaC - Infrastructure as Code) de código aberto criada pela HashiCorp. Ela permite que você defina e provisione infraestrutura de data center usando uma linguagem de configuração declarativa. Isso significa que você descreve a infraestrutura desejada em arquivos de configuração, e o Terraform descobrirá como criar, atualizar ou excluir recursos para corresponder a esse estado.
O fluxo de trabalho central do Terraform consiste em três estágios principais:
- Escrever (Write): Criar a infraestrutura como código.
- Planejar (Plan): Visualizar as alterações antes de aplicá-las.
- Aplicar (Apply): Provisionar e gerenciar sua infraestrutura.
Neste laboratório, você percorrerá todo esse fluxo de trabalho criando um recurso muito simples: um arquivo local. Usar o provedor local é uma excelente maneira de aprender a mecânica do Terraform sem a necessidade de credenciais para um provedor de nuvem. Você definirá um arquivo, planejará sua criação, aplicará as alterações e verificará o resultado.
Definir um recurso local_file em main.tf
Nesta etapa, você começará definindo um recurso no seu arquivo de configuração do Terraform. Todas as configurações do Terraform são escritas em arquivos que terminam com a extensão .tf. O arquivo de configuração principal é comumente nomeado main.tf.
Um bloco resource é a sintaxe principal para declarar um objeto de infraestrutura. Ele define um recurso de um determinado tipo (ex: local_file) com um determinado nome local (ex: example). A combinação do tipo e do nome deve ser única dentro de um módulo.
Primeiro, abra o arquivo main.tf no seu diretório ~/project usando o editor de texto nano.
nano main.tf
Agora, adicione o seguinte código ao arquivo. Isso define um recurso do tipo local_file e lhe dá o nome local example. Por enquanto, o bloco de recurso está vazio.
resource "local_file" "example" {
}
Após adicionar o código, salve o arquivo e saia do nano pressionando Ctrl+X, depois Y e, finalmente, Enter.
Especificar nome do arquivo e conteúdo no bloco de recurso
Nesta etapa, você adicionará argumentos ao bloco de recurso para especificar as propriedades do arquivo que deseja criar. Argumentos são os pares chave-valor dentro de um bloco de recurso que definem sua configuração. Para um recurso local_file, os dois argumentos mais importantes são filename e content.
filename: O caminho para o arquivo que será criado.content: O conteúdo a ser escrito no arquivo.
Abra o arquivo main.tf novamente com nano.
nano main.tf
Modifique o bloco de recurso local_file para incluir os argumentos filename e content conforme mostrado abaixo.
resource "local_file" "example" {
content = "Hello, Terraform!"
filename = "${path.module}/hello.txt"
}
Aqui, estamos instruindo o Terraform a criar um arquivo chamado hello.txt no diretório atual do projeto. ${path.module} é uma expressão especial do Terraform que se resolve para o caminho do módulo atual, que neste caso é ~/project. O conteúdo do arquivo será a string "Hello, Terraform!".
Salve o arquivo e saia do nano pressionando Ctrl+X, Y e Enter.
Inicializar Terraform e Pré-visualizar Alterações
Nesta etapa, você primeiro inicializará seu projeto Terraform e, em seguida, executará o comando terraform plan para criar um plano de execução.
Antes de poder planejar quaisquer alterações, você deve inicializar o projeto. O comando terraform init escaneia sua configuração, baixa os provedores necessários (neste caso, para local_file) e configura o backend.
No seu terminal, execute primeiro terraform init:
terraform init
Após a inicialização ser bem-sucedida, execute terraform plan. Este comando é uma parte crucial do fluxo de trabalho do Terraform, pois fornece uma "execução de teste" (dry run) das alterações. Ele mostra o que o Terraform fará com sua infraestrutura sem realmente fazer nenhuma alteração. Isso permite que você revise e verifique as ações pretendidas antes que sejam aplicadas.
terraform plan
O Terraform lerá seu arquivo de configuração e o comparará com o estado atual da sua infraestrutura (que está atualmente vazia). Em seguida, ele exibirá um plano de ação. Você deverá ver uma saída semelhante à seguinte, indicando que um recurso será criado.
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.example will be created
+ resource "local_file" "example" {
+ content = "Hello, Terraform!"
+ content_base64sha256 = (known after apply)
+ content_base64sha512 = (known after apply)
+ content_md5 = (known after apply)
+ content_sha1 = (known after apply)
+ content_sha256 = (known after apply)
+ content_sha512 = (known after apply)
+ directory_permission = "0777"
+ file_permission = "0777"
+ filename = "./hello.txt"
+ id = (known after apply)
}
Plan: 1 to add, 0 to change, 0 to destroy.
O símbolo + ao lado de resource "local_file" "example" significa que este recurso será criado. A saída detalha todos os atributos que serão definidos no novo arquivo.
Executar terraform apply para criar o recurso
Nesta etapa, você aplicará as alterações usando o comando terraform apply para realmente criar o arquivo. Este comando executa as ações propostas na saída do terraform plan.
Por padrão, terraform apply mostrará o plano novamente e solicitará confirmação interativa antes de prosseguir. Para torná-lo não interativo, o que é útil para laboratórios e automação, você pode usar a flag -auto-approve.
Execute o seguinte comando no seu terminal:
terraform apply -auto-approve
O Terraform agora executará o plano. A saída primeiro mostrará o plano novamente, seguido pelo progresso da aplicação. Após a conclusão, você verá uma mensagem de confirmação.
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.example will be created
+ resource "local_file" "example" {
+ content = "Hello, Terraform!"
+ content_base64sha256 = (known after apply)
+ content_base64sha512 = (known after apply)
+ content_md5 = (known after apply)
+ content_sha1 = (known after apply)
+ content_sha256 = (known after apply)
+ content_sha512 = (known after apply)
+ directory_permission = "0777"
+ file_permission = "0777"
+ filename = "./hello.txt"
+ id = (known after apply)
}
Plan: 1 to add, 0 to change, 0 to destroy.
local_file.example: Creating...
local_file.example: Creation complete after 0s [id=42086c02e03bf671ddf621ed9922f52f2c7a605c]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
A mensagem "Apply complete!" confirma que o Terraform criou com sucesso o recurso conforme definido na sua configuração.
Verificar se o arquivo criado existe no sistema de arquivos
Nesta etapa final, você verificará se o Terraform criou com sucesso o arquivo no seu sistema de arquivos local conforme especificado. Como você usou o recurso local_file, o resultado é um arquivo tangível no seu diretório de projeto.
Primeiro, use o comando ls para listar os arquivos no diretório atual. Você deverá ver hello.txt ao lado do seu arquivo de configuração do Terraform.
ls
Saída esperada:
hello.txt main.tf terraform.tfstate
Em seguida, use o comando cat para exibir o conteúdo do arquivo hello.txt recém-criado.
cat hello.txt
Você deverá ver o conteúdo que definiu em main.tf.
Hello, Terraform!
Isso confirma que sua configuração do Terraform foi aplicada com sucesso e o recurso foi criado exatamente como você o definiu no seu código.
Resumo
Parabéns! Você concluiu com sucesso seu primeiro projeto Terraform.
Neste laboratório, você aprendeu o fluxo de trabalho fundamental do Terraform:
- Escrever (Write): Você definiu um recurso
local_fileem um arquivo de configuraçãomain.tf. - Planejar (Plan): Você usou
terraform planpara pré-visualizar a criação do arquivo sem fazer nenhuma alteração. - Aplicar (Apply): Você usou
terraform applypara executar o plano e criar o arquivo no seu sistema de arquivos local.
Este exemplo simples de criação de um arquivo local demonstra o poder central da Infraestrutura como Código (Infrastructure as Code). Você declarou o estado desejado de um recurso em um arquivo de configuração, e o Terraform cuidou da lógica para alcançar esse estado. Os mesmos princípios se aplicam ao gerenciar infraestruturas mais complexas, como máquinas virtuais, redes e bancos de dados na nuvem.



