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
- Acesso de leitura ao projeto BigQuery
rj-iplanrio
- Permissões de colaborador no repositório GitHub
- Conhecimento básico de Git e GitHub
- Python 3.8+ instalado
uv
package manager instalado
🔧 Configuração Inicial
1. Clonar o Repositório
🚀 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. Usar Template Cookiecutter
O repositório utiliza cookiecutter para facilitar a criação de novas pipelines de forma padronizada. Os templates disponíveis emtemplates/
permitem gerar rapidamente a estrutura de diretórios e arquivos necessários para uma nova pipeline Prefect, incluindo Dockerfile, flow.py, prefect.yaml e pyproject.toml.
Para criar uma nova pipeline, instale uv
e rode:
2. Configurar flow.py
Após gerar o template, substitua os valores padrão no arquivoflow.py
pelos valores específicos da sua pipeline:
IMPORTANTE: É necessário solicitar à equipe de desenvolvimento da IplanRio para adicionar o usuário e senha do seu banco de origem no Infisical no caminho especificado em
infisical_secret_path
.
Sem essas credenciais configuradas, sua pipeline não conseguirá se conectar ao banco de dados.db_database
: Nome do banco de dados de origem (ex:banco1
)db_host
: Host do banco de dados de origem (ex:10.15.255.1
)db_port
: Porta de conexão do banco de dados de origem (ex:3306
)db_type
: Tipo do banco de dados de origem (ex:mysql
,postgres
, etc)dataset_id
: Dataset de destino no BigQuery (todas as extrações são adicionadas ao projetorj-iplanrio
)infisical_secret_path
: Caminho dos secrets no Infisical
3. Configurar prefect.yaml
Configure os schedules no arquivoprefect.yaml
conforme suas necessidades:
Schedule Overwrite
Schedule Incremental (Incremental)
interval
: Intervalo entre as runs em segundos (86400 = 24 horas)anchor_date
: Data de início do schedule em UTCtimezone
: Fuso horário (America/Sao_Paulo)slug
: Identificador único do scheduletable_id
: Nome da tabela no BigQuerydump_mode
: Modo de inserção (append
para incremental,overwrite
para substituição)partition_columns
: Coluna(s) para particionamentopartition_date_format
: Formato da data de particionamentobreak_query_frequency
: Frequência de particionamento (day
,month
,year
)break_query_start/end
: Período de dados a serem processados
4. Commit e Push
5. Pull Request
- Criar PR no GitHub
- Descrição: Explicar mudanças e impacto
- Review: Solicitar revisão da equipe IplanRio
- Testes: Garantir que todos os testes passem
- Teste em Staging: Após o deploy em staging funcionar, você já pode testar sua pipeline no ambiente de desenvolvimento
- Merge: Após aprovação, merge para
main
Workflow de CI/CD Automático
O repositório utiliza GitHub Actions para automatizar todo o ciclo de vida das pipelines, incluindo build, deploy e publicação de imagens Docker: 🚀 Deploy Automático dos Flows: O sistema possui dois workflows principais para deploy automático:-
.github/workflows/deploy-prefect-flows-staging.yaml
- Ambiente de Staging- Acionado a cada push em branches
staging/*
- Pode ser executado manualmente
- Monitora alterações em
pipelines/**
- Acionado a cada push em branches
-
.github/workflows/deploy-prefect-flows-prod.yaml
- Ambiente de Produção- Acionado a cada push na branch
master
- Pode ser executado manualmente
- Monitora alterações em
pipelines/**
- Acionado a cada push na branch
- Checkout do código-fonte
- Login no GitHub Container Registry (ghcr.io)
- Instalação das dependências Python com
uv
- Execução do script de deploy
.github/scripts/deploy_prefect_flows.py
- Faz o deploy automático de todos os flows definidos em
pipelines/*/prefect.yaml
- Caso algum deploy falhe, o workflow é interrompido e o erro é registrado nos logs
- Faz o deploy automático de todos os flows definidos em
.github/workflows/build-and-push-root-dockerfile.yaml
:
- Acionado: Em alterações no Dockerfile da raiz ou push na branch master
- Execução manual: Disponível quando necessário
- Processo:
- Build da imagem Docker definida no Dockerfile do repositório
- Publicação da imagem no GitHub Container Registry (
ghcr.io/${{ github.repository }}:latest
)
O workflow de staging permite testar suas pipelines em um ambiente isolado antes do deploy em produção.
Após o deploy em staging funcionar, você já pode testar sua pipeline no ambiente de desenvolvimento.
Apenas após o merge na branch master é que as pipelines são deployadas em produção.
IMPORTANTE: Se algum deploy falhar durante o processo, o workflow será interrompido e você precisará corrigir os problemas antes de tentar novamente.
- Acompanhe o progresso dos deploys na aba “Actions” do seu repositório
- Verifique os logs para identificar possíveis erros
- Aguarde a conclusão bem-sucedida antes de solicitar review da equipe
- Se houver falhas, corrija os problemas e faça novo commit - o CI será executado novamente
🔧 Troubleshooting
Problemas Comuns
Erro de conexão com banco de dados:- Verifique se as credenciais estão corretas no Infisical
- Confirme se o host e porta estão acessíveis
- Teste a conexão manualmente
- Verifique os logs na aba “Actions” do GitHub
- Confirme se todos os arquivos necessários foram commitados
- Valide a sintaxe do
prefect.yaml
- Verifique se o
anchor_date
está no passado - Confirme se o
timezone
está correto - Valide se o
interval
está em segundos
- Verifique se o
dataset_id
está correto - Confirme se a query está retornando dados
- Valide as permissões de escrita no projeto
rj-iplanrio