O Terraform é a principal ferramenta de infraestrutura como código (IaC) do mercado, desenvolvida pela HashiCorp. Com ele você descreve sua infraestrutura em arquivos .tf e aplica mudanças de forma previsível e rastreável em dezenas de providers — AWS, Azure, GCP, Docker e muito mais.
Neste artigo você vai instalar o Terraform no Debian 12 (Bookworm) a partir do repositório oficial da HashiCorp e validar a instalação com um exemplo prático: subir um container NGINX com Docker gerenciado pelo Terraform.
Segurança: sempre verifique a impressão digital (fingerprint) da chave GPG antes de adicionar repositórios externos. O passo de verificação está incluído abaixo.
Pré-requisitos
Atualize o sistema e instale as dependências necessárias:
sudo apt-get update
sudo apt-get install -y gnupg ca-certificates lsb-release wget curl
-
gnupgeca-certificates— verificação de assinaturas GPG -
lsb-release— obtém o codinome da distribuição de forma confiável
1. Adicionar o repositório oficial da HashiCorp
Baixe e registre a chave GPG no formato esperado pelo APT:
wget -O- https://apt.releases.hashicorp.com/gpg | \
sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
Adicione o repositório usando o codinome da sua distro e a arquitetura detectadas automaticamente:
CODENAME=$(lsb_release -cs 2>/dev/null || grep -oP '(?<=VERSION_CODENAME=).*' /etc/os-release)
ARCH=$(dpkg --print-architecture)
echo "deb [arch=${ARCH} signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com ${CODENAME} main" | \
sudo tee /etc/apt/sources.list.d/hashicorp.list
O
lsb_release -csé a fonte principal; ogrepno/etc/os-releaseé o fallback casolsb-releasenão esteja disponível.
2. Instalar o Terraform
sudo apt-get update
sudo apt-get install -y terraform
Confirme a versão instalada:
terraform -version
Saída esperada (versão pode variar):
Terraform v1.10.x
on linux_amd64
Para instalar uma versão específica, use
sudo apt-get install -y terraform=1.9.8-1ou baixe o binário diretamente em releases.hashicorp.com.
3. Verificar a chave GPG (fingerprint)
Confirme que a chave instalada corresponde à publicada pela HashiCorp:
gpg --no-default-keyring \
--keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \
--fingerprint
Compare o fingerprint retornado com o valor oficial publicado em hashicorp.com/security. Se não bater, remova o keyring e refaça o processo.
4. Exemplo prático: Terraform + Docker + NGINX
Vamos provisionar um container NGINX via Terraform para validar a instalação.
Pré-requisitos do exemplo
- Docker instalado e em execução
- Usuário com permissão no socket Docker:
sudo usermod -aG docker $USER(relogin necessário)
Estrutura do projeto
mkdir -p ~/learn-terraform-docker-container
cd ~/learn-terraform-docker-container
Crie o arquivo main.tf:
nano main.tf
Arquivo main.tf
terraform {
required_version = ">= 1.5.0"
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.6"
}
}
}
provider "docker" {
host = "unix:///var/run/docker.sock"
}
resource "docker_image" "nginx" {
name = "nginx:latest"
keep_locally = false
}
resource "docker_container" "nginx" {
image = docker_image.nginx.image_id
name = "tutorial-nginx"
ports {
internal = 80
external = 8000
}
}
Fluxo de execução
1. Inicializar — baixa o provider Docker e cria o terraform.lock.hcl:
terraform init
2. Formatar e validar — garante que o código está correto antes de aplicar:
terraform fmt
terraform validate
3. Planejar — visualize o que será criado sem aplicar nada:
terraform plan
4. Aplicar — cria os recursos. Confirme digitando yes quando solicitado:
terraform apply
Verificar
Acesse http://localhost:8000 no navegador ou via curl:
curl -s -o /dev/null -w "%{http_code}" http://localhost:8000
# esperado: 200
Liste o container criado:
docker ps --filter name=tutorial-nginx
Destruir os recursos
Quando terminar, remova tudo o que o Terraform criou:
terraform destroy
Confirme com yes. Em pipelines automatizados, use --auto-approve com cautela, nunca em produção sem controles adicionais.
Referência rápida dos comandos
| Comando | O que faz |
|---|---|
terraform init |
Inicializa o projeto e baixa providers |
terraform fmt |
Formata os arquivos .tf
|
terraform validate |
Valida sintaxe e configurações |
terraform plan |
Mostra o que será criado/alterado/destruído |
terraform apply |
Aplica as mudanças |
terraform destroy |
Remove todos os recursos gerenciados |
Boas práticas
-
Trave versões: use
required_versioneversionnosrequired_providerspara evitar quebras por atualização automática -
Commit do lock file: versione o
terraform.lock.hclpara garantir builds reproduzíveis no time -
Nunca suba segredos em
.tf: use variáveis de ambiente,terraform.tfvars(fora do git) ou HashiCorp Vault -
Planeje antes de aplicar: em produção, sempre use
terraform plan -out=tfplane revise antes deterraform apply tfplan - Verifique fingerprints GPG ao adicionar novos repositórios
Top comments (0)