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
uvpackage 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:
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 (appendpara incremental,overwritepara 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.
- 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_dateestá no passado - Confirme se o
timezoneestá correto - Valide se o
intervalestá em segundos
- Verifique se o
dataset_idestá correto - Confirme se a query está retornando dados
- Valide as permissões de escrita no projeto
rj-iplanrio
