Розміщення веб-додатків на Amazon Web Services. Дешево. Чи це можливо?
Напевно всі чули про Amazon Web Services (AWS). А деякі навіть завітали на сторінку Pricing. І помітили, що ціни там помітно вище, ніж на DigitalOcean, Linode, Hetzner Cloud та ін. Ось таблиця для порівняння цін:
Тип
RAM
CPUs
Диск
Трафік
Ціна
DigitalOcean | – | 4 GB | 2 vCPUs | 80 GB | 4 TB | $20 |
Linode | Linode 4GB | 4 GB | 2 vCPUs | 80 GB | 4 TB | $20 |
AWS | t2.medium | 4 GB | 2 vCPUs | – | – | $40 |
Amazon бере гроші за трафік, причому ціни теж не низькі:
Так для чого ж тоді вибирати Amazon? Ось які причини бачу я:
- Велика кількість корисних сервісів.
- Free Tier.
Про друге і піде мова в цій статті.
На сторінці з цінами є посилання на сторінку з рівнем безкоштовного користування, яка говорить що багатьма сервісами можна користуватися безкоштовно протягом 1 року.
Цього цілком достатньо щоб цілий рік тримати безкоштовно повноцінний сайт або бекенд мобільного програми / ігри або чогось ще. До того ж:
- Можна завести довільну кількість акаунтів (Amazon цього не забороняє, гуглив по іноземним форумам), якщо ресурсів 1 аккаунта не вистачає.
- Можна налаштувати Auto Scaling Group, в якій буде 1 безкоштовно VM, а при пікових навантаженнях будуть додаватися платні з погодинною оплатою. Максимальне число VM ви задаєте самі.
- Після року можна завести новий акаунт, перенести дані та користуватися ще рік.
- Рік — це досить багато для початківця проекту, щоб він загнувся або ж навпаки, вистрілив.
Ціноутворення на AWS дуже підступне, тому раджу прив’язати до акаунта віртуальну карту. Навіть на рівні безкоштовного використання можна влетіти на значні суми. Нижче я поділюся своїм досвідом.
Ціноутворення pay-as-you-go лякає, оскільки не можеш точно спрогнозувати витрати на кінець місяця. Зізнатися, я б не став ним користуватися, якби не досвід, отриманий на роботі, де за чужі гроші не страшно.
При роботі з AWS потрібно бути уважним з моменту реєстрації. З особистого досвіду: коли реєструвався перший раз, вибрав тариф Developer (ну я ж розробник, значить для мене) і не помітив, що у цього тарифу абонентська плата $20 в місяць.
Отже, що ми маємо безкоштовно протягом року після реєстрації:
- 1 віртуальний сервер (EC2) — 1 vCPU, 1 ГБ RAM, 30 ГБ диск, 1 статичний IP-адресу (t2.micro).
- 1 сервер Redis або Memcached (ElastiCache) — 1 vCPU, 0,555 ГБ RAM (cache.t2.micro).
- 1 сервер ElasticSearch — 1 vCPU, 2 ГБ RAM, 10 ГБ диск (t2.micro.elasticsearch).
- 1 сервер MySQL, PostgreSQL або SQL Server (RDS) — 1 vCPU, 1 ГБ RAM, 20 ГБ диск (db.t2.micro).
- 1 балансировщий навантаження (Elastic Load Balancer) — 15 ГБ трафіку на місяць.
- Файлове сховище (S3) — 5 ГБ, 20K запитів Get, 2K запитів Put в місяць.
- CDN (CloudFront) — 50 ГБ вихідних даних, 2M запитів в місяць.
Безкоштовно завжди:
- Розсилка email-ів (SES) — 62К повідомлень в місяць.
- Функція як послуга (Lambda) — 1M запитів в місяць.
- NoSQL база даних (DynamoDB) — 25 ГБ сховища, 200M запитів в місяць.
- Засіб реалізації API (API Gateway) — 1M викликів API в місяць, працює у зв’язці з Lambda.
- Моніторинг (CloudWatch) — 10 попереджень по 10 метрик.
Не відноситься до Free Tier, але теж безкоштовно:
- Certificate Manager — дозволяє безкоштовно створювати SSL-сертифікати для ваших доменів, які можна використовувати в Load Balancer, CloudFront і інших сервісах Amazon. Але його не вийде використовувати безпосередньо на віртуальних серверах.
Як стежити за витратами
Після того як ви створили необхідні інстанст, завантажили дані, налаштували CloudFront, корисно налаштувати CloudWatch і бюджет. Без цього можна отримати несподіваний рахунок в кінці
місяця за трафік.
CloudWatch — це сервіс для моніторингу різних метрик ваших серверів і використовуваних сервісів: завантаження процесора, кількість операцій введення/виводу і найголовніше — трафіку.
За допомогою нього можна надсилати попередження на пошту або викликати webhook (наприклад, для відправки повідомлення у Телеграм) якщо трафік перевищив заданий значення за заданий період часу. Наприклад, надіслати повідомлення у Телеграм якщо трафік CloudFront перевищить 1 Гб за 5 хвилин. Мінімальний доступний інтервал часу — 1 хвилина.
Скріншот сторінки CloudWatch з налаштованими попередженнями:
Бюджет дозволяє задавати місячний ліміт витрат, при перевищенні якого буде отпралено попередження за аналогією з CloudWatch. Можна створити безкоштовно до 3 бюджетів.
З особистого досвіду: одного разу на своєму сервері підняв CORS-проксі crossorigin.me і один товариш (не буду говорити як він дізнався про існування проксі) почав качати через нього YouTube. Я це виявив, коли він встиг накачати на $17, після чого я зупинив проксі.
Реальний приклад
- 1 балансувальник навантаження
- 1 віртуальний сервер
- Образи сервера для балансувальника навантаження ($0.33 на місяць)
- 1 сервер Elasticsearch для логів
- 1 сервер MySQL
- 3 таблиці DynamoDB
- 2 домену в Route 53 ($0.5 за кожний, разом $1 на місяць)
- Статичний сайт на S3 з кешування в CloudFront
- Gateway API + Lambda — API сервісу
Скріншот рахунки за серпень:
Підсумок. AWS, при належної акуратності і уважності, дозволяє значно заощадити на початковому етапі розвитку проекту.