Introdução ao OpenTofu: o fork open source do Terraform
1. Contexto e Origem do OpenTofu
Em agosto de 2023, a HashiCorp anunciou a mudança de licenciamento do Terraform de MPL 2.0 (Mozilla Public License) para BSL (Business Source License), uma licença menos permissiva que restringe o uso comercial do software. Essa decisão gerou forte reação na comunidade DevOps, que via o Terraform como uma ferramenta fundamental e aberta para Infraestrutura como Código (IaC).
A resposta foi rápida: a OpenTF Foundation foi criada por empresas como Gruntwork, Spacelift e Harness, com o objetivo de manter o Terraform verdadeiramente open source. Em setembro de 2023, o fork foi oficialmente nomeado OpenTofu, e em janeiro de 2024, a versão 1.6 foi lançada sob licença Apache 2.0, com governança da Linux Foundation.
As diferenças fundamentais incluem:
- Licenciamento: OpenTofu usa Apache 2.0, permitindo uso comercial irrestrito.
- Governança: Comunitária e transparente, com RFCs (Request for Comments) públicas.
- Filosofia: Foco em inovação aberta, sem restrições de funcionalidades para versões pagas.
2. Instalação e Primeiros Passos
A instalação do OpenTofu é simples e pode ser feita por diversos métodos:
# Linux (Ubuntu/Debian)
curl --proto '=https' --tlsv1.2 -fsSL https://get.opentofu.org/install.sh | sh
# macOS via Homebrew
brew install opentofu
# Docker
docker pull ghcr.io/opentofu/opentofu:latest
Um projeto básico consiste em arquivos .tf com sintaxe HCL (HashiCorp Configuration Language). Exemplo de main.tf:
terraform {
required_version = ">= 1.6"
backend "local" {}
}
provider "aws" {
region = "us-east-1"
}
resource "aws_s3_bucket" "example" {
bucket = "meu-bucket-opentofu-2024"
tags = {
Name = "Meu bucket OpenTofu"
Environment = "dev"
}
}
Comandos essenciais:
# Inicializar o diretório do projeto
tofu init
# Visualizar o plano de execução
tofu plan
# Aplicar as mudanças
tofu apply
# Destruir os recursos
tofu destroy
3. Compatibilidade com o Ecossistema Terraform
Um dos maiores diferenciais do OpenTofu é sua compatibilidade quase total com o ecossistema Terraform. Providers e módulos escritos para Terraform funcionam sem alterações no OpenTofu, pois ambos utilizam a mesma sintaxe HCL e o mesmo protocolo de providers.
Diferenças sutis incluem:
- Formato de estado: O OpenTofu adicionou campos extras no estado para suportar criptografia nativa, mas é compatível com estados existentes do Terraform.
- Sintaxe HCL: Pequenas extensões, como a função templatefile() com suporte a arquivos YAML.
Para migrar um projeto Terraform existente:
# 1. Substitua os binários do Terraform pelo OpenTofu
# 2. Execute tofu init para reconfigurar os backends
tofu init -migrate-state
# 3. Verifique o plano
tofu plan
# 4. Aplique sem alterações no estado
tofu apply
4. Recursos Exclusivos do OpenTofu
O OpenTofu introduziu funcionalidades inovadoras que não existem no Terraform:
Criptografia de Estado Nativa
terraform {
backend "s3" {
bucket = "meu-bucket-estado"
key = "terraform.tfstate"
region = "us-east-1"
encrypt = true
kms_key_id = "arn:aws:kms:..."
}
}
A criptografia é aplicada no lado do cliente antes de enviar o estado ao backend, garantindo segurança adicional.
Framework de Testes Integrado
# tests/example_test.tftest.hcl
run "test_bucket_creation" {
command = plan
assert {
condition = aws_s3_bucket.example.bucket == "meu-bucket-opentofu-2024"
error_message = "O nome do bucket está incorreto"
}
}
Execute com tofu test.
Gerenciamento de Providers Aprimorado
# cache de plugins para acelerar init
tofu providers cache --directory ~/.tofu/providers
5. Gerenciamento de Estado e Backends
O OpenTofu suporta todos os backends populares:
# Backend S3 com DynamoDB para lock
terraform {
backend "s3" {
bucket = "tofu-state-bucket"
key = "prod/terraform.tfstate"
region = "us-east-1"
dynamodb_table = "tofu-locks"
encrypt = true
}
}
Workspaces para isolamento de ambientes:
# Criar workspace para produção
tofu workspace new prod
# Listar workspaces
tofu workspace list
# Selecionar workspace
tofu workspace select dev
Bloqueio de estado remoto:
# Forçar desbloqueio (apenas em casos de falha)
tofu force-unlock <LOCK_ID>
6. Integração com CI/CD e Automação
Exemplo de pipeline com GitHub Actions:
# .github/workflows/tofu.yml
name: OpenTofu Deploy
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup OpenTofu
uses: opentofu/setup-opentofu@v1
with:
tofu_version: 1.7.0
- name: Tofu Init
run: tofu init
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: Tofu Plan
run: tofu plan -var-file=environments/prod.tfvars
- name: Tofu Apply
if: github.ref == 'refs/heads/main'
run: tofu apply -auto-approve -var-file=environments/prod.tfvars
Boas práticas de parametrização:
# environments/prod.tfvars
environment = "prod"
instance_type = "t3.large"
min_size = 3
max_size = 10
7. Considerações Finais e Roadmap
A governança comunitária do OpenTofu é transparente: todas as propostas de funcionalidades passam por RFCs públicas no repositório oficial. O roadmap inclui:
- Suporte nativo a módulos OCI (Open Container Initiative)
- Melhorias no test framework com suporte a mocking
- Provider Registry próprio independente do Terraform Registry
Quando escolher OpenTofu vs. Terraform:
- OpenTofu: Se você valoriza licenciamento open source, governança comunitária e novas funcionalidades como criptografia de estado.
- Terraform: Se sua organização já tem investimento em Terraform Cloud/Enterprise e precisa de suporte comercial da HashiCorp.
- Alternativas: Pulumi (multi-linguagem), Terragrunt (abstração sobre Terraform/OpenTofu).
O OpenTofu não é apenas um fork — é um movimento da comunidade para garantir que IaC permaneça acessível, inovador e verdadeiramente aberto.
Referências
- Documentação Oficial do OpenTofu — Guia completo de instalação, configuração e comandos.
- OpenTF Foundation Announcement — Anúncio oficial da fundação e motivações para o fork.
- Migrating from Terraform to OpenTofu — Artigo técnico comparando as ferramentas e guia de migração.
- OpenTofu GitHub Repository — Código fonte, issues e RFCs para contribuição.
- OpenTofu Test Framework Documentation — Documentação específica sobre testes integrados.
- HashiCorp BSL License Change Analysis — Anúncio original da HashiCorp que motivou o fork.