Размещение веб-приложения на 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, при должной аккуратности и внимательности, позволяет значительно сэкономить на начальном этапе развития проекта.