open atlas
↑ К треку
AWS на практике AWS · 07 · 01

Оптимизация стоимости: варианты покупки, egress, простой и видимость

Стоимость — это свойство архитектуры. Главные рычаги по порядку: закоммить базовый compute в Savings Plans/Spot, убей простой и перестань платить за egress и NAT, которые тебе не были нужны. Cost Explorer, Budgets и активированные теги дают видимость для этого.

AWS Middle ◷ 18 min
Уровень
ОсновыJuniorMiddleSenior

Счёт приходит первого числа и он на сорок процентов выше прогноза. Никто не выкатил новую фичу. Команда открывает Cost Explorer и находит трёх тихих виновников: парк EC2-инстансов, работающих 24/7 целиком на On-Demand, потому что «Savings Plans купим потом»; единственную строку «data transfer», которую никто не может объяснить, — её след ведёт к болтливому сервису, чьи поды приземлились в другой зоне доступности (AZ), чем база, которую они весь день молотят; и NAT gateway, прогоняющий терабайты для нагрузки, которая общается только с S3. Ничего из этого не баг. Каждый доллар — за реальный compute и реальные байты. Сюрприз не в том, что AWS выставил счёт, — а в том, что архитектура месяцами тихо выбирала платить полную цену, через AZ, через метрируемый шлюз, и никто не атрибутировал из этого ни цента, потому что ничего не было размечено тегами.

После этого урока ты сможешь открыть любой счёт AWS, с первого взгляда назвать трёх тихих виновников и знать, за какой рычаг тянуть первым.

Рычаг 1: варианты покупки compute — подгони обязательство под базу

У одной и той же EC2-ёмкости четыре цены, и разрыв между самой дешёвой и самой дорогой огромен. On-Demand — дефолт: максимум гибкости, без обязательств и самая высокая ставка за час. Ты платишь за каждый час работы инстанса, занят он или простаивает. Это верная цена для непредсказуемой или короткоживущей работы — и неверная для базы, работающей круглосуточно.

Savings Plans меняют гибкость на скидку: ты обязуешься тратить на compute постоянную сумму (в долларах в час) на один или три года, а взамен экономишь до ~72% против On-Demand. Стоит знать две формы. Compute Savings Plan — гибкая: его скидка (до ~66%) применяется автоматически независимо от семейства инстанса, размера, региона, ОС и по EC2, Fargate и Lambda, так что ты можешь переархитектурить под ним без потери ставки. EC2 Instance Savings Plan дешевле (до ~72%), но уже: ты обязуешься по конкретному семейству инстансов в выбранном регионе, и скидка следует только за сменой размера и ОС внутри этого семейства. Reserved Instances — более старый механизм, появившийся до Savings Plans; они связывают скидку с опциональным резервированием ёмкости и для чистой экономии в основном вытеснены Savings Plans.

На дальнем конце Spot Instances продают свободную ёмкость AWS со скидкой до ~90% против On-Demand — с одной оговоркой: AWS может забрать инстанс в любой момент, давая лишь двухминутное предупреждение об отзыве (через метаданные инстанса и событие EventBridge). Spot — подарок для прерываемой, stateless, отказоустойчивой работы — батч-джобов, CI-раннеров, обработки больших данных, всего, что умеет чекпойнтиться и возобновляться, — и ловушка для всего stateful, что не переживёт убийства на полпути.

Сеньорское правило — подгонять обязательство под форму спроса: покрой постоянную базу 24/7 через Savings Plan или RI, поглоти непредсказуемый всплеск сверху через On-Demand, а прерываемый батч гоняй на Spot. Цены зависят от региона и со временем меняются — всегда сверяй актуальные числа на странице цен EC2; проценты здесь — это опубликованные AWS максимумы «до», а не котировка.

Рычаг 2: data transfer и NAT — тихие строки счёта

Compute — это счёт, за которым следят все; data transfer — счёт, который их удивляет. Грубая ментальная модель: ingress из интернета обычно бесплатен, egress — нет, а трафик, пересекающий границу зоны доступности (AZ) или региона, метрируется, даже если он не покидает AWS. Микросервисная архитектура, постоянно перешёптывающаяся между сервисами в разных AZ, может накрутить cross-AZ-плату за трафик, затмевающую compute, который этот трафик и генерирует. Фикс архитектурный: держи болтливый трафик внутри одной AZ (соразмещай собеседников), ставь перед egress в интернет CloudFront, чтобы ориджин отдавал байты один раз, а CDN дальше отдавал их дёшево, и достигай сервисов AWS вроде S3 и DynamoDB через VPC-эндпоинты, а не маршрутизируя этот трафик наружу через шлюз.

Этот шлюз — вторая тихая строка. NAT gateway тарифицируется сразу двумя способами: плата за каждый час, что он провижинен, плюс плата за каждый гигабайт, который он обрабатывает, — обе зависят от региона (см. цены NAT gateway). Классический сюрприз — нагрузка в приватной подсети, чей единственный «внешний» трафик идёт в S3: каждый байт метрируется через NAT без причины. Собственная рекомендация AWS — размещать ресурсы в той же AZ, что и NAT gateway, чтобы не накладывать сверху cross-AZ-плату, и использовать VPC interface- или gateway-эндпоинты для трафика к сервисам AWS, чтобы он обходил NAT целиком.

# Быстро найди главные источники трат через Cost Explorer, сгруппировав по usage type
aws ce get-cost-and-usage \
  --time-period Start=2026-05-01,End=2026-06-01 \
  --granularity MONTHLY \
  --metrics "UnblendedCost" \
  --group-by Type=DIMENSION,Key=USAGE_TYPE \
  --query 'ResultsByTime[0].Groups[?Metrics.UnblendedCost.Amount>`100`]'
# Ищи *-DataTransfer-Out-Bytes, NatGateway-Bytes и *-DataTransfer-Regional-Bytes

Рычаг 3: простой и отходы — ты платишь за то, что забыл

Когда аудируешь счёт впервые, этот раздел обычно удивляет больше всего — потому что ничего не сломано, просто никто не смотрел. Большая доля типичного счёта — чистые отходы: ёмкость, которая провижинена, тарифицируется и ничего не делает. Обычные подозреваемые — неприсоединённые тома EBS, оставшиеся после терминации инстансов, старые снапшоты, которые никто не чистит, переразмеренные инстансы под пик, который не приходит, простаивающие RDS, оставленные «на всякий случай», забытые dev/test-окружения, работающие по ночам и выходным, и балансировщики, не подключённые ни к чему. Два инструмента бьют прямо по этому: Compute Optimizer анализирует утилизацию и рекомендует right-sizing (на размер вниз или к более дешёвому семейству), а простой планировщик, останавливающий непродакшен-инстансы вне рабочих часов, может срезать compute-счёт dev-аккаунта более чем вдвое — такие окружения простаивают ~128 из 168 часов в неделю.

Рычаг 4: видимость — нельзя оптимизировать то, что нельзя атрибутировать

Каждый рычаг выше невидим без измерения, и фундамент — теги распределения затрат (cost allocation tags). Разметка ресурсов по team, env и service позволяет резать счёт по тому, кто чем владеет, — но есть острая ловушка: пользовательский тег не появится в отчётах о затратах, пока ты не активируешь его в консоли Billing and Cost Management, и после применения, как отмечает AWS, новый тег-ключ может появляться в консоли Billing для активации до 24 часов, а после активации учитывается только в затратах с этого момента, не задним числом. Вокруг тегов — три инструмента: Cost Explorer для анализа и прогноза трат, AWS Budgets для срабатывания алертов (или даже автоматических действий) при пересечении порога и Cost Anomaly Detection для отлова всплеска в день его начала, а не первого числа.

{
  "BudgetName": "monthly-prod-ceiling",
  "BudgetType": "COST",
  "TimeUnit": "MONTHLY",
  "BudgetLimit": { "Amount": "5000", "Unit": "USD" },
  "CostFilters": { "TagKeyValue": ["user:env$prod"] },
  "NotificationsWithSubscribers": [
    {
      "Notification": { "NotificationType": "ACTUAL", "ComparisonOperator": "GREATER_THAN", "Threshold": 80 },
      "Subscribers": [{ "SubscriptionType": "EMAIL", "Address": "platform-oncall@example.com" }]
    }
  ]
}
РычагТипичные отходыФиксИнструмент
Покупка computeБаза 24/7 на полном On-DemandSavings Plan на базу, Spot на батчРекомендации SP в Cost Explorer
Data transferCross-AZ-болтовня, egress в интернетСоразместить в AZ, CloudFront, VPC-эндпоинтыCost Explorer по usage type
NAT gatewayЗа час + за ГБ на трафик к AWSVPC-эндпоинты для S3/DynamoDB, та же AZVPC flow logs, Cost Explorer
ПростойСиротские EBS, простаивающий RDS, переразмерRight-size, расписание остановок devCompute Optimizer
ВидимостьНеразмеченные, неатрибутируемые тратыАктивировать cost allocation tags, бюджетыBudgets, Anomaly Detection
Почему это работает

Почему data transfer так легко проморгать? Потому что его не показывает ни один отдельный ресурс. У compute, хранилища и баз есть аккуратная строка, на которую можно смотреть; трансфер — эмерджентное свойство того, как куски общаются. У cross-AZ-платы нет владеющего ресурса — это побочный продукт приземления двух сервисов в разные AZ, решение планировщика, а не человека. Именно поэтому важны теги и группировка Cost Explorer по usage type: единственный способ увидеть стоимость трансфера — резать счёт по потоку, потому что ничто в консоли не подсветит это как «с этим сервисом дорого разговаривать».

Выбери лучший вариант

Продакшен-API держит постоянный парк ~20 инстансов 24/7 при высокой утилизации, с редкими всплесками трафика, плюс ночной батч-пайплайн, который перекодирует медиа и безопасно перезапускается с чекпойнта. Нужен самый дешёвый микс без риска доступности API. Выбери стратегию покупки.

Викторина

Ты коммитишь Compute Savings Plan, затем мигрируешь сервис с EC2 на Fargate и переносишь его в другой регион. Что происходит со скидкой?

Викторина

Счёт показывает большую растущую плату «data transfer», но каждый инстанс выглядит верно размеренным. Самая вероятная архитектурная причина?

Вспомните перед уходом
  1. 01
    Перечисли варианты покупки compute от самого дорогого к дешёвому и правило подгонки их под нагрузку.
  2. 02
    Где деньги тихо утекают помимо compute и какие инструменты дают видимость, чтобы это поймать?
Итог

Стоимость — свойство архитектуры, и рычаги окупаются по порядку рычажности. Теперь, когда откроешь Cost Explorer и увидишь счёт, который тебя удивил, — прогони четыре рычага по порядку, прежде чем решить, что это ошибка тарификации: в девяти случаях из десяти плата реальная, а фикс архитектурный. Сначала подгони варианты покупки compute под форму спроса: On-Demand — гибкий дефолт по полной цене, Savings Plans берут до ~72% скидки в обмен на обязательство в долларах в час на 1 или 3 года (Compute Savings Plan остаётся гибким по семейству, региону и по EC2/Fargate/Lambda, а EC2 Instance-план меняет гибкость на чуть более глубокую скидку, запертую на одно семейство и регион), а Spot продаёт свободную ёмкость со скидкой до ~90%, но может быть отозван с лишь двухминутным уведомлением — поэтому закоммить постоянную базу 24/7, плати On-Demand за всплеск сверху, а прерываемый stateless-батч гоняй на Spot. Во-вторых, перестань платить за движение данных, которое было не нужно: cross-AZ-болтовня и egress в интернет метрируются, а NAT gateway берёт за час и за ГБ, так что соразмести болтливые сервисы в одной AZ, поставь CloudFront перед egress и маршрутизируй трафик к сервисам AWS через VPC-эндпоинты. В-третьих, убей простой — сиротские EBS, простаивающий RDS, переразмеренные инстансы, забытые dev-окружения — через right-sizing Compute Optimizer и плановые остановки. В-четвёртых, сделай всё видимым: активируй cost allocation tags, чтобы траты атрибутировались по команде, окружению и сервису, затем гоняй Cost Explorer, Budgets и Anomaly Detection. Все цены здесь — опубликованные AWS максимумы «до», зависят от региона и иллюстративны — сверяй актуальные числа на страницах цен AWS, прежде чем их котировать.

Практика

Начни сверху. Задачи идут от простого к сложному: вспомнить факт, применить к случаю, затем senior-уровень. Открой, попробуй, потом открой ответ.

вспомнитьприменитьуглубить0 из 6 завершено
Связанные уроки

Что-то непонятно?

Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.

Примени это

Примени этот урок в реальном проекте.

хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources5
expand
  1. 01
  2. 02
  3. 03
  4. 04
  5. 05

Trademarks belong to their respective owners. Editorial reference only.