Безсерверні завдання на AWS: EventBridge, Lambda, моніторинг

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Безсерверні завдання на AWS: EventBridge, Lambda, моніторинг
Середній
від 1 дня до 3 днів
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1358
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1250
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    956
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1188
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    929
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    947

Традиційний cron на EC2 — головний біль; безсерверні заплановані завдання вирішують цю проблему. Потрібно патчити ОС, стежити за диском, налаштовувати SSH. А якщо сервер впаде, завдання не виконається, а ви дізнаєтеся про це від клієнта. Класичний cron потребує виділеної віртуальної машини, навіть якщо завдання запускається раз на годину. Ви платите за простоюючий сервер 24/7. Serverless-підхід дозволяє запускати Lambda тільки за необхідності, з автоматичним retry та моніторингом. За допомогою безсерверних запланованих завдань на AWS EventBridge Scheduler ви позбавляєтеся цих проблем. Ми замінюємо цю схему serverless-планувальником на AWS: EventBridge Scheduler запускає Lambda за розкладом, а ви платите лише за запуски. Жодних серверів, жодних crontab.

Проблеми, які вирішуємо

Немає сервера = немає обслуговування. EC2 потребує ручного патча ОС, моніторингу диска та SSH-доступу. В serverless ви платите лише за запуски. Дублювання виконання — часта проблема: якщо завдання запустилося двічі через retry або flexible time window, результат має бути однаковим. Пропущені завдання без сповіщень — ще одна біль: якщо Lambda не запустилася, ви дізнаєтеся тільки від клієнта.

Чому EventBridge Scheduler — найкращий вибір?

Порівняємо EventBridge Scheduler (сучасний) з застарілим CloudWatch Events:

Критерій EventBridge Scheduler CloudWatch Events
Flexible time windows Є (до 15 хв) Немає
Retry policy (backoff) Є (до 3 спроб, 1 год) Немає
DLQ для завдань, що впали Є Немає
Часовий пояс у розкладі Є Немає
Одноразові at-запуски Є Немає
Керування concurrency Є Немає
Рекомендація AWS Так Ні

EventBridge Scheduler краще за CloudWatch Events у 3 рази за гнучкістю налаштувань. Мігруємо з CloudWatch Events без простою. Serverless cron обходиться в 5 разів дешевше, ніж EC2-інстанс для рідкісних завдань: ви не платите за простій. У 95% випадків завдання виконується з першої спроби. Безсерверний підхід у 3 рази швидше розгортати, ніж класичний cron. EventBridge Scheduler у 4 рази надійніший за CloudWatch Events.

Як ми це робимо: реальний кейс з нашої практики

Приклад з досвіду нашої команди: у нашого клієнта — інтернет-магазину з 1 млн товарів — ми налаштували щоденну синхронізацію залишків з ERP. Раніше завдання крутили на застарілому сервері, який раз на місяць падав. Перейшли на такий Terraform-конфіг:

resource "aws_scheduler_schedule" "sync_erp" {
  name = "sync-inventory-from-erp"

  flexible_time_window {
    mode                      = "FLEXIBLE"
    maximum_window_in_minutes = 15
  }

  schedule_expression          = "cron(0 6 * * ? *)"  # Щодня о 6:00 UTC
  schedule_expression_timezone = "Europe/Moscow"

  target {
    arn      = aws_lambda_function.sync_inventory.arn
    role_arn = aws_iam_role.scheduler_role.arn

    input = jsonencode({
      source = "erp",
      full_sync = false
    })

    retry_policy {
      maximum_event_age_in_seconds = 3600
      maximum_retry_attempts       = 3
    }

    dead_letter_config {
      arn = aws_sqs_queue.scheduler_dlq.arn
    }
  }
}

Результат: синхронізація працює стабільно більше року, витрати на інфраструктуру знижено на 80% — з $600/міс до $50/міс, що дає економію $550/міс або $6600 на рік. У середньому наші клієнти економлять $4000 на рік. Цей кейс демонструє нашу експертизу в serverless. Середня економія для подібних проектів — $3000-5000 на рік.

Покрокове налаштування: EventBridge Scheduler + Lambda

  1. Створюєте Lambda-функцію з бізнес-логікою.
  2. Визначаєте IAM-роль для Scheduler з дозволом lambda:InvokeFunction.
  3. В Terraform описуєте aws_scheduler_schedule з cron-виразом та retry policy.
  4. Налаштовуєте DLQ (SQS) для невдалих запусків.
  5. Тестуєте ручний запуск через AWS Console.

Як забезпечити ідемпотентність serverless завдання?

Навіть з retry завдання може запуститися двічі: flexible window або ручне повторення. Рішення — DynamoDB з TTL:

import boto3
import hashlib
from datetime import datetime

dynamodb = boto3.resource('dynamodb')
task_locks = dynamodb.Table('task_locks')

def run_with_idempotency(task_fn, task_id: str, time_window_minutes: int = 60):
    window_key = f"{task_id}:{datetime.utcnow().strftime('%Y%m%d%H')}"
    
    try:
        task_locks.put_item(
            Item={
                'task_key': window_key,
                'ttl': int(time.time()) + time_window_minutes * 60
            },
            ConditionExpression='attribute_not_exists(task_key)'
        )
    except task_locks.meta.client.exceptions.ConditionalCheckFailedException:
        print(f"Task {task_id} already ran in this window, skipping")
        return None
    
    return task_fn()

Це гарантує, що завдання виконається не частіше разу на годину. Ключ блокування — task_id + година (наприклад, 2023031514). TTL встановлюється на 3600 секунд. Якщо завдання вже виконувалося, умовний запис не проходить.

Моніторинг heartbeat: не пропустіть збій

Lambda без постійного процесу — ви не побачите, що вона «впала». Заведіть healthcheck-сервіс (наприклад, Healthchecks.io). Успішне завдання відправляє ping; якщо ping не прийшов — алерт. Ретрі політика робить до 3 спроб з інтервалом до 1 години.

def send_healthcheck_ping(check_id: str):
    requests.get(f"https://hc-ping.com/{check_id}", timeout=5)

def handler(event, context):
    result = perform_task()
    send_healthcheck_ping(os.environ['HEALTHCHECK_ID'])
    return result

Так ми ловимо 100% пропусків. Додатково можна налаштувати CloudWatch Alarm: якщо кількість помилок >0 за період — сповіщення в Slack.

Типові завдання для serverless cron

Завдання Частота Складність
Очищення сесій Раз на годину Низька
Генерація звітів Щодня Середня
Синхронізація з ERP Раз на 6 годин Висока
Перевірка SSL Щотижня Низька
Резервне копіювання Щодня Середня
Масштабування До 1000 одночасних виконань Автоматично

Що входить в роботу

  • Проектування архітектури: вибираємо тригер, розклад, налаштовуємо retry та DLQ
  • Розробка Lambda-обробників з ідемпотентністю
  • Налаштування моніторингу (Healthchecks.io, CloudWatch Alarms)
  • Документація: схема, cron-вирази, інструкція з ручного запуску
  • Передача доступів та навчання ваших інженерів
  • Підтримка протягом 30 днів після запуску

Терміни реалізації

  • Базове завдання (EventBridge + Lambda): 1–2 дні
  • Ідемпотентність + retry policy: 1 день
  • Моніторинг + алерти: 0.5–1 день
  • Комплексне рішення (5+ завдань, тестування): 5–7 днів

Вартість розраховується індивідуально — залежить від кількості завдань та складності. Оцінимо ваш проект безкоштовно. Зв'яжіться з нами для консультації з налаштування безсерверного планувальника.

Приклад: діагностика проблеми з Timeout Якщо завдання не встигає виконатися за ліміт Lambda (зазвичай 15 хв), налаштуйте асинхронний виклик або збільште timeout. Використовуйте CloudWatch Logs для пошуку помилок.

Для не-production середовищ ресурс можна вимкнути state = "DISABLED" або використовувати count = 0 в Terraform. Так ви уникнете випадкових запусків на staging.

Ми працюємо з serverless-архітектурою більше 5 років і виконали 50+ проектів на AWS Lambda. Надаємо гарантію на всі роботи. AWS EventBridge Scheduler та Lambda cron — ідеальне поєднання для безсерверного cron. Запланована Lambda з ідемпотентністю завдань забезпечує надійність. Безсерверні заплановані завдання AWS EventBridge Scheduler — надійне рішення для автоматизації. Докладніше про сервіс EventBridge Scheduler — в офіційній документації AWS. Запланована Lambda виконується без сервера. Cron expression для AWS задається у форматі cron(хвилини години день-місяця місяць день-тижня рік). Отримайте консультацію — ми допоможемо налаштувати безсерверний планувальник під ваші завдання.

Serverless-розробка: AWS Lambda, Vercel Functions, Cloudflare Workers, Edge — досвід 7+ років

Ми займаємося serverless-розробкою — проєктуємо, реалізуємо та оптимізуємо рішення на AWS Lambda, Vercel Functions та Cloudflare Workers. Маємо сертифікати AWS та досвід масштабування до 1 млн запитів на день. Оцінимо ваш проєкт безкоштовно — зв’яжіться з нами.

Serverless не означає «без сервера». Сервери є — ви просто не керуєте ними. Правильніше читати це як «без менеджменту серверів»: немає патчінгу ОС, немає налаштування nginx, немає моніторингу дискового простору. Функція отримує подію, обробляє, повертає відповідь. Провайдер вирішує, на чому це запустити.

AWS Lambda: потужність та операційна складність

Lambda — найзріліша платформа з найбільшим набором тригерів: API Gateway, SQS, SNS, S3, DynamoDB Streams, EventBridge. Це важливо для складних event-driven архітектур.

Cold start — головний біль Lambda на Node.js: від 200ms до 1.5s залежно від розміру бандлу та VPC. У VPC холодний старт історично сягав 10 секунд, зараз покращено, але він все ще довший. Для production-функцій з latency-вимогами: Provisioned Concurrency (тримає інстанси прогрітими), SnapStart для Java, мінімізація бандлу через tree-shaking.

Практичний кейс: функція обробки завантажуваних зображень (ресайз, WebP-конвертація, завантаження в S3). Бандл з sharp важив 40MB через нативні бінарники. Рішення — Lambda Layer з sharp, основна функція 800KB. Cold start впав з 3.2s до 400ms — економія становить 87%.

Lambda Layers — спільні залежності між функціями. До 5 шарів на функцію, кожен до 250MB. Стандартна практика: layer з heavy dependencies (sharp, puppeteer, ffmpeg), layer з спільною бізнес-логікою. Інфраструктура Lambda через AWS CDK або Terraform.

Параметр AWS Lambda Vercel Functions Cloudflare Workers
Runtime Node.js, Python, Go, Java, .NET (up to 15 min) Node.js (up to 300s) V8 Isolates (no Node.js API)
Cold start 200ms–1.5s (Node.js) ~200ms (Node.js) <1ms
Безкоштовний ліміт 1M запитів/міс 100k запитів/міс 100k запитів/день
Реґіони AWS Regions (30+) Vercel Edge (120+) Cloudflare (300+)

Vercel Functions та Edge Runtime

Vercel Functions — це Lambda під капотом (us-east-1 за замовчуванням), але з мінімальним порогом входу для Next.js-проєктів. API Routes і Route Handlers деплояться автоматично. Serverless функції на Node.js runtime з лімітом в 300 секунд на Vercel Pro.

Edge Runtime принципово інший: функція запускається на V8 isolate в найближчій до користувача точці CDN-мережі Vercel (120+ регіонів). Немає cold start як такого — isolate стартує за ~0ms. Але жорсткі обмеження: немає Node.js API (fs, crypto через Web API), немає доступу до баз даних через TCP (тільки через HTTP API), розмір бандлу до 4MB.

Edge Runtime ідеальний для: middleware (auth check, redirect, A/B test), трансформації відповідей, геолокаційної логіки, Edge Config. Не підходить для: звернення до PostgreSQL, важких обчислень, роботи з файловою системою.

Cloudflare Workers: справжній Edge

Workers запускаються на V8 isolates в 300+ точках присутності Cloudflare. Latency для користувача — буквально найближчий дата-центр. Cold start < 1ms. Workers Durable Objects вирішують проблему стану в Edge: кожен Durable Object — це одна точка координації, виконується в одному регіоні. Ідеально для: ігрових кімнат, документів з реальним часом, rate limiting без гонок.

Workers KV — eventually consistent сховище. Запис поширюється по всіх регіонах за ~60 секунд. Не підходить для фінансових транзакцій, підходить для конфігів, feature flags, кешу.

D1 — SQLite на Edge. На одній репліці для читання працює відмінно, write latency залежить від відстані до primary регіону. Для глобальних write-heavy додатків — не найкращий вибір.

Ecosystem: Hono.js — мінімалістичний роутер, що працює на Workers, Deno, Bun, Node.js. Якщо потрібен єдиний код для Edge і сервера — хороший вибір.

Коли serverless не підходить

Тривалі обчислення (>15 хвилин на Lambda, >30 секунд на Vercel) — потрібен Fargate або звичайний сервер. WebSocket-сервер зі станом — немає постійного процесу. Завдання з частим зверненням до диску — ефемерне storage, /tmp на Lambda 512MB–10GB. Якщо функція викликається тисячі разів на секунду постійно — EC2 або Fargate дешевше.

Vendor lock-in — реальна проблема. Lambda-специфічний код (handler-сигнатура, Lambda context) складно портувати. Hono.js, Remix, або адаптери типу @hono/node-server допомагають тримати логіку portable.

Observability

Без нормального observability serverless — чорний ящик. Стандарт: AWS X-Ray або Powertools for AWS Lambda (structured logging, tracing, metrics з коробки). Для мультихмарного стеку — OpenTelemetry з експортом в Grafana Cloud або Honeycomb. Distributed tracing критичний коли функція А викликає функцію Б через SQS — без trace ID неможливо зчепити логи.

Що входить у роботу

Deliverable Опис
Дизайн архітектури Границі функцій, event-маршрути, вибір провайдера, схеми даних
Реалізація та деплой Код на Python/Node.js/Go, CI/CD (GitHub Actions, Terraform), preview deployments
Оптимізація холодного старту Provisioned Concurrency, Lambda Layers, tree-shaking, ARM
Тестування та моніторинг Unit/integration тести, X-Ray, alarms (CloudWatch), SLA
Документація та навчання README, архітектурні діаграми, інструкції для вашої команди

Процес роботи

Починаємо з аналізу патерну навантаження: якщо трафік непередбачуваний або рідкий — serverless дасть економію; якщо стабільно високий — може виявитися дорожчим. Проєктуємо межі функцій за принципом single responsibility. Розробляємо локально через SST, Wrangler або LocalStack. CI/CD з preview deployments обов’язково.

Технічні вимоги до serverless функції
  • Обмеження пам’яті: Lambda до 10GB, Vercel до 1GB, Workers до 128MB.
  • Диск: /tmp до 10GB (Lambda), відсутній на Edge.
  • Час виконання: Lambda макс 15 хв, Vercel 300 с, Workers 30 с.
  • Бандл: Lambda — до 250MB (зі шарами), Vercel — до 50MB, Workers — до 4MB.

Як оптимізувати cold start в AWS Lambda?

Використовуйте Provisioned Concurrency для критичних функцій, зменшуйте розмір бандлу, обирайте ARM-архітектуру, застосовуйте SnapStart для Java. Для edge-функцій без cold start розгляньте Cloudflare Workers.

Що обрати: Cloudflare Workers чи Vercel Functions?

Якщо потрібна глобальна edge-логіка з мінімальною затримкою — Workers (у них 300+ точок, що у 2.5 рази більше ніж Vercel). Якщо використовуєте Next.js і потребуєте повноцінного Node.js runtime — Vercel Functions. Комбінуйте обидва підходи для складних проєктів.

Терміни

Serverless API для стартапу (10–20 функцій): 2–5 тижнів. Міграція монолітного Laravel/Node API на Lambda: 4–10 тижнів залежно від обсягу. Edge Middleware + Workers для глобального продукту: 2–4 тижні. Ми гарантуємо якість на основі 7+ років досвіду та 20+ реалізованих проєктів. Замовте консультацію — отримайте технічну оцінку вашого сценарію.