Serverless-пайплайны, cron и фоновая обработка
Пайплайны для cron, сценариев по webhook и многошагового фона — стадии, повторы и fan-out с теми же функциями, что и у живого HTTP API.
Как это работает
Как устроены serverless-пайплайны
Определите шаги
Выберите функции как шаги пайплайна. Настройте входы, выходы и зависимости между ними.
Соедините и запланируйте
Свяжите шаги в DAG или последовательную цепочку. Добавьте cron-триггеры или webhook-слушатели.
Мониторьте в реальном времени
Наблюдайте статус, логи и вывод каждого шага в реальном времени. Перезапускайте упавшие шаги без перезапуска всего пайплайна.
Возможности
Для реальных сценариев
DAG-выполнение
Шаги выполняются параллельно там, где позволяют зависимости. Полное разрешение зависимостей из коробки.
Webhook-триггеры
Запускайте пайплайн через UI или API и передавайте структурированный payload в первый шаг.
Ручное одобрение
Пауза и ожидание подтверждения человека перед переходом к следующему шагу.
Cron-расписание
Запуск по расписанию — ежедневные отчёты, батч-задачи, очистка.
Пайплайны вызывают те же функции, что опубликованы за API-шлюзом.
Как выбрать модель
Пайплайны, прямые функции и асинхронные задачи
Пайплайны
Когда для cron, webhook-сценариев или фона нужны повторы, ветвления, fan-out или пошаговая оркестрация между функциями.
Прямой хендлер
Когда один HTTP-запрос быстро закрывается одним обработчиком шлюза без cron, webhookов и многошагового состояния.
Асинхронные задачи
Когда клиенту нужен быстрый ответ, а полный DAG из многих шагов не требуется — достаточно очереди фоновых задач.
Пример
DAG-пайплайн (ручной триггер)
{ "schemaVersion": 1, "nodes": [ { "id": "t1", "kind": "manualTrigger", "name": "Start", "position": { "x": 0, "y": 0 }, "config": {} }, { "id": "n1", "kind": "lambda", "name": "Classify intent", "position": { "x": 240, "y": 0 }, "config": { "functionId": "intent-classifier", "onError": "failPipeline" } }, { "id": "n2", "kind": "lambda", "name": "Billing agent", "position": { "x": 480, "y": 0 }, "config": { "functionId": "billing-agent", "onError": "failPipeline" } }, { "id": "r1", "kind": "respond", "name": "Done", "position": { "x": 720, "y": 0 }, "config": { "statusCode": 200, "bodyMapping": { "ok": true } } } ], "edges": [ { "id": "e1", "sourceNodeId": "t1", "targetNodeId": "n1" }, { "id": "e2", "sourceNodeId": "n1", "targetNodeId": "n2", "sourceHandle": "success" }, { "id": "e3", "sourceNodeId": "n2", "targetNodeId": "r1", "sourceHandle": "success" } ] }
Последовательный пример (ночная обработка)
{ "executionMode": "sequential", "trigger": { "type": "schedule", "cron": "0 2 * * *" }, "steps": [ { "id": "extract", "functionId": "nightly-extract" }, { "id": "transform", "functionId": "nightly-transform", "dependsOn": ["extract"] }, { "id": "publish", "functionId": "nightly-publish", "dependsOn": ["transform"] } ] }
Начать бесплатно
Задеплойте первую функцию за несколько минут. Карта не нужна.