Serverless-пайплайны, cron и фоновая обработка
Запускайте cron-задачи, сценарии по вебхуку и многошаговые фоновые задачи как serverless-пайплайны: стадии, ретраи и fan-out на тех же функциях, что обслуживают ваш живой HTTP API.
Дальше по теме
Начать бесплатно →Как это работает
Как устроены serverless-пайплайны
Определите шаги
Выберите готовые функции как шаги пайплайна и свяжите их входы, выходы и зависимости между собой.
Соедините и запланируйте
Соедините шаги в DAG или последовательную цепочку, затем добавьте cron-триггеры или вебхук-слушатели, чтобы запуски стартовали автоматически.
Мониторьте в реальном времени
Следите за статусом, логами и выводом каждого шага в реальном времени и перезапускайте упавший шаг без перезапуска всего пайплайна.
Возможности
Для реальных сценариев
DAG-выполнение
Шаги выполняются параллельно везде, где позволяют зависимости, — полное разрешение зависимостей работает из коробки.
Вебхук-триггеры
Запускайте пайплайн из API или UI и передавайте структурированный payload прямо в первый шаг.
Ручное одобрение
Поставьте выполнение на паузу на любом шаге и требуйте подтверждения человека, прежде чем пайплайн пойдёт дальше.
Cron-расписание
Планируйте пайплайны обычным cron-выражением — ежедневные отчёты, батч-задачи, задачи очистки.
Пайплайны вызывают те же функции, что опубликованы за API-шлюзом.
Как выбрать модель
Пайплайны, прямые функции и асинхронные задачи
Пайплайны
Берите пайплайны, когда cron-задачам, сценариям по вебхуку или фоновым задачам нужны ретраи, ветвление, fan-out или пошаговая оркестрация нескольких функций.
Прямой хендлер
Оставайтесь на прямой функции, когда один HTTP-запрос быстро закрывается одним обработчиком шлюза — без cron, вебхуков и многошагового состояния.
Асинхронные задачи
Берите асинхронные задачи, когда вызывающей стороне нужен мгновенный ответ, а полный 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" } ] }
Последовательный пример (ночная обработка)
{ "schemaVersion": 1, "nodes": [ { "id": "cron", "kind": "cronTrigger", "name": "Nightly 02:00", "position": { "x": 0, "y": 0 }, "config": { "cron": "0 2 * * *", "timezone": "UTC" } }, { "id": "extract", "kind": "lambda", "name": "Extract", "position": { "x": 240, "y": 0 }, "config": { "functionId": "nightly-extract", "onError": "failPipeline" } }, { "id": "transform", "kind": "lambda", "name": "Transform", "position": { "x": 480, "y": 0 }, "config": { "functionId": "nightly-transform", "onError": "failPipeline" } }, { "id": "publish", "kind": "lambda", "name": "Publish", "position": { "x": 720, "y": 0 }, "config": { "functionId": "nightly-publish", "onError": "failPipeline" } } ], "edges": [ { "id": "e1", "sourceNodeId": "cron", "targetNodeId": "extract", "sourceHandle": "default" }, { "id": "e2", "sourceNodeId": "extract", "targetNodeId": "transform", "sourceHandle": "success" }, { "id": "e3", "sourceNodeId": "transform", "targetNodeId": "publish", "sourceHandle": "success" } ] }