Реальність запуску робочої програми Node на AWS Elastic Beanstalk

Уроки, отримані за 2 роки роботи виробничої програми Node на платформі AWS 'ELB

Спереду

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

Реальна вартість запуску програми

Я керую веб-програмою вузлів на ELB вже близько двох років. Перший рік був чудовим, вони дали вам все безкоштовно (переважно)! Після цього вам доведеться починати платити за речі, як наприклад, екземпляри EC2.

Ця стаття буде зосереджена на моїх конкретних вимогах до програми, яка є експрес-програмою на основі вузлів, розміщеною на Elastic Beanstalk.

Для отримання детальної інформації про збірку дивіться мою попередню статтю тут.

Зламатися

Це те, що я зараз працюю на AWS:

Єдине середовище EBS (Західний регіон США):

  • 1 класичний балансир навантаження
  • 1 екземпляр t2.micro EC2
  • Відро S3, що вміщує зображення (7 ГБ на момент написання)
  • 1 Маршрут 53 Розміщена зона

18 дол. США (балансування навантаження) + 5 дол. США (EC2 з RI) + 0,50 дол. США (маршрут 53) + 0,17 дол. США (S3) + 0,21 дол. США (передача даних) = приблизно 25 дол. США на місяць.

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

Балансир навантаження

Це найдорожча частина стека. Це варто:

  • 0,025 дол. США за годину класичного балансування навантаження (або часткову годину)
  • 0,008 дол. США за ГБ даних, оброблених класичним балансиром навантаження

Це означає, що якщо ви запускаєте програму цілодобово, вона коштуватиме приблизно 18 доларів США + плата за передачу даних щомісяця.

Екземпляр EC2

Екземпляри EC2 на вимогу дорожчі, ніж мали б бути. Щоб заощадити гроші тут, зверніться до розділу нижче про зарезервовані екземпляри EC2. Якщо б вам було цікаво, запуск того самого типу екземпляра EC2, як було згадано вище, коштував би 8,40 доларів за запитом.

S3

У мене є пара ковшів S3. Один для моєї статичної домашньої сторінки, один для зберігання зображень і один для зберігання версії програми. Наскільки мені відомо, ELB автоматично створює версію для управління версіями додатків.

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

База даних

Я розміщую свою базу даних MongoDB на mLab, яка незабаром закінчується. Тож я оновлю це, коли розберусь, скільки це насправді буде коштувати, коли мене змусять переїхати до Атласу Монго.

Зарезервовані екземпляри EC2

Давайте поговоримо про зарезервовані екземпляри (RI). Заплутана система виставлення рахунків Amazon є найбільш заплутаною частиною управління будь-чим на AWS. Зарезервовані екземпляри можуть зменшити частину витрат, але занадто заплутані.

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

По-перше, є два різні способи, якими ви можете зарезервувати місце, де знаходиться РІ: регіональна зона та зона доступності. Регіональні засоби, це характерно для одного з основних регіонів, наприклад. us-west-2 (Орегон). Зона доступності (AZ) характерна для зони в цьому регіоні, наприклад, us-west-2 a (Орегон).

Я купив RI в межах us-west-2, і він автоматично застосувався до мого екземпляра, що працює в цій області. Якщо ви купуєте такий в AZ, це стосуватиметься лише конкретного AZ, наприклад, us-west-2a, тому, якщо ELB закрутить екземпляр EC2 в us-west2b, ​​вам не пощастить.

Крім того, існують "стандартні" та "конвертовані" типи РІ. Я не на 100% розумію, що це означає, але, наскільки я розумію, кабріолет є більш гнучким, на що ви можете його поміняти, але дорожчий.

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

На підтримку AWS:

Жодні попередньо зарезервовані екземпляри (RI) не можуть становити значний ризик виставлення рахунків для нових рахунків, оскільки вони є контрактним зобов’язанням сплачувати щомісяця протягом усього терміну дії RI. З цієї причини нові облікові записи та слабо використовувані облікові записи не можуть зареєструватись без попередніх RI, поки у нас не буде створена історія успішних платежів.

Ви можете зіткнутися з цією помилкою, якщо спробуєте придбати попередню оплату.

Помилка: Ваша поточна квота не дозволяє придбати необхідну кількість зарезервованих екземплярів (Послуга: AmazonEC2; Код стану: 400; Код помилки: ReservedInscationsLimitExceeded;)

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

Больові точки

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

Автоматичні оновлення насправді не такі автоматичні

Версії вузлів не вирівнюються від версії до версії.

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

Запуск більше одного середовища

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

Документація жахлива

AWS занадто великий для власного блага. Це частина того, чому я пишу це. Дійсно важко було знайти відповіді на мої конкретні потреби.

Як я керую оновленнями

У мене на ноутбуці встановлено два окремі екземпляри мого репозиторію Git. У мене є один для розробників і один для виробництва.

Я використовую середовище розробників, щоб, ну, розвиватися! Досить просто. Я використовую виробничу папку виключно з метою витягування оновлень з гілки майстра Git, запуску конфігурації веб-пакета та розгортання на виробничому сервері.

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

Оновлення, що не вимагають змін середовища Linux

Для оновлень, які не потребують змін у середовищі Linux, це просто, як запуск eb deployу терміналі. Це дивно і займає близько 10 хвилин для розмноження.

Оновлення, що вимагають зміни середовища Linux

Іноді ви захочете оновити середовище Linux, але теж не зможете, оскільки AWS неймовірно німий (я впевнений, що в цьому є причина) і дозволяє лише певні версії Node для кожної збірки Linux. Для цього це трохи складніше, але керовано.

  1. Перейти до робочої конфігурації за новою версією. Востаннє, коли я це робив, я просто створив новий екземпляр через eb create prod-1. Він зробить все, що йому потрібно, і розгорне вашу програму в новому середовищі.
  2. Переконайтесь, що всі оновлення працюють. Здається цілком очевидним, але це сприятливий час, щоб переконатися, що з новою збіркою не було ніякої гикавки.
  3. Переконайтесь, що ваші середовища налаштовані правильно. Це дещо у попередній версії, але переконайтеся, що ви берете потрібну БД або що завгодно.
  4. Переконайтеся, що ваш балансир навантаження має однаковий сертифікат SSL (якщо застосовується). Цікаво, що якщо ви спробуєте отримати доступ до екземпляра ELB у https без сертифіката, він не вдасться!
  5. Поміняйте місцями екземпляри. Нарешті, після того, як все виглядає добре, на консолі є кнопка для заміни URL-адрес екземпляра. ПРОСТЕНЬКА. Вам не потрібно нічого міняти в Маршруті 53, це все робить за вас.

Отже, ось вам. Як керувати своїми оновленнями. Досить просто.

Заключні думки

Якщо у вас є пропозиції зробити це дешевшим / простішим, я хотів би їх почути. Мені подобається дискусія про інструменти та параметри так само, як наступний розробник!

З цим я піду з цим: Щасливого кодування!