Guia Técnico · Fevereiro 2026 · v1.0
Kestra
Plataforma open-source de orquestração declarativa de workflows — ETL, AI Agents, automações e pipelines em escala com YAML simples.
🟣 Open-Source
🟢 26k+ GitHub Stars
🔵 600+ Plugins
🟡 AI Agents Nativo
Workflows · ETL · Event-Driven · AI Orchestration · Kubernetes · YAML
Kestra é uma plataforma open-source de orquestração de workflows que permite definir, executar e monitorar pipelines complexos usando YAML simples. Fundada em 2021 e com suporte a 600+ integrações, é usada por empresas como Apple, Toyota, Bloomberg e JPMorgan Chase.
O grande diferencial é resolver a escolha falsa entre plataformas sem-código (inflexíveis) e frameworks em-código (complexos). No Kestra, você escreve YAML — qualquer engenheiro entende, qualquer linguagem funciona.
Problemas que resolve
🔄
Workflows Fragmentados
Substitui cron jobs, scripts bash e múltiplas ferramentas por orquestração unificada com visibilidade total.
🧩
DSL Proprietária Complexa
YAML declarativo simples — sem aprender Python-Airflow ou framework específico. Qualquer linguagem roda como task.
🔒
Vendor Lock-in
Apache 2.0 open-source. Deploy em qualquer cloud, Kubernetes ou on-premise sem dependência do vendor.
📊
Falta de Observabilidade
Logs em tempo real, métricas Prometheus, OpenTelemetry e dashboards integrados para ver cada task executada.
🤖
AI Workflows Manuais
AI Agents nativos (v1.0+) com memória, tools e multi-LLM support — orquestre agentes com YAML como qualquer outra task.
⚡
Escala Limitada
Core em Java suporta milhares de execuções concorrentes. Kafka Enterprise para 1000s execuções/segundo.
GitHub & Comunidade
✅ Status de maturidade: Production-ready com uso confirmado em Apple, Toyota, Bloomberg, JPMorgan Chase. Kestra 1.0 LTS lançado com AI Agents nativos.
Fluxo de Execução
Trigger
schedule/webhook/event
→
Message Queue
Kafka / In-memory
→
Executor
Distributed
Worker Pool
Horizontal scale
→
Task Runner
Python/Shell/Script
→
Storage
S3/GCS/Local
Repository
PostgreSQL
→
Web UI
8080
→
Observability
Prometheus / OTel
4 Pilares de Infraestrutura
| Componente | Dev (padrão) | Produção | Enterprise |
| Storage | Local filesystem | S3 / GCS / Azure Blob | Multi-cloud |
| Queue | In-memory | Database queues | Kafka (massivo) |
| Repository | H2 (embedded) | PostgreSQL | PostgreSQL + HA |
| Plugins | Core plugins | 600+ marketplace | Custom SDK |
Stack Tecnológico
| Camada | Tecnologia | Por quê |
| Core / Executor | Java | Suporte a milhares de threads concorrentes |
| Banco de Dados | PostgreSQL | Persistência de flows, executions, logs |
| Mensageria | Kafka (Enterprise) | 1000+ execuções/segundo |
| Logs / Search | Elasticsearch | Busca full-text em logs históricos |
| Métricas | Prometheus + OpenTelemetry | Integração com Grafana, Datadog, etc. |
| UI | Web (topology visualization) | Editor YAML + DAG visual integrado |
O Kestra roda em um único container para desenvolvimento. Em produção usa PostgreSQL + workers distribuídos. No Enterprise adiciona Kafka para throughput massivo.
| Método | Caso de Uso | Complexidade |
| Docker Compose + PostgreSQL | Dev e staging com persistência — recomendado para começar | ⭐ Fácil |
| Docker single container | Prototipagem rápida (H2 embedded, sem persistência) | ⭐ Fácil |
| Kubernetes + Helm | Produção enterprise, scaling automático | ⭐⭐⭐ Complexo |
| Railway / Render | Cloud simples, ~$5-10/mês | ⭐⭐ Médio |
| JAR Standalone | VMs customizadas | ⭐⭐ Médio |
3.1 Docker (teste rápido — sem persistência)
# Iniciar Kestra (banco H2 em memória — reiniciar apaga tudo)
docker run --pull=always --rm -it \
-p 8080:8080 \
--user=root \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /tmp/kestra-storage:/app/storage \
kestra/kestra:latest server local
# Acessar UI
open http://localhost:8080
3.2 Docker Compose com PostgreSQL (recomendado para dev)
# docker-compose.yml
version: '3.8'
services:
postgres:
image: postgres:15
environment:
POSTGRES_DB: kestra
POSTGRES_USER: kestra
POSTGRES_PASSWORD: kestra
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -d kestra -U kestra"]
interval: 5s
kestra:
image: kestra/kestra:latest
entrypoint: /bin/bash
command: -c "kestra server standalone"
depends_on:
postgres:
condition: service_healthy
environment:
KESTRA_CONFIGURATION: |
datasources:
postgres:
url: jdbc:postgresql://postgres:5432/kestra
username: kestra
password: kestra
kestra:
repository:
type: postgres
storage:
type: local
local:
base-path: /app/storage
ports:
- "8080:8080"
- "8081:8081"
volumes:
- kestra-data:/app/storage
- /var/run/docker.sock:/var/run/docker.sock
volumes:
postgres-data:
kestra-data:
# Subir
docker compose up -d
# Verificar logs
docker compose logs -f kestra
# Parar
docker compose down
3.3 Kubernetes com Helm (produção)
# Adicionar repositório
helm repo add kestra https://helm.kestra.io
helm repo update
# Deploy em desenvolvimento (inclui PostgreSQL + MinIO)
helm install kestra kestra/kestra-starter
# Deploy em produção (configure seu próprio PostgreSQL)
helm install kestra kestra/kestra \
--set kestra.configuration.datasources.postgres.url="jdbc:postgresql://seu-postgres:5432/kestra" \
--set kestra.configuration.datasources.postgres.username="kestra" \
--set kestra.configuration.datasources.postgres.password="sua-senha" \
--set kestra.configuration.kestra.storage.type="s3" \
--set kestra.configuration.kestra.storage.s3.bucket="seu-bucket"
3.4 Variáveis de Ambiente Importantes
| Variável | Descrição | Exemplo |
KESTRA_CONFIGURATION | Config YAML inline (alternativa ao arquivo) | ver exemplo acima |
SECRET_NOME | Secret injetado como {{ secret('NOME') }} nos flows | SECRET_OPENAI_KEY=sk-... |
JAVA_OPTS | Ajuste de memória JVM | -Xmx4g |
✅ UI acessível em :8080 · /health retorna OK · Primeiro flow de teste funciona
4.1 Estrutura Mínima
id: hello_world # identificador único dentro do namespace
namespace: company.team # organização hierárquica (imutável após criação)
description: |
Meu primeiro workflow no Kestra
tasks:
- id: log_mensagem
type: io.kestra.plugin.core.log.Log
message: "Hello, Kestra! 🚀"
4.2 Inputs, Triggers, Outputs e Error Handling
id: pipeline_completo
namespace: company.data
# Inputs fortemente tipados (STRING, INTEGER, BOOLEAN, FILE, DATE...)
inputs:
- id: data_ref
type: STRING
defaults: "{{ now | date('yyyy-MM-dd') }}"
- id: batch_size
type: INTEGER
defaults: 1000
# Triggers: agendamento, webhook, evento de arquivo, mensageria
triggers:
- id: execucao_diaria
type: io.kestra.plugin.core.trigger.Schedule
cron: "0 2 * * *" # toda noite às 2h
tasks:
- id: buscar_dados
type: io.kestra.plugin.core.http.Request
uri: "https://api.exemplo.com/dados?data={{ inputs.data_ref }}"
method: GET
- id: transformar
type: io.kestra.plugin.scripts.python.Script
script: |
import json
dados = json.loads('{{ outputs.buscar_dados.body }}')
print(json.dumps([{**item, "processado": True} for item in dados]))
- id: salvar_banco
type: io.kestra.plugin.jdbc.postgresql.Query
url: "{{ secret('DATABASE_URL') }}"
sql: |
INSERT INTO dados_processados (data, conteudo)
VALUES ('{{ inputs.data_ref }}', '{{ outputs.transformar.vars.result }}')
# Output do flow
outputs:
- id: resultado
type: STRING
value: "Concluído em {{ now }}"
# Error handling: executa se qualquer task falhar
errors:
- id: notificar_falha
type: io.kestra.plugin.slack.IncomingWebhook
url: "{{ secret('SLACK_WEBHOOK') }}"
payload: |
{"text": "❌ Pipeline falhou: {{ exception.message }}"}
4.3 Paralelismo, ForEach e Condicional
id: processamento_paralelo
namespace: company.analytics
tasks:
# Execução paralela de múltiplas tasks
- id: paralelo
type: io.kestra.plugin.core.flow.Parallel
concurrencyLimit: 3 # máximo 3 simultâneas (0 = ilimitado)
tasks:
- id: fonte_a
type: io.kestra.plugin.scripts.python.Script
script: "print('processando fonte A')"
- id: fonte_b
type: io.kestra.plugin.scripts.python.Script
script: "print('processando fonte B')"
# Iteração (ForEach) com lista dinâmica
- id: para_cada_item
type: io.kestra.plugin.core.flow.ForEach
values: "{{ outputs.fonte_a.vars.lista | json }}"
concurrencyLimit: 5
tasks:
- id: processar_item
type: io.kestra.plugin.core.log.Log
message: "Processando: {{ item }}"
# Condicional: só executa se condição for verdadeira
- id: condicional
type: io.kestra.plugin.core.flow.If
condition: "{{ outputs.fonte_a.vars.count > 0 }}"
then:
- id: sucesso
type: io.kestra.plugin.core.log.Log
message: "Dados encontrados!"
else:
- id: sem_dados
type: io.kestra.plugin.core.log.Log
message: "Nenhum dado para processar"
4.4 Retry, Timeout e Tolerância a Falhas
tasks:
- id: api_instavel
type: io.kestra.plugin.core.http.Request
uri: "https://api-instavel.exemplo.com/dados"
timeout: PT30S # 30 segundos por tentativa
retry:
type: EXPONENTIAL # CONSTANT ou EXPONENTIAL
interval: PT5S # intervalo inicial
maxInterval: PT5M # intervalo máximo
maxAttempts: 5
multiplier: 2.0 # dobra a cada tentativa
# Permite falha sem parar o flow
- id: step_opcional
type: io.kestra.plugin.core.flow.AllowFailure
tasks:
- id: tarefa_opcional
type: io.kestra.plugin.core.log.Log
message: "Esta task pode falhar sem problemas"
4.5 Subflows (Modularidade)
# flow principal: chama subflow reutilizável
id: pipeline_principal
namespace: company.pipelines
tasks:
- id: notificar
type: io.kestra.plugin.core.flow.Subflow
namespace: company.helpers
flowId: enviar_notificacao
inputs:
canal: "#equipe-dados"
mensagem: "Pipeline concluído! {{ execution.id }}"
wait: true # aguarda subflow finalizar
4.6 Webhook Trigger
id: api_trigger
namespace: company.webhooks
triggers:
- id: receber_webhook
type: io.kestra.plugin.core.trigger.Webhook
key: "{{ secret('WEBHOOK_SECRET') }}"
tasks:
- id: processar
type: io.kestra.plugin.core.log.Log
message: "Webhook recebido: {{ trigger.body | json }}"
URL gerada automaticamente: https://seu-kestra/api/v1/executions/webhook/{namespace}/{flowId}/{key}
💡 Pebble Template Engine: Kestra usa {{ }} para expressões dinâmicas. Acesse outputs ({{ outputs.task_id.value }}), inputs ({{ inputs.nome }}), secrets ({{ secret('KEY') }}), e env ({{ env.VARIABLE }}).
Cada plugin expõe tasks e triggers que se integram diretamente ao YAML. Disponíveis no Kestra Plugin Marketplace.
🗄️ Bancos de Dados 40+
PostgreSQL · MySQL · Oracle · SQL Server · DuckDB · Snowflake · BigQuery · Redshift · ClickHouse · SQLite
☁️ AWS 30+
S3 · Lambda · EC2 · RDS · DynamoDB · SQS · SNS · EventBridge · Glue · Athena · EMR · ECS · ECR
🌐 Google Cloud 25+
Cloud Storage · BigQuery · Pub/Sub · Compute Engine · Dataflow · Dataproc · Cloud Run · Artifact Registry
🔷 Azure 20+
Blob Storage · Data Lake · Synapse · Event Hubs · Service Bus · Functions · Container Instances · Cosmos DB
🤖 IA & LLMs 15+
OpenAI (GPT-4) · Anthropic (Claude) · Google Gemini · Mistral · Ollama · AWS Bedrock · LangChain4j · DALL-E · Embeddings
📊 Data Stack 20+
dbt · Airbyte · Fivetran · Apache Spark · Kafka · RabbitMQ · Flink · Soda (data quality) · Great Expectations
🐳 Infraestrutura 15+
Kubernetes (Jobs/Pods) · Docker · Terraform · Ansible · Helm · GitHub Actions · GitLab CI
💬 Comunicação 10+
Slack · Email (SMTP) · Webhooks HTTP · PagerDuty · Telegram · Microsoft Teams
🏢 Negócios 10+
Salesforce · Airtable · Jira · HubSpot · Notion · Shopify · Stripe · Zendesk
📜 Scripts Qualquer linguagem
Python · Node.js · R · Go · Shell · PowerShell · Java · Ruby — isolados em container com dependências independentes
Exemplo: Script Python com dependências
- id: analise_python
type: io.kestra.plugin.scripts.python.Script
beforeCommands:
- pip install pandas numpy scikit-learn -q # instala no container isolado
script: |
import pandas as pd
import numpy as np
df = pd.read_csv("{{ inputs.arquivo }}")
resultado = df.groupby('categoria').agg({'valor': 'sum'})
print(resultado.to_json())
💡 Cada task de script roda em seu próprio container isolado. Sem conflito de dependências entre tasks — instale o que precisar em cada uma.
Kestra 1.0 introduz suporte nativo a AI Agents — workflows dinâmicos que raciocinam, usam ferramentas e se adaptam autonomamente. Integração com 8+ providers de LLM diretamente no YAML.
✅ Novidade em Kestra 1.0: AI Agents com memória persistente, tools (web search, code execution, flow caller, MCP client) e suporte a Claude, GPT-4, Gemini, Mistral, Ollama e Bedrock.
6.1 Provedores LLM Suportados
| Provider | Modelos | Plugin |
| Anthropic Claude | Claude 3.5 Sonnet/Haiku, Claude 4 | io.kestra.plugin.ai.anthropic.* |
| OpenAI | GPT-4o, GPT-4, o1, o3 | io.kestra.plugin.ai.openai.* |
| Google Gemini | Gemini 2.0, 2.5 Pro | io.kestra.plugin.ai.google.* |
| Mistral | Mistral Large, Pixtral | io.kestra.plugin.ai.mistral.* |
| Ollama (local) | Llama 3, DeepSeek, Qwen | io.kestra.plugin.ai.ollama.* |
| AWS Bedrock | Multi-provider via AWS | io.kestra.plugin.aws.bedrock.* |
6.2 Chat Completion Simples
id: resumo_com_claude
namespace: company.ai
inputs:
- id: texto
type: STRING
tasks:
- id: chamar_claude
type: io.kestra.plugin.ai.anthropic.ChatCompletion
model: claude-3-5-sonnet-20241022
apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
systemMessage: |
Você é um especialista em resumos concisos.
Resuma em no máximo 3 bullet points.
userMessage: |
Resuma este texto:
{{ inputs.texto }}
maxTokens: 500
temperature: 0.3
outputs:
- id: resumo
type: STRING
value: "{{ outputs.chamar_claude.message }}"
6.3 AI Agent com Ferramentas (Autonomo)
id: agente_pesquisador
namespace: company.ai
inputs:
- id: topico
type: STRING
tasks:
- id: agente
type: io.kestra.plugin.ai.agent.Agent
llmProvider: anthropic
model: claude-3-5-sonnet-20241022
apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
systemMessage: |
Você é um pesquisador. Busque informações sobre o tópico,
analise os resultados e produza um relatório estruturado.
userMessage: "Pesquise sobre: {{ inputs.topico }}"
tools:
- type: WebSearch # busca na web
- type: CodeExecution # executa código Python
language: python
- type: FlowCaller # chama outros flows
namespace: company.helpers
- type: McpClient # conecta a MCP servers
serverUrl: "http://meu-mcp:3000"
maxIterations: 10 # limite de iterações do agente
6.4 Pipeline Multi-Agente
id: pipeline_multi_agente
namespace: company.ai
tasks:
# Agente 1: coleta e resume dados
- id: agente_coletor
type: io.kestra.plugin.ai.agent.Agent
llmProvider: anthropic
model: claude-3-5-haiku-20241022 # modelo mais rápido/barato
apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
systemMessage: "Colete e resuma os dados brutos"
userMessage: "Processe: {{ inputs.dados_brutos }}"
tools:
- type: CodeExecution
# Agente 2: analisa e decide (modelo mais poderoso)
- id: agente_analista
type: io.kestra.plugin.ai.agent.Agent
llmProvider: anthropic
model: claude-3-5-sonnet-20241022
apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
systemMessage: "Analise o resumo e tome decisões"
userMessage: "Análise: {{ outputs.agente_coletor.output }}"
# Notificar resultado
- id: notificar
type: io.kestra.plugin.slack.IncomingWebhook
url: "{{ secret('SLACK_WEBHOOK') }}"
payload: |
{"text": "{{ outputs.agente_analista.output }}"}
6.5 AI Copilot (IDE)
O AI Copilot integrado converte linguagem natural em YAML:
- Descreva em inglês/português → gera o flow YAML completo
- Auto-complete inteligente para plugins e configurações
- Servidor MCP oficial para integração com Claude Code IDE
- Busca de documentação alimentada por IA diretamente na UI
O Kestra se encaixa no AIOS como a camada de orquestração de workflows de longa duração e pipelines — complementando o Claude Code (desenvolvimento) e n8n (automações simples).
💡 Regra de ouro: Use Claude Code para desenvolvimento e coding. Use Kestra para pipelines de dados, ETL e AI workflows autônomos escaláveis. Use n8n para automações simples de integração.
Casos de Uso AIOS com Kestra
🧠 Pipeline de Análise de Aulas
Automatizar o processamento de transcrições VTT: extrair → analisar com Claude → gerar abstracts → publicar no lesson-pages. Trigger: novo arquivo .vtt detectado.
🤖 MMOS Pipeline Automatizado
Orquestrar as 5 fases do Mind Mapping: coleta de fontes → análise → síntese → implementação → geração de system prompts com múltiplos agentes Claude.
📊 ETL para Supabase
Pipelines de dados agendados: extrair de APIs externas → transformar com Python/dbt → carregar no Supabase PostgreSQL. Retry automático em falhas.
📚 CreatorOS Batch Processing
Geração paralela de cursos: para cada curriculum → chamar Claude API → validar QA → salvar outputs. Processar dezenas de cursos simultaneamente.
🔔 Monitoramento e Alertas
Monitorar serviços (Render, Vercel, Supabase) a cada N minutos → detectar anomalias → alertar via Slack com contexto da falha.
🔄 Sync de Dados Cross-Sistema
Sincronizar dados entre sistemas: atitude-terminal → Supabase → planilhas → relatórios. Event-driven ou agendado.
Integração com Ferramentas AIOS
| Ferramenta AIOS | Como Kestra Integra | Exemplo |
| Claude Code / API | Plugin Anthropic nativo | Chamar Claude em qualquer task YAML |
| Supabase | Plugin PostgreSQL (Supabase é Postgres) | Queries, inserts, migrations agendadas |
| GitHub | Plugin GitHub + Webhook trigger | Deploy automático ao push |
| Slack | Plugin Slack nativo | Alertas, notificações de execução |
| n8n | HTTP Request (chamar webhook n8n) | Kestra orquestra, n8n executa integrações simples |
| Docker / Kubernetes | Plugins nativos | Deploy de containers como task |
Exemplo: Pipeline Lesson Analysis no Kestra
id: lesson_analysis_pipeline
namespace: aios.lesson_squad
inputs:
- id: vtt_file_path
type: STRING
- id: tipo_sessao
type: STRING # AULA ou PS
tasks:
# 5 agentes em paralelo
- id: agentes_paralelos
type: io.kestra.plugin.core.flow.Parallel
tasks:
- id: radar
type: io.kestra.plugin.ai.anthropic.ChatCompletion
model: claude-3-5-haiku-20241022
apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
systemMessage: "Você é o agente Radar. Analise sentimentos e emoções."
userMessage: "{{ read(inputs.vtt_file_path) }}"
- id: coletor
type: io.kestra.plugin.ai.anthropic.ChatCompletion
model: claude-3-5-haiku-20241022
apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
systemMessage: "Você é o agente Coletor. Extraia links e recursos."
userMessage: "{{ read(inputs.vtt_file_path) }}"
- id: didatico
type: io.kestra.plugin.ai.anthropic.ChatCompletion
model: claude-3-5-sonnet-20241022
apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
systemMessage: "Você é o agente Didático. Analise a qualidade pedagógica."
userMessage: "{{ read(inputs.vtt_file_path) }}"
- id: gps
type: io.kestra.plugin.ai.anthropic.ChatCompletion
model: claude-3-5-sonnet-20241022
apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
systemMessage: "Você é o agente GPS. Avalie os 10 aspectos GPS e 7 pilares ML."
userMessage: "{{ read(inputs.vtt_file_path) }}"
# Compilar resultados e gerar páginas HTML
- id: gerar_html
type: io.kestra.plugin.scripts.python.Script
script: |
# compilar outputs dos agentes e gerar HTML
radar = """{{ outputs.radar.message }}"""
gps = """{{ outputs.gps.message }}"""
# ... gera lesson-pages HTML ...
# Deploy no GitHub Pages / Vercel
- id: publicar
type: io.kestra.plugin.scripts.shell.Commands
commands:
- git add . && git commit -m "feat: análise {{ now }}" && git push
Comparativo Rápido
| Aspecto | Kestra | n8n | Airflow | Temporal | Prefect |
| Sintaxe | YAML declarativo | Visual + JS | Python DAG | SDK code-first | Python decorators |
| AI Nativo | ✅ v1.0+ | ⚠️ Limitado | ❌ | ❌ | ⚠️ Parcial |
| Curva aprendizado | Baixa (YAML) | Baixa (visual) | Alta (Python+DAG) | Muito alta | Média |
| Escalabilidade | Enterprise | Small-medium | Alta (infra complexa) | Muito alta | Média |
| Self-hosting | ✅ Completo | ✅ Completo | ✅ Complexo | ✅ | ⚠️ Cloud-first |
| GitHub Stars | 26k | 173k | 40k+ | 12k | 18k |
| Licença | Apache 2.0 | Sustainable BSL | Apache 2.0 | MIT | Apache 2.0 |
Kestra vs n8n (foco AIOS)
🟣 Kestra — Use para
✓ Pipelines de dados complexos (ETL)
✓ AI Agents e orquestração de LLMs
✓ Workflows com lógica condicional e loops
✓ Escala com milhares de execuções/dia
✓ Scripts Python/Go/Shell em tasks isoladas
✓ Versionamento Git de workflows
✗ Comunidade menor que n8n (6x menos stars)
✗ Sem interface visual no-code drag-and-drop
🟡 n8n — Use para
✓ Automações rápidas de integração (API → API)
✓ Prototipagem visual sem código
✓ Usuários não-técnicos criando fluxos
✓ 400+ integrações prontas com UI
✓ Comunidade massiva (173k stars)
✗ AI Agents limitado (sem orquestração nativa)
✗ Escalabilidade limitada para big data
✗ Lógica complexa fica difícil de manter
Kestra vs Airflow
Kestra vence em
✓ Sintaxe YAML simples (vs Python DAG)
✓ Deploy mais simples (Docker vs Celery+Flower)
✓ UI moderna e integrada
✓ AI Agents nativos
✓ Performance Java vs Python overhead
Airflow vence em
✓ Comunidade dominante (40k+ stars)
✓ Ecossistema maduro (10+ anos)
✓ Providers cloud bem testados
✓ Managed service (MWAA, Cloud Composer)
Recomendação para AIOS
| Cenário | Ferramenta |
| AI Agents e LLM pipelines | Kestra 1.0 — AI nativo, YAML simples, multi-model |
| ETL e pipelines de dados | Kestra — melhor suporte a dados, performance Java |
| Automações simples de integração | n8n — visual, rápido, comunidade grande |
| Microservices durables (long-running) | Temporal — reliability garantida, SDK maduro |
| Data pipelines Python da equipe de dados | Airflow — se já existe, manter; se novo, Kestra |
Grátis
Pague apenas pela infra (cloud/VPS)
- Workflows ilimitados
- 600+ plugins
- AI Agents (v1.0+)
- Docker + Kubernetes
- Community support
- Sem RBAC/SSO
- Sem multi-tenancy
- Sem suporte SLA
Custom
Contato necessário (por instância)
- Tudo do Open-Source
- RBAC + SSO + SCIM
- Multi-tenancy
- High availability (HA)
- Audit logs + secrets
- Suporte dedicado + SLA
- Kafka queue (alta escala)
- Priority bug fixes
Custom
Hosted pela equipe Kestra
- Tudo do Enterprise
- Sem gerenciar infra
- Escala automática
- SLAs garantidos
- Backup automático
- Mais caro que self-hosted
Custo Estimado de Infraestrutura (Self-hosted)
| Ambiente | Setup | Custo/mês estimado |
| Dev / Teste | Docker Compose local | Grátis (máquina local) |
| Pequeno (Railway/Render) | 1 container + PostgreSQL managed | ~$10-25/mês |
| Médio (VPS) | 4 vCPU + 8GB RAM + PostgreSQL | ~$50-100/mês |
| Produção (K8s) | 3+ workers + HA PostgreSQL + S3 | ~$200-500/mês |
| Enterprise Scale | Kafka + Elasticsearch + K8s cluster | ~$1k+/mês |
💡 Para AIOS começando: Docker Compose local é o suficiente para desenvolvimento e pipelines internos. Para produção com alunos, Railway ou um VPS com 4GB RAM funciona bem por ~$20/mês.
Comandos Docker
docker compose up -dSubir em background
docker compose downParar
docker compose logs -f kestraVer logs
docker compose restart kestraReiniciar
curl localhost:8080/healthHealth check
curl localhost:8081/prometheusMétricas
open http://localhost:8080Abrir UI
GET /api/v1/flowsListar flows
POST /api/v1/executionsCriar execução
GET /api/v1/executions/{id}Ver execução
Estrutura de um Flow (anatomia completa)
id: meu_flow # obrigatório — único no namespace
namespace: empresa.equipe # obrigatório — hierárquico com pontos
description: | # markdown suportado
Descrição do flow
labels: # tags para organização
env: production
team: data
inputs: # parâmetros de entrada tipados
- id: nome
type: STRING
defaults: "valor_padrao"
required: false
variables: # variáveis estáticas do flow
api_url: "https://api.exemplo.com"
triggers: # como o flow é ativado
- id: agendamento
type: io.kestra.plugin.core.trigger.Schedule
cron: "0 * * * *"
tasks: # lista de tasks (executam sequencialmente por padrão)
- id: task_1
type: io.kestra.plugin.core.log.Log
message: "Iniciando"
outputs: # outputs exportados pelo flow
- id: resultado
type: STRING
value: "{{ outputs.task_1.value }}"
errors: # tasks executadas em caso de falha
- id: alerta_falha
type: io.kestra.plugin.core.log.Log
message: "Falhou: {{ exception.message }}"
concurrency: # controle de execuções simultâneas
limit: 1 # apenas 1 execução por vez
behavior: CANCEL # CANCEL ou QUEUE a nova
Links Úteis
✅ Kestra rodando em :8080 · Primeiro flow publicado · AI Agent configurado com ANTHROPIC_API_KEY