Terraform — Infraestrutura como Código
Provisiona e versiona infraestrutura de forma declarativa (linguagem HCL). Você descreve o estado desejado; o Terraform calcula e aplica as mudanças.
Fluxo básico
terraform init # baixa providers, prepara o diretório
terraform fmt # formata os arquivos
terraform validate # valida a sintaxe
terraform plan # mostra o que vai mudar (dry-run)
terraform apply # aplica as mudanças
terraform destroy # remove tudo que foi criado
Exemplo — provedor Docker (local, sem nuvem)
Bom para praticar sem gastar em cloud.
# main.tf
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0"
}
}
}
provider "docker" {}
resource "docker_image" "nginx" {
name = "nginx:latest"
keep_locally = false
}
resource "docker_container" "web" {
name = "web"
image = docker_image.nginx.image_id
ports {
internal = 80
external = 8080
}
}
terraform init && terraform apply
# nginx disponível em http://localhost:8080
Variáveis
# variables.tf
variable "porta" {
type = number
default = 8080
}
# uso: ports { external = var.porta }
terraform apply -var="porta=9090"
Outputs
output "container_id" {
value = docker_container.web.id
}
Estado (state)
O Terraform guarda o estado em terraform.tfstate. Em equipe, use backend remoto (S3, Terraform Cloud, GitLab) com state locking para evitar conflitos.
terraform {
backend "s3" {
bucket = "meu-tfstate"
key = "prod/terraform.tfstate"
region = "us-east-1"
}
}
Boas práticas
terraform plansempre antes deapply.- Nunca versione
*.tfstatenem.terraform/no Git (use.gitignore). - Separe ambientes (dev/prod) em diretórios ou workspaces.
- Segredos via variáveis de ambiente (
TF_VAR_senha) ou vault, nunca hard-coded. - Terraform provisiona; Ansible configura — costumam trabalhar juntos.