Skip to main content

Construindo uma Pipeline com Prefect 3

Este guia explica como criar e configurar pipelines de dados usando Prefect 3 na Prefeitura do Rio de Janeiro, seguindo as melhores práticas e padrões estabelecidos pela equipe IplanRio.

✅ Pré-requisitos

Acessos e Permissões

  • Acesso ao Tailscale para conexão à rede interna da Prefeitura
  • Permissão para acessar o Infisical (gerenciador de secrets)
  • Acesso de leitura ao projeto BigQuery rj-iplanrio
  • Permissões de colaborador no repositório GitHub
Caso não tenha acesso ao GitHub, BigQuery ou Infisical, solicite permissões no canal #peça-permissão do Discord da IplanRio.

Ambiente de Desenvolvimento

  • Python 3.13+
  • uv package manager
  • Editor de código (VSCode recomendado)
  • WSL 2 (usuários Windows)
  • Conhecimento básico de Git e GitHub

🔧 Configuração Inicial

1. Clonar o Repositório

2. Instalar Nix

O repositório utiliza Nix para gerenciar o ambiente de desenvolvimento.
Verifique a instalação:

3. Configurar direnv

O direnv gerencia automaticamente variáveis de ambiente do repositório.
Adicione o hook ao seu shell:

4. Instalar dependências

5. Configurar pre-commit hooks

Pre-commit hooks garantem qualidade do código antes do commit. Veja mais em pre-commit.com.

🚀 Boas Práticas de Desenvolvimento

1. Estrutura de Branch

IMPORTANTE: Use sempre o prefixo staging/ no nome da branch para que o CI/CD reconheça e processe sua pipeline automaticamente.

2. Nomenclatura de Pipelines

Siga o padrão estabelecido:

🧪 Criação de Nova Pipeline

1. Gerar Template com Cookiecutter

O repositório usa cookiecutter para criar pipelines padronizadas com Dockerfile, flow.py, prefect.yaml e pyproject.toml.
O comando solicitará informações sobre secretaria e pipeline:
Use nomes descritivos que identifiquem a secretaria e o tipo de dados. Exemplo: censo_escolar (SME), pacientes_upa (SMS), multas_transito (SMTR).

2. Configurar flow.py

Edite flow.py com as configurações específicas da sua pipeline:
Credenciais Obrigatórias: Solicite ao IplanRio para adicionar usuário e senha do banco de origem no Infisical no caminho especificado em infisical_secret_path. Sem essas credenciais, a pipeline não conseguirá se conectar ao banco de dados.
Parâmetros de Configuração:

3. Configurar prefect.yaml

Configure os schedules no arquivo prefect.yaml conforme suas necessidades:

Schedule Overwrite

Schedule overwrite substitui todos os dados da tabela a cada execução. Use para dados que devem refletir sempre o estado atual completo.
Use overwrite para tabelas dimensão ou cadastros que precisam refletir o estado atual completo, sem dados históricos.

Schedule Incremental

Schedule incremental adiciona apenas dados novos ou atualizados. Use para tabelas fato ou registros transacionais com alto volume.
Use incremental para dados que crescem continuamente (transações, eventos, logs). O particionamento otimiza queries e reduz custos no BigQuery.
Parâmetros de Schedule:

4. Commit e Push

Use Conventional Commits para mensagens padronizadas: feat:, fix:, docs:, refactor:.

5. Criar Pull Request

  1. Criar PR no GitHub para a branch staging/sua-pipeline
  2. Descrever mudanças: Explique o objetivo da pipeline e impacto no projeto
  3. Solicitar review da equipe IplanRio
  4. Aguardar CI/CD: Todos os testes devem passar
  5. Testar em Staging: Valide a pipeline no ambiente de desenvolvimento após deploy
  6. Merge: Após aprovação, faça merge para main

Workflow de CI/CD Automático

O repositório utiliza GitHub Actions para automatizar build, deploy e publicação de pipelines. 🚀 Deploy Automático O sistema possui workflows separados para staging e produção: 🔧 Processo de Deploy Ambos os workflows executam:
  1. Checkout do código-fonte
  2. Login no GitHub Container Registry (ghcr.io)
  3. Instalação de dependências Python com uv
  4. Execução do script .github/scripts/deploy_prefect_flows.py
    • Deploy automático de todos os flows em pipelines/*/prefect.yaml
    • Falhas interrompem o workflow e registram erro nos logs
🐳 Build da Imagem Base Workflow build-and-push-root-dockerfile.yaml:
  • Trigger: Alterações no Dockerfile raiz ou push em master
  • Processo: Build e publicação em ghcr.io/${{ github.repository }}:latest
Staging permite testar pipelines antes de produção. Após deploy em staging funcionar, teste no ambiente de desenvolvimento. Apenas após merge em master as pipelines são deployadas em produção.
Se algum deploy falhar, o workflow será interrompido. Corrija os problemas antes de tentar novamente.
📊 Monitoramento
  • Acompanhe progresso na aba Actions do GitHub
  • Verifique logs para identificar erros
  • Aguarde conclusão antes de solicitar review
  • Falhas requerem novo commit para re-executar CI/CD

🔧 Troubleshooting

Qual work-pool utilizar:

A escolha do work-pool depende de onde a pipeline será executada e dos recursos que ela precisa acessar.

Erro de Conexão com Banco de Dados:

  • Verifique credenciais no Infisical no caminho infisical_secret_path
  • Confirme acesso ao host e porta via Tailscale
  • Teste conexão manualmente com ferramenta como mysql-client ou psql

Falha no Deploy:

  • Verifique logs na aba Actions do GitHub
  • Confirme que todos os arquivos foram commitados (flow.py, prefect.yaml, Dockerfile)
  • Valide sintaxe YAML em yamllint.com

Pipeline Não Executa no Schedule:

  • Verifique se anchor_date está no passado (não no futuro)
  • Confirme timezone: America/Sao_Paulo
  • Valide interval em segundos (86400 = 24 horas)

Dados Não Aparecem no BigQuery:

  • Confirme dataset_id correto no projeto rj-iplanrio
  • Verifique se a query retorna dados executando-a manualmente
  • Valide permissões de escrita no BigQuery (solicite ao IplanRio se necessário)

📚 Recursos Adicionais