Orquestração de pipelines de dados usando Apache Airflow, incluindo execução de modelos dbt em produção.
airflow/
├── dags/ # DAGs do Airflow
│ ├── dbt_run_staging.py # Executa modelos staging (tag:stg) - 5min
│ └── dbt_run_int_mart.py # Executa modelos int+mart (tag:int,mart) - 5min
├── logs/ # Logs do Airflow
├── plugins/ # Plugins customizados
├── config/ # Configurações do Airflow
├── docker-compose.yml # Configuração dos serviços
└── .env # Variáveis de ambiente (não versionado)
- Frequência: A cada 5 minutos
- Descrição: Executa modelos dbt com tag "stg" (camada staging)
- Características:
- Captura automaticamente novos modelos com tag "stg"
- Sem retries (retries=0) em caso de falha
- Logs detalhados para debug (--debug)
- Comando:
dbt run --select tag:stg
- Frequência: A cada 5 minutos
- Descrição: Executa modelos dbt com tags "int" e "mart" (camadas intermediate e marts)
- Características:
- Captura automaticamente novos modelos com tags "int" ou "mart"
- Sem retries (retries=0) em caso de falha
- Logs detalhados para debug (--debug)
- Ordem de execução: intermediate → marts
- Comandos:
dbt run --select tag:intdbt run --select tag:mart
As credenciais do banco de dados são armazenadas como Airflow Variables. Configure pela interface web do Airflow:
- Acesse: Admin > Variables
- Clique em + para adicionar nova variável
- Adicione as seguintes variáveis:
| Key | Value | Description |
|---|---|---|
dbt_db_host_prod |
seu_ip_ou_host |
Host do banco de produção |
dbt_db_port_prod |
5432 |
Porta do banco (padrão: 5432) |
dbt_db_name_prod |
powerplants |
Nome do banco de dados |
dbt_db_user_prod |
seu_usuario |
Usuário do banco |
dbt_db_password_prod |
sua_senha |
Senha do banco |
IMPORTANTE: Ao adicionar dbt_db_password_prod, marque a checkbox "Secret" para ocultar a senha nos logs.
O projeto dbt está montado em /opt/dbt dentro do container do Airflow através do volume.
Configuração por Ambiente:
-
Local (Desenvolvimento):
- Defina
DBT_PROJECT_PATH=../axionics-dbtno arquivo.env - O volume será:
../axionics-dbt:/opt/dbt
- Defina
-
Produção (VPS):
- NÃO defina
DBT_PROJECT_PATHno arquivo.env(ou comente a linha) - O volume usará o default:
/opt/dbt:/opt/dbt - Certifique-se que o projeto dbt está em
/opt/dbtna VPS
- NÃO defina
O perfil dbt (profiles.yml) está em /opt/dbt/profiles.
Os modelos são organizados por tags no dbt_project.yml:
- Tag
stg: Modelos da camada staging (todos emmodels/staging/) - Tag
int: Modelos da camada intermediate (todos emmodels/intermediate/) - Tag
mart: Modelos da camada marts (todos emmodels/marts/)
Novos modelos são detectados automaticamente pelas DAGs se estiverem nos diretórios corretos.
# Subir os serviços
docker-compose up -d
# Ver logs
docker-compose logs -f
# Parar os serviços
docker-compose downO deploy em produção é automático via GitHub Actions:
- Faça commit das mudanças:
git add .
git commit -m "feat: adicionar DAGs de orquestração dbt"
git push origin main-
Aguarde ~2 minutos para o CI/CD aplicar as mudanças na VPS
-
As novas DAGs aparecerão no Airflow em até 30 segundos (configuração do
dag_dir_list_interval)
Para adicionar novos pacotes Python ao Airflow, edite a linha _PIP_ADDITIONAL_REQUIREMENTS na seção x-airflow-common do docker-compose.yml:
_PIP_ADDITIONAL_REQUIREMENTS: "apache-airflow-providers-postgres==6.5.0 dbt-core==1.9.1 dbt-postgres==1.9.1 seu-novo-pacote==versao"- URL:
http://seu-servidor:8080 - Usuário: Definido em
.env(AIRFLOW_USER) - Senha: Definida em
.env(AIRFLOW_PASSWORD)
- Acesse a interface web
- Vá em "DAGs"
- Procure por "dbt_run_*"
- Clique na DAG para ver histórico de execuções
- Clique na DAG
- Clique em um run específico
- Clique na task desejada
- Clique em "Log" para ver a saída completa
- Verifique se o arquivo está na pasta
dags/ - Aguarde até 30 segundos (intervalo de scan)
- Verifique logs:
docker-compose logs airflow-scheduler
- Verifique as Airflow Variables em Admin > Variables
- Confirme que
dbt_db_password_prodestá marcada como "Secret" - Teste manualmente executando a DAG
dbt_run_staging - Verifique os logs detalhados (modo debug está ativado)
- Verifique se
dbt-coreedbt-postgresestão em_PIP_ADDITIONAL_REQUIREMENTS - Reconstrua a imagem:
docker-compose build - Reinicie os serviços:
docker-compose up -d
O Airflow está na rede stack_net (externa), permitindo comunicação com outros serviços da stack (banco de dados, etc.).