Пайплайны

Serverless-пайплайны, cron и фоновая обработка

Запускайте cron-задачи, сценарии по вебхуку и многошаговые фоновые задачи как serverless-пайплайны: стадии, ретраи и fan-out на тех же функциях, что обслуживают ваш живой HTTP API.

Дальше по теме

Начать бесплатно

Как устроены serverless-пайплайны

1

Определите шаги

Выберите готовые функции как шаги пайплайна и свяжите их входы, выходы и зависимости между собой.

2

Соедините и запланируйте

Соедините шаги в DAG или последовательную цепочку, затем добавьте cron-триггеры или вебхук-слушатели, чтобы запуски стартовали автоматически.

3

Мониторьте в реальном времени

Следите за статусом, логами и выводом каждого шага в реальном времени и перезапускайте упавший шаг без перезапуска всего пайплайна.

Для реальных сценариев

DAG-выполнение

Шаги выполняются параллельно везде, где позволяют зависимости, — полное разрешение зависимостей работает из коробки.

Вебхук-триггеры

Запускайте пайплайн из API или UI и передавайте структурированный payload прямо в первый шаг.

Ручное одобрение

Поставьте выполнение на паузу на любом шаге и требуйте подтверждения человека, прежде чем пайплайн пойдёт дальше.

Cron-расписание

Планируйте пайплайны обычным cron-выражением — ежедневные отчёты, батч-задачи, задачи очистки.

Пайплайны вызывают те же функции, что опубликованы за API-шлюзом.

Пайплайны, прямые функции и асинхронные задачи

Пайплайны

Берите пайплайны, когда cron-задачам, сценариям по вебхуку или фоновым задачам нужны ретраи, ветвление, fan-out или пошаговая оркестрация нескольких функций.

Прямой хендлер

Оставайтесь на прямой функции, когда один HTTP-запрос быстро закрывается одним обработчиком шлюза — без cron, вебхуков и многошагового состояния.

Асинхронные задачи

Берите асинхронные задачи, когда вызывающей стороне нужен мгновенный ответ, а полный DAG из многих шагов не требуется — хватит фоновой задачи в очереди.

DAG-пайплайн (ручной триггер)

customer-support-pipeline.json
{
  "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" }
  ]
}

Последовательный пример (ночная обработка)

nightly-sequential-pipeline.json
{
  "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" }
  ]
}

Начать бесплатно

Задеплойте первую функцию за несколько минут. Карта не нужна.

Начать бесплатно