Serverless Scheduled Tasks на AWS: EventBridge, Lambda, моніторинг

Регулярні звіти, синхронізації та розсилки зриваються, коли запуск завдань тримається на ручному контролі. Ми розробляємо та налаштовуємо serverless scheduled tasks під ключ: розклад, повтори при збоях, оповіщення про проблеми. Ви отримуєте передбачуваний запуск і скорочення ручної роботи команди.

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

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

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

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

Serverless scheduled tasks: де ламаються регулярні завдання

Serverless scheduled tasks виглядають надійними рівно до першого інциденту: розклад спрацьовує, а результат не надходить. Класичний сценарій — завдання запускається за таймером, обробник падає на середині, платформа вважає спробу завершеною, і наступного запуску чекати добу. Ніхто не телефонує, метрика «успішних викликів» зелена, а дані за день втрачено.

Пропуск запусків майже завжди є наслідком двох причин: перекриття розкладів і лімітів паралелізму.

Якщо попереднє виконання ще триває, а нове вже поставлено в чергу, частина тригерів відкидається мовчки — особливо коли розклад задано частим інтервалом, а обробник звертається до зовнішнього сервісу з непередбачуваною затримкою.

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

Дублі — зворотний бік відмовостійкості. Платформа повторює доставку події при мережевому збої або таймауті, і без ідемпотентності завдання виконується двічі: списання, розсилка, вивантаження йдуть у подвійному обсязі.

Німі помилки добивають картину — виняток проковтнуто всередині обробника, статус виклику успішний, а збій видно лише за непрямими ознаками через кілька днів.

Розбираємо, як це закривається: ідемпотентні ключі запуску, розділення розкладу й черги, контроль завислих виконань за таймаутом і окремий канал оповіщень на пропуск очікуваного запуску.

Що дає керований запуск завдань за розкладом

Передбачуваність запусків замість «плаваючого» часу

Розклад в EventBridge спрацьовує за cron-виразом з точністю до хвилини, а не «коли прокинеться сервер».

Для регулярних завдань — вивантажень, звірок, розсилок, перерахунку агрегатів — це знімає цілий клас проблем: запуск не з'їжджає через перезавантаження машини, переповнення черги або завислий попередній процес.

Якщо завдання триває довше за вікно, наступний запуск не нашаровується: паралельні екземпляри гасяться на рівні правила. Час старту перестає бути предметом здогадок — він однаковий і в будні, і в пік навантаження.

Ручні перевірки переходять у моніторинг

Раніше черговий відкривав логи й очима звіряв, чи пройшло нічне вивантаження. Тепер про це повідомляє система: успішний запуск пише метрику, помилка — алерт у канал команди з тілом винятку та ідентифікатором запиту.

Кількість ручних перевірок падає з щоденних обходів до нуля, а інженер займається розбором, а не спостереженням. Окремо налаштовуємо «мертву» тишу: якщо завдання не стартувало в очікуваному вікні, надходить повідомлення — мовчання теж сигнал.

Час реакції на збій — хвилини, а не доба

Інцидент ловиться в момент падіння, а не вранці, коли користувач помітив відсутність даних. Повторні спроби із затримкою закривають короткочасні відмови зовнішніх сервісів без участі людини — більшість збоїв гаситься автоматично.

Те, що не вдалося відновити, надходить із контекстом: скільки спроб, на якому кроці, що повернуло зовнішнє API. Розбір починається з фактів, а не з відтворення.

Що це дає в сумі

Запуски стають передбачуваними, ручний контроль — надлишковим, а реакція на збій вимірюється хвилинами. Команда перестає тримати в голові календар завдань і переключається на розвиток продукту.

Способи запуску: планувальник, черга, ручний тригер

Регулярні завдання в serverless-контурі запускаються трьома способами, і вибір між ними визначається не зручністю, а характером навантаження та вимогами до повторюваності.

Планувальник (в AWS це EventBridge Scheduler) викликає функцію за cron- або rate-виразом: він добрий для завдань із фіксованим часом — нічні звіти, синхронізація довідників, прогрів кешу.

Черга завдань (SQS + Lambda) запускає обробку за подією: повідомлення з'являється — функція стартує, і так до спорожнення черги. Ручний тригер — виклик через API або консоль для разових операцій: переіндексація, міграція, перерахунок.

Варіант Коли підходить Обмеження
Планувальник запусків Регулярні завдання за розкладом: звіти, синхронізація, регламентні перевірки Мінімальний інтервал — 1 хвилина; cron в UTC; при сплеску паралельних спрацювань потрібен контроль повторів
Черга завдань Потік однотипних операцій, ретраї, розвантаження піків Немає прив'язки до часу; порядок не гарантований без FIFO; потрібна ідемпотентність обробника
Ручний тригер Разові операції, налагодження, аварійний перезапуск Немає автоматизації та контролю розкладу; потрібен доступ і захист від випадкового запуску

Обмеження розкладу варто враховувати заздалегідь: cron-вирази обчислюються в UTC, тому перехід на літній час зсуває запуск, а мінімальний крок в одну хвилину не підходить для секундних завдань.

Якщо операція триває довше за ліміт функції, її розбивають на кроки через чергу — планувальник запускає першу функцію, та публікує повідомлення, а обробники добирають залишок.

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

Як ми впроваджуємо регулярні завдання: етапи робіт

Регулярні завдання — це те, що ламається тихо: звіт не надійшов, синхронізація відстала, листи пішли двічі. Тому впровадження будуємо як інженерний процес із перевірюваним результатом на кожному кроці, а не як «налаштували розклад і забули».

  1. Аудит завдань. Збираємо все, що зараз запускається за розкладом: системні планувальники, скрипти на серверах, ручні запуски «за дзвінком». Для кожного фіксуємо періодичність, тривалість, залежності від інших процесів і наслідки збою — які завдання критичні, а які можна повторити без шкоди.
  2. Схема запусків. Розкладаємо завдання за типами: часті короткі, тривалі, залежні від зовнішніх систем. Визначаємо, де потрібен запуск за календарем, де — за подією, а де — ланцюжок із передаванням результату. На цій схемі одразу видно перетини, через які завдання конкурують за одні дані.
  3. Налаштування розкладу. Переносимо правила в керований сервіс розкладів: часові пояси, вікна запуску, повторні спроби при збої, обмеження паралельних копій одного завдання. Розклад зберігається як конфігурація, а не як знання одного інженера.
  4. Логіка та права. Кожне завдання отримує власну роль із мінімальними правами — лише ті дані й операції, які йому потрібні. Секрети й доступи виносяться в захищене сховище, а не в код.
  5. Перевірка відмовостійкості. Прогоняємо сценарії: недоступність зовнішньої системи, повторний запуск, перевищення часу роботи, збій у середині ланцюжка. Дивимося, що завдання не губиться, не дублює операції та коректно повідомляє про помилку.
  6. Моніторинг і оповіщення. Налаштовуємо контроль факту запуску, тривалості та результату. Оповіщення надходять на пропуск запуску та на повторювані помилки, а не на кожну дрібницю — інакше сигнал губиться в шумі.
  7. Передавання в експлуатацію. Віддаємо документацію: карту завдань, розклад, порядок ручного перезапуску та відкату. Проводимо розбір із вашою командою, щоб підтримка не залежала від нас.

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

Що замовник отримує на руки після впровадження

Усе, що з'являється в хмарі, передаємо вам як код і документацію — без «налаштовано в нас у консолі, спитайте Івана».

Комплект розрахований на те, що експлуатувати розклади буде ваша команда або інший підрядник: за ним можна підняти завдання з нуля, не розбираючи чужу конфігурацію.

  • Конфігурації завдань як код — визначення розкладів, обробників та їхніх параметрів лежать у репозиторії, а не збираються руками у веб-консолі. Зміна проходить через рев'ю, відкат — звичайним поверненням попередньої версії.
  • Схеми запусків — таблиця «завдання → періодичність → часовий пояс → що відбувається при перетині запусків → куди йде результат». Видно, які задачі залежать одна від одної і де вікно обслуговування.
  • Політики доступу — ролі з мінімально необхідними правами: що дозволено конкретному завданню, хто з інженерів може змінювати розклад, як видається і відкликається доступ. Окремо фіксуємо, що завдання не може вийти за межі своїх повноважень.
  • Обробка збоїв — повтори з наростаючою паузою, «мертва черга» для безнадійних запусків, поведінка при недоступності зовнішнього сервісу. Описано, скільки разів пробуємо і коли здаємося.
  • Моніторинг і оповіщення — метрики успішних і завалених запусків, затримка старту, алерти у ваш канал. Налаштовано так, щоб про проблему дізнавалися до того, як її помітить бізнес.
  • Регламент експлуатації — що робити при збої, як тимчасово вимкнути завдання, як додати нове, кому телефонувати. Сценарії розписані за кроками, без розрахунку на конкретну людину.
  • Інструкції для команди — короткі керівництва з типових операцій і передача знань: розбір на дзвінку із записом, щоб новий інженер увійшов у контур без нас.

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

Кейс: як регулярні звіти перестали зриватися

Замовник — сервісна компанія з щомісячною звітністю для внутрішніх команд і партнерів. Звіти збиралися cron-скриптом на одному сервері: він опитував білінг, склад і CRM, зводив дані та розсилав файли.

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

Частка успішних запусків трималася близько 70%, а збій зазвичай помічали вже отримувачі: звіт не приходив або приходив частковим.

Ми перенесли розклад і обробку на керовані сервіси: планувальник Amazon EventBridge запускає завдання за календарем, сама обробка йде в ізольованих функціях, а проміжні результати складаються в об'єктне сховище.

Кожен крок — окреме завдання зі своїм повтором: якщо вивантаження з одного джерела не вдалося, повторюється тільки воно, а не весь конвеєр.

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

Що змінилося в цифрах

Частка успішних запусків зросла з ~70% до 99,6%: повтор і розв'язка кроків прибрали основну причину зривів — падіння на одному джерелі при живих решті.

Час відновлення після збою скоротився з кількох годин ручного розбору до хвилин: завдання перезапускається автоматично, інженеру залишається перевірити чергу недоставлених повідомлень.

Окремо закрився цілий клас відмов — «тихі» пропуски, коли розклад не спрацьовував через недоступність сервера. Тепер планувальник живе окремо від обробки, і його недоступність не блокує випуск звіту.

Моніторинг відстежує не факт «сервер живий», а результат: чи прийшов звіт, чи вклався у вікно, скільки повторів знадобилося.

Чим відрізняється запуск за розкладом від запуску за подією?

Запуск за розкладом відповідає на питання «коли», запуск за подією — на питання «чому зараз». Календарний тригер спрацьовує за часом: правило в планувальнику формує сигнал у заданий момент, далі виконується функція-обробник.

Подієвий тригер чекає на зміну стану — завантаження файлу в сховище, запису в черзі, звернення до API, зміни в базі. Різниця принципова: розклад не знає про стан системи, подія не знає про час.

Звідси й вибір тригера. Розклад доречний там, де робота прив'язана до календаря, а не до даних: нічні перерахунки, вивантаження звітів, синхронізація із зовнішніми системами за їхнім регламентом, перевірки строків і нагадування, ротація резервних копій.

Подія — там, де реакція потрібна одразу після зміни: обробка завантаженого документа, перерахунок агрегатів після правки запису, повідомлення за фактом оплати, розбір черги повідомлень.

Поєднувати їх варто усвідомлено. Частий сценарій: розклад запускає обхід, а подія смикає точкову обробку всередині — так не доводиться опитувати сховище щохвилини.

Зворотний випадок теж робочий: подія накопичує задачі, а розклад раз на годину розбирає накопичене пакетом, щоб не відкривати з'єднання на кожен запис.

Практична відмінність — у налагодженні та в поведінці при збої. Розклад передбачуваний: відомо, коли спрацює, легко відтворити пропуск вручну, видно відставання за журналом запусків.

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

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

Ще один критерій — вартість простою. Якщо задача зобов'язана виконатися навіть за відсутності трафіку, розклад надійніший: він не залежить від того, чи надійшла подія.

Якщо робота існує лише як реакція на дію користувача, подієвий тригер дешевший і точніший за часом — не потрібно крутити опитування намарно.

На практиці системи майже завжди гібридні, і питання не «що вибрати», а «яку частину роботи прив'язати до календаря, а яку — до зміни даних».

Часті технічні сумніви щодо serverless scheduled tasks

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

Якщо бізнес-логіка зав'язана на місцевий час — звіт до відкриття зміни, розсилка за робочим днем регіону, — розклад задається не «на 9 ранку», а зі зміщенням, або через іменовану зону.

Окрема пастка — перехід на літній час: фіксоване зміщення дає зсув на годину двічі на рік, а зона з правилами переходів його відпрацьовує.

Задача запустилася двічі — це нормально чи збій?

У serverless scheduled tasks немає строгої гарантії «рівно один запуск»: під час повторної доставки події обробник може отримати її вдруге. Тому логіку роблять ідемпотентною — повторний запуск не повинен дублювати списання, лист або запис.

Практика: ключ ідемпотентності за ідентифікатором події, перевірка «вже оброблено» перед дією, окремий облік завершених прогонів. Тоді повтор — нешкідливий, а не інцидент.

Що буде, якщо задача виконується довше відведеного часу?

У функції є стеля тривалості, і все, що довше, обривається на середині — без транзакції й без відкату. Довгі процеси розбивають на кроки: постановка підзадач у чергу, продовження за наступною подією, збереження проміжного стану.

Так довга операція перетворюється на ланцюжок коротких, кожна з яких укладається в ліміт і переживає повтор.

Як зрозуміти, що завдання не виконалося?

Мовчання планувальника — не ознака успіху: подія могла піти, а обробник впасти. Моніторинг будують на трьох сигналах — факт запуску, результат виконання, відсутність очікуваного прогону.

Останнє найважливіше: якщо задача має йти щогодини, а прогону немає, потрібен алерт за тишею, а не за помилкою. Метрики помилок і затримок плюс журнал прогонів закривають решту.

Чи можна перенести наявний cron без переписування логіки?

Так, якщо код уже оформлений як окремий обробник. Розклад переноситься в правило планувальника, часовий пояс виставляється явно, а тіло задачі залишається тим самим.

Основна робота — не в перенесенні, а в ідемпотентності та спостережуваності: без них та сама логіка в хмарі поводиться інакше, ніж на сервері.

Розбір цих сумнівів до старту економить тижні налагодження в проді. Опишіть свої завдання та поточний розклад — повернемося з оцінкою та планом перенесення.

Обговоримо ваше завдання і повернемося з планом

Щоб повернутися з оцінкою термінів, а не із загальними словами, нам потрібно зрозуміти ваше завдання предметно.

Розкажіть, які регламентні операції мають виконуватися за розкладом, з якою періодичністю і що відбувається при збої — від цього залежить архітектура запуску і те, як ми будемо контролювати виконання.

На першій розмові уточнюємо:

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

Після розмови ми фіксуємо схему запуску, список завдань із параметрами розкладу, політику повторів і точки моніторингу. На цій основі готуємо план робіт за етапами, оцінку термінів і описуємо наступний крок — з чого починаємо і що знадобиться з вашого боку.

Опишіть завдання у зручному вигляді — повернемося з оцінкою та планом.

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1140
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060