Terraform: Infraestrutura como Código para Nuvens Híbridas e Multi-Cloud

O que é Infrastructure as Code e por que o Terraform lidera esse mercado?
Infrastructure as Code (IaC) é a prática de gerenciar servidores, bancos de dados, redes e outros recursos de infraestrutura através de arquivos de configuração — em vez de configurá-los manualmente ou via scripts imperativos. O Terraform, criado pela HashiCorp, é a ferramenta de IaC mais adotada do mercado por um motivo simples: ele é cloud-agnostic, o que significa que com a mesma sintaxe você gerencia recursos na AWS, Azure, Google Cloud, Oracle Cloud e até provedores menos conhecidos como DigitalOcean, Linode ou Vultr.
Diferente de ferramentas como CloudFormation (exclusiva AWS) ou ARM Templates (exclusiva Azure), o Terraform usa uma linguagem própria chamada HashiCorp Configuration Language (HCL), que é declarativa, legível e poderosa.
Instalação e primeiros passos
Instalar o Terraform é simples. No Linux e macOS:
# Linux (Ubuntu/Debian)
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform
# macOS
brew tap hashicorp/tap
brew install hashicorp/tap/terraformVerifique a instalação com terraform --version. Para Windows, basta baixar o binário ou usar o Chocolatey com choco install terraform.
Escrevendo seu primeiro manifesto
Vamos criar uma instância EC2 na AWS. Crie um arquivo chamado main.tf:
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "us-east-1"
}
resource "aws_instance" "meu_servidor" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "ServidorTerraform"
}
}Em seguida, execute os comandos:
terraform init # Baixa os providers e configura o backend
i> terraform plan # Mostra o que será criado (dry run)
terraform apply # Cria os recursos na nuvemO plan é uma das funcionalidades mais poderosas do Terraform — ele mostra exatamente o que será alterado antes de qualquer modificação real, permitindo revisão por pares (code review) da infraestrutura.
Gerenciamento de Estado (State)
O state file (terraform.tfstate) é o coração do Terraform. Ele mapeia os recursos declarados no código com os recursos reais no provedor de nuvem. Sem ele, o Terraform não sabe o que já foi criado.
Em ambientes profissionais, o state nunca deve ficar em disco local. Use backends remotos:
terraform {
backend "s3" {
bucket = "meu-bucket-terraform-state"
key = "dev/terraform.tfstate"
region = "us-east-1"
# Opcional: DynamoDB para lock
dynamodb_table = "terraform-state-lock"
}
}Com o DynamoDB como tabela de lock, duas pessoas nunca aplicarão alterações simultâneas — o Terraform trava o state durante a execução.
Variáveis, outputs e módulos
Para evitar repetição e criar infraestrutura reutilizável, o Terraform oferece três mecanismos essenciais:
Variáveis
variable "instance_type" {
description = "Tipo da instância EC2"
type = string
default = "t2.micro"
}
variable "ambiente" {
type = string
}Outputs
output "ip_publico" {
value = aws_instance.meu_servidor.public_ip
description = "IP público da instância"
}Módulos
Módulos permitem empacotar e reutilizar configurações completas:
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "5.0.0"
name = "minha-vpc"
cidr = "10.0.0.0/16"
azs = ["us-east-1a", "us-east-1b"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24"]
enable_nat_gateway = true
enable_vpn_gateway = false
tags = {
Terraform = "true"
Ambiente = var.ambiente
}
}Multi-Cloud na prática
Uma das maiores vantagens do Terraform é gerenciar múltiplos provedores no mesmo código:
# Provider AWS
provider "aws" {
region = "us-east-1"
}
# Provider Azure
provider "azurerm" {
features {}
}
# Provider GCP
provider "google" {
project = "meu-projeto"
region = "us-central1"
}
resource "aws_s3_bucket" "meu_bucket" {
bucket = "meu-bucket-aws-unicosufixo"
}
resource "azurerm_resource_group" "meu_rg" {
name = "meu-resource-group"
location = "Brazil South"
}
resource "google_storage_bucket" "meu_bucket_gcp" {
name = "meu-bucket-gcp"
location = "US"
}Isso permite estratégias como disaster recovery entre clouds, replicação geográfica e até migrações progressivas.
Terraform Cloud e Workspaces
Para times que não querem gerenciar backends manualmente, o Terraform Cloud oferece:
- Armazenamento remoto de state com versionamento
- Execução remota de planos e applies
- Integração com VCS (GitHub, GitLab, Bitbucket)
- Sentinel para políticas de compliance (ex: "proibir instâncias fora da região us-east-1")
- Workspaces para separar ambientes (dev, staging, prod)
terraform {
cloud {
organization = "minha-org"
workspaces {
name = "infra-prod"
}
}
}Boas práticas para Terraform em produção
- Use módulos do Terraform Registry: evite reinventar a roda. O registry tem módulos oficiais e da comunidade para VPC, EKS, RDS, etc.
- Versionamento do state: sempre habilite versionamento no bucket S3 para poder reverter o state em caso de corrupção.
- Separe ambientes: use diretórios diferentes ou workspaces para dev, staging e prod.
- terraform validate e fmt: execute
terraform validatepara checar sintaxe eterraform fmtpara formatar o código automaticamente. - CI/CD integrado: execute
terraform planem Pull Requests eterraform applyapenas após merge na branch principal. - Use .terraform.lock.hcl: mantenha o lock file no repositório para garantir que todos usem as mesmas versões de provider.
Conclusão
O Terraform transformou a maneira como equipes de infraestrutura trabalham. Com sua abordagem declarativa, suporte a centenas de provedores, gerenciamento de estado inteligente e forte ecossistema de módulos, ele se consolidou como a ferramenta padrão para IaC. Se você ainda não usa Terraform, comece hoje: instale, escreva um main.tf simples, execute terraform apply e veja a mágica acontecer. Sua infraestrutura — e sua equipe — vão agradecer.







