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+
uvpackage 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.3. Configurar direnv
Odirenv gerencia automaticamente variáveis de ambiente do repositório.
4. Instalar dependências
5. Configurar pre-commit hooks
🚀 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.2. Configurar flow.py
Editeflow.py com as configurações específicas da sua pipeline:
3. Configurar prefect.yaml
Configure os schedules no arquivoprefect.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.Schedule Incremental
Schedule incremental adiciona apenas dados novos ou atualizados. Use para tabelas fato ou registros transacionais com alto volume.4. Commit e Push
5. Criar Pull Request
- Criar PR no GitHub para a branch
staging/sua-pipeline - Descrever mudanças: Explique o objetivo da pipeline e impacto no projeto
- Solicitar review da equipe IplanRio
- Aguardar CI/CD: Todos os testes devem passar
- Testar em Staging: Valide a pipeline no ambiente de desenvolvimento após deploy
- 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:
- Checkout do código-fonte
- Login no GitHub Container Registry (ghcr.io)
- Instalação de dependências Python com
uv - 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
- Deploy automático de todos os flows em
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.- 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-clientoupsql
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_dateestá no passado (não no futuro) - Confirme
timezone: America/Sao_Paulo - Valide
intervalem segundos (86400 = 24 horas)
Dados Não Aparecem no BigQuery:
- Confirme
dataset_idcorreto no projetorj-iplanrio - Verifique se a query retorna dados executando-a manualmente
- Valide permissões de escrita no BigQuery (solicite ao IplanRio se necessário)
