Основы биллинга и стоимости
AWS тарифицирует по факту использования — compute, storage и трафик — а исходящий трафик это тихий убийца. Подбери под нагрузку On-Demand, Reserved/Savings Plans или Spot и читай счёт как сигнал об архитектуре.
Весь месяц счёт за инстансы был ровным. Потом финансы переслали скриншот: одна строка, «Data Transfer Out — Internet», тихо выросла больше, чем весь парк EC2, который этот трафик и сгенерировал. Никто это не выделял, никто не одобрял, никто не ждал — потому что у исходящего трафика нет дашборда, на который смотришь, нет инстанса, который можно остановить. Стоимость compute была тем, за чем следили все. А ударил тот кусок счёта, на который никто не смотрел.
К концу урока ты будешь знать, за какими строками следить в каждом счёте AWS, как подобрать нагрузке правильную модель покупки и как настроить оповещения, ловящие убегающий egress-счёт до того, как он придёт инвойсом.
Pay-per-use и три измерения стоимости
Никакой фиксированной подписки на AWS нет. Ты платишь за то, что выделил и потребил, по каждому сервису отдельно, а итог — сумма трёх повторяющихся измерений, которые есть почти в каждом счёте.
Время compute. Инстанс EC2, вызов Lambda, задача Fargate — ты платишь за каждую секунду или час, что мощность существует, делает она полезную работу или нет. В этом ловушка простаивающих зарезервированных мощностей: остановленный инстанс EC2 за compute ничего не стоит, а вот запущенный, про который ты забыл, тарифицируется круглосуточно. Выделено-но-простаивает — самая частая строка счёта, которой можно было избежать.
Хранилище (GB-месяц). Единица — гигабайт, хранящийся месяц. S3 Standard стоит примерно $0.023 за GB-месяц в распространённых регионах (и спроектирован на 11 девяток — 99,999999999% — надёжности, так что цена покупает почти нулевой риск потери данных); тома EBS, снапшоты и storage RDS тарифицируются так же. Хранилище тарифицирует ещё и запросы, не только байты: S3 берёт примерно $0.0004 за 1 000 GET и $0.005 за 1 000 PUT, поэтому нагрузка, делающая миллионы мелких чтений объектов, может накрутить счёт за запросы, сопоставимый с самим хранением байтов. Хранилище — обычно предсказуемая часть счёта: растёт медленно, и его рост видно заранее. Подвох в том, что storage, которым ты перестал пользоваться, тарифицируется, пока ты его не удалишь: осиротевшие тома EBS от завершённых инстансов и забытые снапшоты копятся незаметно.
Трафик (egress). Это измерение и устраивает командам засаду. Эмпирическое правило: входящий трафик (в AWS) обычно бесплатен; исходящий трафик (наружу, в интернет) — нет, обычно около $0.09 за GB на первом уровне, варьируясь по региону и объёму. Хуже того, трафик внутри AWS тоже не бесплатен: трафик между зонами доступности стоит обычно ~$0.01/GB в каждую сторону (то есть ~$0.02/GB за round trip между двумя сервисами в разных зонах), а межрегиональный — ~$0.02/GB. Болтливая сетка микросервисов, расползшаяся по AZ, или база, реплицирующаяся между регионами, могут накрутить расходы на трафик, которые затмят compute, его порождающий. Положи цифры: сервис, прокачивающий 50 ТБ/месяц межзональной болтовни по ~$0.02/GB round-trip — это ~$1 000/месяц, которые стираются простым прижатием двух сервисов в одну зону — чистая архитектура, ноль изменений в фичах.
▸Почему это работает
Почему исходящий трафик — тихий убийца, а входящий бесплатен? AWS хочет твои данные внутри — ingress это въезд к сервисам, за работу которых ты потом заплатишь. Вытащить данные наружу — вот где они зарабатывают и где твоя архитектура утекает деньгами, которых ты не видишь ни на одном дашборде инстанса. NAT Gateway — классический пример: каждый инстанс приватной подсети, дотягивающийся до интернета, идёт через него, и ты платишь и почасовой сбор (~$0.045/час, ~$33/месяц просто за существование), и погигабайтный сбор за обработку (~$0.045/GB) всего, что через него течёт, — поверх egress, если этот трафик потом уходит в интернет. Конкретно: парк, тянущий 100 ТБ/месяц образов контейнеров и пакетов через NAT Gateway, — это примерно $4 500/месяц только за обработку NAT — сбор, который не виден ни на одном дашборде инстанса и часто чинится за копейки добавлением VPC Gateway Endpoint для S3 (бесплатно), чтобы этот трафик вообще не касался NAT. Приведённые цены иллюстративны и варьируются по региону и времени — всегда сверяйся с актуальной страницей цен.
Варианты покупки EC2: трейдофф цена/обязательство/прерывание
Один и тот же инстанс EC2 может стоить совершенно по-разному в зависимости от того, как ты его покупаешь. Есть три корзины, меняющие цену на обязательство и надёжность.
On-Demand — вариант по умолчанию: никаких обязательств, платишь полный тариф за секунду/час, запускаешь и останавливаешь когда хочешь. Самый дорогой за час и самый гибкий — подходит для скачкообразных, непредсказуемых или короткоживущих нагрузок, где использование не спрогнозировать.
Reserved Instances / Savings Plans — обязательство в обмен на скидку. Ты обещаешь 1 или 3 года использования (Savings Plans фиксируют трату в долларах-за-час; Reserved Instances — конкретную конфигурацию инстанса), и AWS снижает тариф — часто до ~72% от On-Demand. Подходит для стабильных, базовых, постоянно работающих нагрузок, чей минимум ты можешь спрогнозировать на год вперёд. Риск — само обязательство: платишь, даже если потребление упало.
Spot продаёт свободные мощности AWS со скидкой до ~90% от On-Demand — но AWS может забрать их обратно с предупреждением за две минуты, как только мощности снова понадобятся. Подходит только для отказоустойчивой, прерываемой работы: batch-задачи, CI-раннеры, stateless-воркеры, обработка больших данных с чекпойнтами. Не подходит для всего, что не переживёт внезапного завершения.
Реальные парки смешивают все три: Reserved/Savings Plans покрывают предсказуемую базу, On-Demand берёт на себя переменную середину, а Spot впитывает всплесковую прерываемую нагрузку с глубокой скидкой.
У тебя stateless batch-конвейер (обработка изображений), который умеет возобновляться с чекпойнтов и не имеет дедлайна. Какой вариант покупки минимизирует стоимость?
Free Tier и его ловушки
Новые аккаунты получают три вида бесплатного, и смешение их — то, как срабатывает ловушка. 12 месяцев бесплатно (например, 750 часов/месяц t2.micro/t3.micro, 5 GB S3) истекает через год после регистрации — потом тарифицируется по полной, часто незаметно. Всегда бесплатно (например, 1 млн запросов Lambda/месяц, кусок DynamoDB) сохраняется, но имеет жёсткие лимиты. Пробные периоды — короткие (30–90 дней) бесплатные плюшки по отдельным сервисам.
Ловушки структурны. Лимиты Free Tier — по категориям, а не общий «бесплатный аккаунт»: превысь 750 инстанс-часов, запустив два инстанса, или вылези за лимит S3 — и тебе сразу начислят за перерасход. 12-месячный таймер — главное: команда поднимает «бесплатное» демо, забывает про него, и через двенадцать месяцев оно тихо превращается в платный инстанс, работающий круглосуточно. И Free Tier покрывает сервис, но редко трафик — твой бесплатный инстанс всё равно может генерировать оплачиваемый egress. Относись к Free Tier как к лимитированной квоте с истечением, а не как к «AWS бесплатен на год».
Контроль расходов: сделай счёт наблюдаемым до того, как он удивит
Когда видишь скачок в счёте в середине месяца, ты хочешь инструмент, который уже предупреждал об этом, — а не дашборд, о котором надо было вспомнить самому. Эти четыре инструмента — твоя система раннего предупреждения.
Нельзя управлять тем, чего не видишь, а AWS выставляет счёт постфактум — поэтому вся игра в том, чтобы сделать траты наблюдаемыми рано. Базу образуют четыре инструмента.
AWS Budgets позволяет задать порог траты (или использования) и получать оповещение — по email или SNS (Simple Notification Service — сервис push-уведомлений AWS), — когда фактическая или прогнозируемая стоимость его пересекает. Это твоя растяжка-сигнализация; оповещение о прогнозируемом перерасходе ловит убегающий счёт за egress в середине месяца, а не в следующем инвойсе. Cost Explorer — поверхность для анализа: он разбивает траты по сервису, региону и времени, чтобы ты ответил «что выросло и когда». Cost-allocation теги позволяют атрибутировать траты командам, проектам или окружениям — тегируй всё (team, env, service), и счёт станет журналом по владельцам, а не одной непрозрачной цифрой. Классический billing alarm (алярм CloudWatch — сервиса мониторинга и метрик AWS — на EstimatedCharges) — самая простая первая линия обороны для личного или небольшого аккаунта.
| Измерение | On-Demand | Reserved / Savings Plans | Spot |
|---|---|---|---|
| Скидка к On-Demand | база (0%) | до ~72% | до ~90% |
| Обязательство | нет | 1 или 3 года | нет |
| Риск прерывания | нет | нет | отзыв за 2 минуты |
| Подходящая нагрузка | скачкообразная, непредсказуемая, короткая | стабильная постоянная база | отказоустойчивый, прерываемый batch |
Стоимость EC2 у приложения ровная, но месячный счёт резко подскочил. Куда смотреть первым делом?
Ты хочешь получать предупреждение в середине месяца, если траты идут к превышению лимита, до прихода инвойса. Какой инструмент?
- 01Стоимость EC2 ровная, но счёт подскочил. Объясни самую вероятную причину и почему её не показывает ни один дашборд инстанса.
- 02Когда выбирать On-Demand против Reserved/Savings Plans против Spot, и какова ось трейдоффа?
Биллинг AWS — это оплата по факту использования без фиксированной подписки, и почти любой счёт это сумма трёх измерений: время compute (платишь за существующую мощность, поэтому простаивающие запущенные инстансы — самая частая избегаемая трата), хранилище в GB-месяцах (S3 Standard около $0.023/GB-месяц, предсказуемо, но осиротевшие тома и снапшоты остаются) и трафик — измерение, устраивающее командам засаду, потому что входящий обычно бесплатен, а исходящий в интернет идёт около $0.09/GB, трафик между AZ стоит примерно $0.01/GB в каждую сторону, межрегиональный дороже, а NAT Gateway берёт и почасово, и за каждый обработанный GB. Один и тот же инстанс EC2 стоит совершенно по-разному в зависимости от модели покупки: On-Demand для скачкообразной непредсказуемой работы, Reserved Instances или Savings Plans для стабильной базы со скидкой до ~72% в обмен на обязательство на 1 или 3 года, и Spot для отказоустойчивого прерываемого batch со скидкой до ~90% и риском отзыва за две минуты. Free Tier — это три вещи (12 месяцев, всегда-бесплатно и пробные периоды), и его ловушки — лимиты по категориям, 12-месячное истечение, тихо превращающее демо в платные ресурсы, и тот факт, что трафик он покрывает редко. Сделай траты наблюдаемыми до прихода инвойса: AWS Budgets для оповещений по прогнозируемой стоимости, Cost Explorer для разбора того, что выросло, cost-allocation теги, чтобы счёт был журналом по владельцам, и billing alarm как простейшую растяжку. И главное — читай счёт как сигнал об архитектуре: неожиданные расходы почти всегда это egress, простаивающие зарезервированные мощности или NAT Gateway, за которым никто не следил. Теперь, когда видишь неожиданную строку в счёте, ты знаешь: смотри сначала на трафик, потом на осиротевшие ресурсы, и настрой прогнозный Budget — чтобы следующий скачок пришёл к тебе оповещением, а не инвойсом. (Все цены иллюстративны и варьируются по региону и времени; сверяйся с актуальной страницей цен AWS.)
Практика
Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.