Размещение веб-приложения на 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 берёт деньги за трафик, причём цены тоже не низкие:

nzoyogjmyvpepr6ayqo0-jsoc2s.png

Так для чего же тогда выбирать Amazon? Вот какие причины вижу я:


  1. Большое количество полезных сервисов.
  2. Free Tier.

О втором и пойдет речь в этой статье.

На странице с ценами есть ссылку на страницу с уровнем бесплатного пользования, которая гласит что многими сервисами можно пользоваться бесплатно в течении 1 года.

qwlnclh-vbsq-yrwxp1fcz2cays.png

Этого вполне достаточно чтобы целый год держать бесплатно полноценный сайт или бекенд мобильного приложения / игры или чего-то ещё. К тому же:


  • Можно завести произвольное количество аккаунтов (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 с настроенными предупреждениями:
mlnndbpffqnrsf_kvzxljz14jbs.png

Бюджет позволяет задавать месячный лимит затрат, при превышении которого будет отпралено предупрежлении по аналогии с CloudWatch. Можно создать бесплатно до 3 бюджетов.

yfiomcjzqrszd-wr5mmdq043fcc.png

Из личного опыта: однажды на своём сервере поднял 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 сервиса

Скриншот счёта за август:
__po2swwx3lqkfg-i5u-hgvtupo.png

Итог. AWS, при должной аккуратности и внимательности, позволяет значительно сэкономить на начальном этапе развития проекта.

© Habrahabr.ru