O Terraform é uma ferramenta de infraestrutura como código (IaC) desenvolvida pela HashiCorp. Ele permite descrever, provisionar e gerenciar recursos de infraestrutura de forma declarativa e versionada, facilitando automação, padronização e colaboração entre times de desenvolvimento e operações. Nesta série de artigos iremos demonstrar usos em ambientes cloud e on-premise; este primeiro post descreve a instalação do Terraform em Debian 12 "bookworm" e um exemplo prático usando o provider Docker para subir um contêiner NGINX.
Observação de segurança: siga as etapas de verificação da chave GPG e compare fingerprints com as fontes oficiais antes de confiar em repositórios externos.
Para mais informações, ou dúvidas consulte a documentação oficial.
Pré-requisitos
Execute os comandos abaixo para garantir que pacotes essenciais estejam instalados:
sudo apt-get update
sudo apt-get install -y gnupg ca-certificates lsb-release wget curl
gnupg e ca-certificates são necessários para verificar assinaturas.
lsb-release fornece o codinome da distribuição de forma robusta.
Instalação da chave GPG e adição do repositório oficial HashiCorp
Baixe e grave a chave em um keyring dedicado com o formato correto:
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
Este método grava a chave no formato esperado pelo APT.
Obtenha o codinome da release e a arquitetura de forma segura e adicione o repositório:
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
Esse procedimento usa lsb_release como principal fonte e faz um fallback quando necessário.
Atualize o cache APT:
sudo apt-get update
Instalação do Terraform
Após adicionar o repositório HashiCorp:
sudo apt-get install -y terraform
Verifique a versão instalada:
terraform -version
Se preferir uma versão específica, considere baixar o binário oficial ou usar o repositório de releases.
Verificação da impressão digital da chave (fingerprint)
Confirme a impressão digital do keyring recém-criado:
gpg --no-default-keyring --keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg --fingerprint
Compare o valor retornado com o fingerprint publicado pela HashiCorp nas páginas oficiais de empacotamento / repositório antes de prosseguir.
Exemplo prático: Terraform + Docker + NGINX
Pré-requisitos do exemplo
- Docker instalado e funcionando no host.
- Usuário com permissão para acessar o socket do Docker (ex.: membro do grupo docker) ou configuração de host remoto.
- Observe que o provider Docker do Terraform comunica-se com o daemon Docker via socket unix ou TCP
Estrutura do projeto
Crie o diretório de trabalho e o arquivo 'main.tf':
mkdir -p ~/learn-terraform-docker-container
cd ~/learn-terraform-docker-container
Arquivo main.tf
nano/vim main.tf
terraform {
required_version = ">= 1.5.0"
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.6.0" # ajuste conforme versão estável disponível no Registry
}
}
}
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
}
}
Inicializar e aplicar
Siga a sequência recomendada:
terraform init
terraform fmt
terraform validate
terraform plan -out=tfplan
terraform apply tfplan
ou
terraform apply
confirme digitando "yes" quando solicitado.
terraform init baixa providers e cria o arquivo terraform.lock.hcl. Recomenda-se commitar esse lockfile para reprodutibilidade em equipe e CI.
Verificação
Acesse http://localhost:8000 no navegador para verificar o NGINX (ou use curl).
Liste containers Docker:
docker ps -a
Destruir recursos
Para remover o contêiner:
terraform destroy
confirme com "yes" quando solicitado.
Em scripts automatizados, -auto-approve pode ser usado com cautela.
Fluxo recomendado e comandos úteis
terraform init - preparar o diretório e baixar providers.
terraform fmt - formata o HCL.
terraform validate - valida a sintaxe e configurações.
terraform plan - mostra mudanças previstas; grave o plano em CI com -out.
terraform apply - aplica mudanças.
terraform destroy - destrói recursos.
Boas práticas de versionamento, segurança e CI
Trave versões: use required_version e version nos required_providers.
Commit do terraform.lock.hcl para reprodutibilidade.
Evite inserir segredos em arquivos .tf. Use variáveis, Vault, ou mecanismos seguros de CI para secrets.
Em pipelines CI, evite -auto-approve em ambientes de produção sem controles adicionais.
Audite fingerprints de chaves GPG ao adicionar repositórios.
Referências
Guia oficial de empacotamento e instalação HashiCorp (instruções apt, GPG).
Documentação de instalação do Terraform (Downloads e instruções).
Tutorial oficial Terraform com Docker - exemplos de provider.
Registry Terraform - provider kreuzwerker/docker (verificar versão mais recente).
Repositório GitHub do provider Docker (código, releases e changelog).

Top comments (0)