sábado, 14 de fevereiro de 2026

Devops - Percebendo provisionamento de recursos com o Terraform

 


Devops - Percebendo provisionamento de recursos com o Terraform

No tema de hoje, vamos falar um pouco sobre Terraform e como ela tem ajudado as empresas na criação automatizada de toda a infraestrutura necessária de uma aplicação.

Infraestutura como código (Infrastructure as Code ou Infra as Code)

Antes de entrarmos nos conhecimentos de Terraform, é necessário entender como funciona o IaC (Infra as Code) afinal, o Terraform é uma ferramenta que nos auxilia nessa prática.

Infraestrutura como código nada mais é do que ter toda a infraestrutura da sua aplicação a nível de código, entenda por infraestrutura como VMs, Banco de Dados, Mensageria, Storage e tantos outros serviços necessários e essências para o funcionamento de uma aplicação.

Terraform

Para explicar um pouco do que é o Terraform, temos abaixo um trecho retirado e traduzido do site oficial.

Terraform é uma ferramenta para criar, alterar e criar versões de infraestrutura com segurança e eficiência. Terraform pode gerenciar provedores de serviços existentes e populares, bem como soluções internas personalizadas.

Os ficheiros de configuração descrevem para o Terraform os componentes necessários para executar um único aplicativo ou todo o seu datacenter. Terraform gera um plano de execução que descreve o que fará para atingir o estado desejado e, em seguida, o executa para construir a infraestrutura descrita. Conforme a configuração muda, o Terraform é capaz de determinar o que mudou e criar planos de execução incrementais que podem ser aplicados.

A infraestrutura que o Terraform pode gerenciar inclui componentes de baixo nível, como instâncias de computação, armazenamento e rede, bem como componentes de alto nível, como entradas de DNS, recursos de SaaS etc.

Para maiores informações: Introduction — Terraform by HashiCorp

Benefícios

Vamos falar um pouco sobre alguns benefícios de utilizar uma ferramenta IoC como o Terraform

Prevenção de erros de configuração
Muitas vezes, nós deparamos com a necessidade de criar um recurso em algum provedor de nuvem (AWS, Azure, Google…), e realizamos isso de modo manual seguindo uma sequência de passos, com isso podemos esquecer de configurar alguma informação que era vital para nossa aplicação. Com uma ferramenta de IoC como o Terraform, você escreve toda a insfraestrutura necessária da sua aplicação através de código, uma única vez e pode reaproveitar para diversos outros contextos, eliminando processos manuais e possíveis erros de configuração.

Fácil colaboração
Todo o time pode facilmente colaborar com o código da infraestrutura, ou seja, conforme for necessitando de novos recursos para o funcionamento da sua aplicação, o desenvolvedor pode adicionar esse recurso no ficheiro de código da infraestrutura.

Documentação da Infraestrura
Todos os recursos necessários para o funcionamento daquele software como um todo ou daquele pequeno microsserviço está no ficheiro de código da infraestrutura, logo, você tem uma documentação de tudo o que precisa estar provisionado para a sua aplicação funcionar.

Variedade de Provedores
Terraform trabalha com IaaS, Paas e Faas em diversos provedores de nuvem

Inteligência no Provisionamento
O Terraform possui um ficheiro vital para seu funcionamento onde fica guardado todo o histórico de criação, modificação e exclusão de recursos da infraestrutura da sua aplicação, portanto, na sua execução ele compara o que o desenvolvedor escreveu no ficheiro de configuração da infraestrutura com o ficheiro onde fica guardado o estado atual da sua aplicação para assim poder tomar a decisão de criar, modificar ou excluir algum tipo de recurso.

Instalando o Terraform

Para a instalação do Terraform em nossa máquina local, utilize o link abaixo
Download Terraform — Terraform by HashiCorp

Ao longo desse post, vamos trabalhar com Terraform voltado para o ambiente Azure e para isso utilizaremos o Azure CLI como meio para que o Terraform consiga acessar e provisionar recursos no Azure
Install the Azure CLI | Microsoft Docs

Para configuração do seu Azure CLI para uso no Terraform, segue link
Azure Provider: Authenticating via the Azure CLI | Guides | hashicorp/azurerm | Terraform Registry

Provider

Um provider nada mais é do que o provedor de serviços cloud em que você irá utilizar em suas aplicações, nesse caso, estamos utilizando o Azure, mas existem outros vários providers suportados como AWS, Google Cloud.

Você pode consultar a lista completa de providers disponíveis nesses endereços:
Browse Providers | Terraform Registry
Provider Documentation — Terraform by HashiCorp

Funcionamento

O terraform é composto por uma ficheiro principal onde temos toda a nossa infraestrutura declarada em seu formato próprio. Podemos ter um segundo ficheiro que é onde fica armazenada as váriaveis de configuração dos recursos como nome do recurso, região do recurso e afins, mas este ficheiro é opcional.

Caso você opte por ter um ficheiro a parte com todas as variáveis de configuração, não é necessário se preocupar em como o terraform vai ler esse ficheiro de configuração, pois ele faz de forma automatica durante sua execução, bastando apenas estar no mesmo diretório do que o ficheiro principal.

Ficheiro main.tf

terraform {

  required_providers {

    azurerm = {

      source  = "hashicorp/azurerm"

      version = "=2.46.0"

    }

  }

}provider "azurerm" {

  features {}

}resource "azurerm_resource_group" "main" {

    name     = var.resource_group_name

    location = var.resource_group_location

}resource "azurerm_app_service_plan" "main" {

    name                = var.app_service_plan_name

    location            = azurerm_resource_group.main.location

    resource_group_name = azurerm_resource_group.main.name    sku {

        tier = "Basic"

        size = "F1"

    }

}resource "azurerm_app_service" "main" {

    name                = var.app_service_name

    location            = azurerm_resource_group.main.location

    resource_group_name = azurerm_resource_group.main.name

    app_service_plan_id = azurerm_app_service_plan.main.id

}

Acima temos o ficheiro de configuração de recursos do Terraform, perceba que no ínicio, mais precisamente nos dois primeiros itens, declaramos o nosso provedor e sua versão de utilização. No restante do documento, declaramos os recursos que necessitam ser provisionados como um Resource Group e um App Service.

Perceba que a localização dos recursos Service Plan e App Service segue a mesma localização do Resource Group, isso é possível pois podemos utilizar declarações de recursos como váriáveis que retornam valores em tempo de execução.

Outro ponto importante é que eu estou definindo no Service Plan, mais precisamente na declaração sku, qual a camada de preço vai ser utilizada. No tier informamos a camada e no size informamos a instância dentro daquela camada, em nosso caso, utilizaremos a camada básica com a instância F1, que é a instancia gratuita.

Ficheiro variables.tf

variable "resource_group_name" {

  type        = string

  default     = "PagottoTerraformMedium"

}variable "resource_group_location" {

  type        = string

  default     = "Brazil South"

}variable "app_service_plan_name" {

  type = string

  default = "pagotto-terraform-plan"

}variable "app_service_name" {

  type = string

  default = "pagotto-terraform-appservice"

}

É o ficheiro onde fica as variáveis de configuração e seus respectivos valores no qual serão utilizados pelo ficheiro principal que em nosso caso é o main.tf

Sempre que definimos um ficheiro de variáveis de configuração, acessamos essas variáveis utilizando o seguinte padrão:

var.nomedavariavel

No ficheiro principal main.tf demonstrado acima, quando declaramos o Resource Group, perceba que em seu nome, utilizamos uma váriável que está no variables.tf

Para mais informações sobre variáveis de configuração, consulte
Input Variables — Configuration Language — Terraform by HashiCorp

A imagem abaixo mostra como fica a organização dos ficheiros

Interface gráfica do usuário, Texto, Aplicativo, Teams

O conteúdo gerado por IA pode estar incorreto.

Comandos

Agora vamos abordar alguns comandos básicos e essenciais para o funcionamento do Terraform.

Terraform Init
Esse é o primeiro comando que utilizamos na execução do Terraform sendo responsável por iniciar a execução do nosso ficheiro. Nesse passo é verificado o provider que será utilizado e realizado todos os downloads das dependências necessárias.

Caso você opte por modificar o provider, esse comando necessita ser executado novamente para realizar o download dos componentes necessários daquele novo provider.

terraform init

Essa é uma imagem de como ficaria os dois ficheiros antes de rodar comando acima.

Interface gráfica do usuário, Texto, Aplicativo, Teams

O conteúdo gerado por IA pode estar incorreto.

Após rodar o comando acima, perceba que é realizado o download das dependências necessárias do provider em especifico, para o terraform conseguir executar os próximos passos.

Tela de computador com texto preto sobre fundo branco

O conteúdo gerado por IA pode estar incorreto.

Terraform Plan
Nesse comando, o Terraform irá ler todo o ficheiro de recursos (main.tf) e criará um plano de execução, ou seja, o Terraform irá gerar um novo documento contendo quais recursos precisam ser criados, modificados ou removidos.

Nessa etapa o terraform não executará nenhum tipo de ação no provedor de nuvem.

terraform plan -out="main.tfplan"

Texto

O conteúdo gerado por IA pode estar incorreto.

Na imagem acima, executamos o comando mencionado acima e perceba que foi criado um novo ficheiro com o nome main.tfplan que funciona como um passo a passo que o Terraform utilizará para a criação de recursos no provedor de nuvem.

Ao final desse comando, é exibido a quantidade de recursos que vão ser criados (3 to add), a quantidade de recursos que vão ser atualizados (0 to change) e a quantidade de recursos que vão ser excluídos (0 to destroy).

Terraform Apply
Esse é o comando responsável por aplicar realmente o plano de execução gerado no passo anterior, ou seja, ele vai acessar sua conta no provedor de nuvem e provisionará todos os recursos que foi definido.

terraform apply "main.tfplan"

Tela de computador com texto preto sobre fundo branco

O conteúdo gerado por IA pode estar incorreto.

Perceba que ele cria um ficheiro “terraform.tfstate” que é responsável por manter todo o histórico de recursos em seu provedor e que será utilizado pelo terraform para a criação de novos recursos e também principalmente para alteração de recursos.

O ficheiro “terraform.tfstate” portanto tem um papel fundamental para toda a evolução da sua infraestrutura, pois é nele que está contido todo o histórico de provisionamento da sua infraestrutura e o próprio terraform em futuras ações, irá ler esse ficheiro e comparar com o ficheiro “main.tf” para definir o que precisa ser adicionado, alterado ou deletado.

Uma importante observação é que a exclusão desse aquivo pode trazer grandes problemas no funcionamento do terraform, uma vez que o próprio terraform não terá mais acesso ao ficheiro de estado da sua infraestrutura, pois foi deletado e com isso, ele não sabe o que está provisionado ou não em sua infraestrutura, causando muitos conflitos de recursos e erros de funcionamento.

A imagem abaixo, mostra os recursos provisionados no Azure, após a execusão do comando apply

Tela de computador com jogo

O conteúdo gerado por IA pode estar incorreto.

Terraform Destroy
Esse comando é responsável por excluir todos os recursos presentes no plano de execução gerado pelo comando “terraform plan”

terraform destroy

Tela de computador com texto preto sobre fundo branco

O conteúdo gerado por IA pode estar incorreto.

Na imagem acima, executamos o comando destroy e todos os recursos foram excluídos do nosso provedor conforme mostra a imagem abaixo.

Tela de celular com aplicativo aberto

O conteúdo gerado por IA pode estar incorreto.

Importante salientar que o ficheiro “terraform.tfstate” foi atualizado com as informações de exclusão dos recursos.

Terraform fmt
Para realizar a identação do código do ficheiro do terraform, basta executar o seguinte comando

terraform fmt

Para conhecer outros comandos, acesse esse link:
Terraform CLI Documentation — Terraform by HashiCorp

Versionamento (terraform.tfstate)

Como dito anteriormente, o versionamento é essencial para o correto funcionamento do terraform, pois é através dele que o terraform tem a inteligência necessária para saber quais recursos serão criados, atualizados ou excluídos em nossa infraestrutura.

O versionamento é feito através de um ficheiro que contém todo o histórico de modificações da sua infraestrutura.

No exemplo acima o ficheiro de versionamento está localmente em nossa máquina, porém para uma maior segurança, podemos armazenar esse ficheiro em algum Storage de algum provedor de nuvem (AWS S3, Azure Blob Storage, Google Cloud Storage, entre outros).

Conclusão

Como vimos acima, o terraform é uma excelente e poderosa ferramenta que nos auxilia na criação, alteração e exclusão de recursos nos provedores de serviços através de código, evitando a necessidade de provisionamento manual através do portal do provedor.
Podemos combinar o terraform com as pipelines de CI / CD das nossas aplicações com o objetivo de provisionar toda a infraestrutura antes do deploy da aplicação, potencializando a velocidade de entrega de novos produtos uma vez que toda a nossa infraestrutura também estará automatizada.

Gostou do assunto? Ficou com alguma dúvida? Deixe nos comentários

Até mais!

Referências

Terraform by HashiCorp

 


Nenhum comentário:

Postar um comentário