Terraform no Linux: Infraestrutura como Código do Zero na AWS
Terraform é uma ferramenta de Infrastructure as Code (IaC) da HashiCorp que permite criar, modificar e destruir infraestrutura em nuvem usando arquivos de configuração versionáveis. Em vez de clicar no console da AWS, você descreve o que quer e o Terraform cria.
Por que usar Terraform?
- Versionável: infraestrutura no Git, com histórico completo de mudanças
- Reproduzível: recria o ambiente idêntico em qualquer conta/região em segundos
- Multi-cloud: o mesmo workflow para AWS, GCP, Azure, DigitalOcean e +300 providers
- Plan antes de aplicar: você vê exatamente o que vai mudar antes de confirmar
- Evita drift: o estado desejado no código é a fonte da verdade
Instalação no Linux
# Ubuntu/Debian — via repositório oficial HashiCorp
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 -y
terraform version
Estrutura de um Projeto Terraform
projeto/
├── main.tf # recursos principais
├── variables.tf # declaração de variáveis
├── outputs.tf # valores expostos após o apply
├── terraform.tfvars # valores das variáveis (não versionar com secrets!)
└── backend.tf # onde salvar o estado (S3, etc.)
Primeiro Recurso: EC2 na AWS
# main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = var.aws_region
}
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0" # Amazon Linux 2
instance_type = var.instance_type
tags = {
Name = "meu-servidor-web"
Environment = "producao"
ManagedBy = "terraform"
}
}
# variables.tf
variable "aws_region" {
description = "Região AWS"
type = string
default = "us-east-1"
}
variable "instance_type" {
description = "Tipo da instância EC2"
type = string
default = "t3.micro"
}
# outputs.tf
output "instance_id" {
value = aws_instance.web.id
}
output "instance_public_ip" {
value = aws_instance.web.public_ip
}
O Workflow Básico
# 1. Inicializa: baixa providers e configura o backend
terraform init
# 2. Valida a sintaxe dos arquivos .tf
terraform validate
# 3. Formata o código (boa prática antes de commitar)
terraform fmt
# 4. Mostra o plano de mudanças (read-only, não altera nada)
terraform plan
# 5. Aplica as mudanças (pede confirmação)
terraform apply
# 6. Aplica sem pedir confirmação (usar em CI/CD)
terraform apply -auto-approve
# 7. Destroi toda a infraestrutura
terraform destroy
Terraform State
O Terraform mantém um arquivo terraform.tfstate que registra o estado atual da infraestrutura. Em times, esse estado deve ser armazenado remotamente para evitar conflitos:
# backend.tf
terraform {
backend "s3" {
bucket = "meu-terraform-state"
key = "producao/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "terraform-lock" # evita apply simultâneo
encrypt = true
}
}
Módulos: Reutilizando Infraestrutura
Módulos são blocos reutilizáveis de infraestrutura. A comunidade já publicou centenas no registry.terraform.io:
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
single_nat_gateway = true
}
# Referencia o output do módulo
output "vpc_id" {
value = module.vpc.vpc_id
}
Comandos Úteis do Dia a Dia
# Ver o estado atual sem conectar à nuvem
terraform show
# Listar recursos no state
terraform state list
# Importar recurso existente para o state
terraform import aws_instance.web i-1234567890abcdef0
# Recarregar modules após alteração
terraform get -update
# Visualizar grafo de dependências
terraform graph | dot -Tsvg > grafo.svg
Terraform no Mercado
Terraform é a ferramenta de IaC mais pedida em vagas de DevOps, SRE e Cloud Engineer. A HashiCorp oferece a Terraform Associate, certificação acessível para quem tem 6 meses de prática — e que aparece com frequência crescente em job posts de vagas sênior.
A combinação LPIC-1 + Terraform + AWS é hoje o perfil mais demandado para posições de pleno/sênior em infraestrutura.