Налаштування деплою сайту на AWS (EC2/ECS/Lambda)

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

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Налаштування деплою сайту на AWS (EC2/ECS/Lambda)
Складний
~3-5 днів
Часті запитання

Чому деплой на AWS ламається на зростанні навантаження

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

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

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

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

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

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

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

Що дає керований випуск: ефект у вимірюваних числах

Час випуску зміни

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

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

Частка успішних випусків з першого разу

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

Частка розгортань, після яких не потрібні термінові доопрацювання, зростає з 60-70% до 90% і вище — команда витрачає час на завдання, а не на розбір наслідків релізу.

Час повернення до робочої версії

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

Час відновлення падає з годин до хвилин, і сайт знову віддає робочі сторінки, поки триває розбір причини.

Клас відмов, що зник

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

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

Способи деплою на AWS: порівняння режимів та обмежень

Режим розгортання обирають не за модністю, а за профілем навантаження: як часто виходять релізи, чи є тривалі з'єднання та фонові завдання, наскільки користувач чутливий до холодного старту. Нижче — чотири режими, між якими на AWS реально йде вибір.

Варіант Коли підходить Обмеження
Віртуальні машини з балансуванням Довгоживучі процеси, власні агенти й демони, рівне цілодобове навантаження Парк оновлюється вручну, конфігурації розходяться між вузлами, потрібен контроль стану
Контейнерний деплой Кілька сервісів зі спільною мережею, часті релізи, відтворюване середовище Потрібен реєстр образів та опис сервісів, зайвий шар для одного моноліту
Безсерверний запуск Подієві та рідкісні завдання, сплески трафіку, обробка черг і файлів Обмеження за часом виконання, холодний старт, прив'язка до середовища провайдера
Статичний сайт і мережа доставки Вітрини, документація, інтерфейси із зовнішнім API Серверної логіки немає, кеш потребує явної інвалідації під час релізу

Як обираємо режим

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

Чому режими часто поєднуються

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

Етапи роботи: аудит, схема середовищ, передача

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

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

  2. Схема середовищ. Розділяємо тестовий контур і промисловий, задаємо склад ресурсів у кожному та правила просування збірки між ними. Окремо проговорюємо, які дані не повинні потрапляти в тестові середовища.

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

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

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

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

Що передаємо: конфігурації, схеми та регламенти

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

  • Інфраструктура як код — описи мереж, балансування, вузлів і сховищ у декларативних файлах. Стенд піднімається однією командою, розбіжності між середовищами зникають.
  • Схема середовищ — які середовища є (розробка, передпродуктив, продуктив), чим відрізняються за правами, даними та кількістю вузлів, як конфігурація підставляється під час запуску.
  • Політики доступу та ролі — що дозволено сервісу збірки, що застосунку в роботі, що черговому інженеру. Ключі не лежать у коді, а зберігаються з ротацією.
  • Регламент випуску — кроки від збірки до перемикання трафіку, обов'язкові перевірки та критерії, за яких реліз вважається успішним.
  • Регламент відкату — як повернутися на попередню версію, скільки це займає і що робити з уже застосованими міграціями схеми даних.
  • Схема інфраструктури на одній сторінці — потоки трафіку, зв'язки сервісів, точки відмови та зовнішні залежності.
  • Документація для команди — інструкції з типових завдань і збоїв, карта сервісів, власники та порядок ескалації.

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

Кейс: релізи без простою на високонавантаженому сервісі

Сервіс із десятками тисяч одночасних сесій жив на двох інстансах у AWS: реліз — підключення до вузлів, перезапуск процесів на живих, міграції руками. Випуск займав близько 40 хвилин і йшов лише в нічне вікно раз на два тижні, відкат — ще 25 хвилин за інструкцією.

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

Що змінили

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

Відкат — зворотне перемикання трафіку, а не перезбірка. Зміни схеми бази йдуть окремим кроком і зобов'язані бути сумісними з попередньою версією коду.

Метрики до і після

Метрика До Після
Один випуск ~40 хвилин у нічному вікні ~8 хвилин у робочий час
Відкат 25 хвилин вручну менше хвилини перемиканням
Частота релізів 2 на місяць 6–8 на тиждень
Розгортання без ручного втручання 0% усі, включно з відкатами

З класів відмов зникли розбіжність версій між вузлами, правки конфігів на продакшені та простої на перезапуску. Помилки в самому коді тепер ловить канареечна група на 5% трафіку — до повного розгортання.

Чим відрізняються контейнери від безсерверного запуску

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

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

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

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

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

Контейнери ростуть за заданими правилами й потребують планування ємності, зате спокійно тримають постійний потік запитів, довгі з'єднання та фонові завдання.

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

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

Часті технічні питання щодо релізів і середовищ

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

Як викочувати оновлення без простою?

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

Де зберігати секрети та ключі доступу?

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

Стенд і прод — розділяти чи тримати одним середовищем?

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

Як зрозуміти, що реліз пройшов штатно?

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

Як швидко повернутися до попередньої версії?

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

Обговоримо завдання й повернемося з оцінкою та планом

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

  • Схема контуру: що вже працює на EC2, ECS або Lambda, що залишилося поза хмарою, як сервіси пов'язані між собою — мережа, балансувальники, бази, черги.
  • Поточний випуск: як збірка потрапляє на прод, які кроки робляться руками, де процес найчастіше ламається і скільки часу займає розгортання.
  • Середовища: скільки потрібно контурів і чим вони відрізняються за даними та доступами, чи потрібні окремі стенди для перевірки завдань.
  • Доступи та секрети: хто має доступ до продакшену, де зберігаються ключі й облікові дані, як вони видаються та відкликаються.
  • Вимоги до надійності: допустимий час простою під час релізу, глибина відкату, що вважається неприпустимим збоєм.
  • Обмеження: регламенти безпеки, вікна випуску, правила зберігання даних і зовнішні залежності.
  • Хто залишається із системою: склад вашої команди, чи потрібна передача документації та підтримка після впровадження.

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

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

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

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