Модели тарификации облачных хранилищ: AWS S3, Azure Blob, Google Cloud Storage
Плата за хранение в AWS, Azure и GCP считается по четырём независимым счётчикам: объём данных в гигабайтах за месяц, количество и тип операций, исходящий трафик и соблюдение минимального срока хранения. Скидка за редкость доступа достигает 20 раз, но каждое обращение к холодным данным стоит дороже, а извлечение из архива занимает часы.
Счёт почти никогда не совпадает с оценкой «объём умножить на цену за гигабайт». В S3 Standard 1 ТБ данных стоит около 23 долларов в месяц, а те же 1 ТБ, разбитые на 10 миллионов мелких файлов, добавляет ещё 50-100 долларов только на операциях записи и чтения. Поэтому контроль расходов начинается с разложения данных по классам и включения тегов, а не с переговоров о скидке.
Классы хранения и их стоимость
Цены ниже приведены для регионов us-east-1, East US и us-central1 за гигабайт в месяц. Провайдеры пересматривают прайс несколько раз в год, поэтому перед расчётом сверяйтесь с актуальным калькулятором.
| Облако и класс хранения | Цена за ГБ в месяц, $ | Минимальный срок | Извлечение |
|---|---|---|---|
| AWS S3 Standard | 0,023 | нет | нет |
| AWS S3 Standard-IA | 0,0125 | 30 дней | 0,01 $/ГБ |
| AWS S3 Glacier Instant Retrieval | 0,004 | 90 дней | нет |
| AWS S3 Glacier Flexible Retrieval | 0,0036 | 90 дней | 0,01 $/ГБ |
| AWS S3 Glacier Deep Archive | 0,00099 | 180 дней | 0,02 $/ГБ |
| Azure Blob Hot | 0,018 | нет | нет |
| Azure Blob Cool | 0,01 | 30 дней | 0,01 $/ГБ |
| Azure Blob Archive | 0,00099 | 180 дней | 0,02 $/ГБ, до 15 часов |
| GCP Standard | 0,020 | нет | нет |
| GCP Nearline | 0,010 | 30 дней | 0,01 $/ГБ |
| GCP Coldline | 0,004 | 90 дней | 0,02 $/ГБ |
| GCP Archive | 0,0012 | 365 дней | 0,05 $/ГБ |
Разрыв между горячим и архивным классом очевиден: 0,023 против 0,00099 доллара за гигабайт, то есть в 23 раза. Ограничения растут вместе со скидкой. Deep Archive требует хранить объект минимум 180 дней, возврат занимает до 12 часов, каждый гигабайт извлечения стоит 0,02 доллара. Azure Archive ведёт себя похоже: 180 дней и до 15 часов на восстановление при стандартном приоритете.
Классы с промежуточными условиями закрывают основную массу рабочих сценариев. Standard-IA, Cool и Nearline рассчитаны на данные, которые читают раз в месяц: цена почти вдвое ниже стандартной, минимальный срок 30 дней, плата за чтение от 0,001 до 0,01 доллара за гигабайт. Годовые отчёты, старые резервные копии и логи месячной давности уместно держать именно там.
Скрытые платежи: операции, трафик, минимальный срок
Главный источник неожиданных сумм - операции. В S3 Standard запись стоит 0,005 доллара за 1000 запросов, чтение 0,0004 доллара за 1000. Пока объекты крупные, эти цифры незаметны. Как только в бакет попадают миллионы мелких файлов, картина меняется: 10 миллионов записей дают 50 долларов сверх платы за объём, повторная запись или включённое версионирование удваивает сумму, полное чтение бакета раз в месяц добавляет ещё несколько долларов. Хранение 1 ТБ такими файлами обходится в те же 23 доллара, а операции доводят счёт до 60-100 долларов.
Исходящий трафик тарифицируется отдельно и почти всегда дороже хранения. AWS берёт около 0,09 доллара за гигабайт после первых 100 ГБ в месяц, Azure около 0,087, GCP около 0,12. Выгрузка 5 ТБ наружу обойдётся примерно в 450 долларов у AWS и около 600 у GCP, тогда как месяц хранения этих же 5 ТБ в Standard стоит 118 долларов. Входящий трафик бесплатен во всех трёх облаках, поэтому перелив данных из локального контура в облако ничего не стоит.
Досрочное удаление из холодных классов приводит к списанию за неотработанный минимальный срок. Загрузили 100 ТБ в Deep Archive и удалили через месяц: платить придётся за все 180 дней, около 507 долларов вместо 101. Похожая логика у Standard-IA с порогом 30 дней, у Cool с тем же порогом и у Azure Archive с порогом 180 дней.
Ещё две строки расходов, о которых забывают: незавершённые многочастные загрузки и старые версии объектов. Неполные multipart-загрузки тарифицируются как обычные данные и не видны в листинге, а включённое версионирование хранит каждую копию объекта бесконечно. Правило жизненного цикла с прерыванием незавершённых загрузок через 7 дней и удалением неактуальных версий через 30 дней закрывает обе проблемы.
Ключевые метрики использования хранилищ для контроля расходов
Минимальный набор метрик: объём данных по классам и бакетам, количество объектов, число операций по типам, объём исходящего трафика, средний размер объекта, распределение объектов по возрасту (младше 30, 90, 180 дней), объём неактуальных версий и незавершённых загрузок. Эти значения сопоставляются с фактическим счётом из AWS Cost Explorer, Azure Cost Management и отчётов GCP Billing, иначе цифры остаются теорией.
Средний размер объекта определяет, окупается ли автоматический перевод между классами. У S3 Intelligent-Tiering плата за мониторинг составляет 0,0025 доллара за 1000 объектов в месяц. Миллион объектов по 100 КБ занимает около 98 ГБ, экономия от перевода в Standard-IA даёт примерно 1 доллар в месяц, а мониторинг стоит 2,50. Для мелких файлов автоматика убыточна, порог окупаемости у AWS обозначен как 128 КБ.
Сбор метрик в AWS, Azure и GCP
AWS. S3 Storage Lens даёт бесплатный дашборд с 28 метриками и глубиной хранения 14 дней: объём, количество объектов, доля неактуальных версий, доля объектов без тегов. Продвинутая версия стоит 0,20 доллара за миллион отслеживаемых объектов в месяц, добавляет глубину до 15 месяцев, фильтры по префиксам и метрики запросов. Ежедневный или еженедельный S3 Inventory выгружает список объектов в CSV или Parquet за 0,0025 доллара за миллион объектов и незаменим, когда нужно найти крупнейшие файлы или объекты без политики жизненного цикла. Базовые метрики CloudWatch BucketSizeBytes и NumberOfObjects обновляются раз в сутки и бесплатны, детальные метрики запросов включаются отдельно и тарифицируются.
Azure. Метрики уровня аккаунта (UsedCapacity, Transactions, Ingress, Egress) доступны в Azure Monitor бесплатно, но с задержкой в несколько минут и без разбивки по префиксам. Storage Insights собирает метрики и инвентаризацию блобов в одном отчёте, строит графики роста объёма и показывает топ контейнеров по количеству операций. Гранулярность до уровня отдельного блоба требует включения диагностических журналов.
GCP. Cloud Monitoring отдаёт метрики бакетов (storage/total_bytes, object_count, api/request_count) бесплатно. Inventory Reports формируют ежедневные или еженедельные CSV-выгрузки объектов с указанием класса, размера и времени создания. Для разбора расходов по префиксам удобнее включить выгрузку биллинга в BigQuery и считать нужные срезы SQL-запросами.
Тегирование и разбивка затрат
Без тегов счёт приходит одной строкой на весь аккаунт, и определить, какой проект израсходовал бюджет, невозможно. Схема, которая работает: два обязательных тега на каждый бакет или контейнер, Project и Environment, плюс Owner для поиска ответственного.
В AWS теги попадают в отчёт по затратам только после активации в разделе Billing (Cost Allocation Tags), данные появляются с задержкой до 24 часов и задним числом не пересчитываются. Для S3 работают теги самого бакета, теги объектов в разбивке затрат не участвуют. В Azure теги наследуются от групп ресурсов, если включено наследование в Cost Management, иначе каждый ресурс помечается отдельно. В GCP метки попадают в экспорт биллинга в BigQuery, и разбивка по ним строится SQL-запросом.
Первые отчёты по тегам обычно вскрывают несколько бакетов, о которых команда забыла: тестовые копии, снапшоты месячной давности, дубли архивов. Их удаление нередко закрывает 5-15% счёта ещё до более глубоких изменений.
Построение отчётности и алертинг по расходам на хранение
Разовые меры по снижению счёта бесполезны без регулярного контроля: данные растут, политики устаревают, новые бакеты создаются без тегов. Рабочая схема состоит из трёх уровней: ежедневный автоматический отчёт, бюджет с алертом и ежемесячный разбор с прогнозом.
Настройка бюджетов и алертов
AWS. В AWS Budgets создаётся бюджет типа Cost budget с фильтром Service = S3 и порогом, например 1000 долларов в месяц. Уведомления настраиваются на фактическое превышение 80% и на прогноз 100% с отправкой в SNS, оттуда сообщение уходит на почту и в корпоративный мессенджер. Первые два бюджета бесплатны, дальше каждый стоит 0,02 доллара в день. Cost Anomaly Detection работает на основе машинного обучения, не требует ручных порогов и бесплатен: он сообщит о скачке расходов на конкретный сервис или аккаунт.
Azure. Budget в Cost Management задаётся на уровне подписки или группы ресурсов, тип Alert настраивается на факт или прогноз, уведомление уходит через Action Group на почту, в webhook или в runbook автоматизации. Экспорт данных о затратах в хранилище настраивается с ежедневным расписанием в формате CSV.
GCP. Budgets & Alerts работает на уровне проекта или биллинг-аккаунта, пороги задаются в процентах (50, 90, 100) и по прогнозу, уведомления публикуются в Pub/Sub и подхватываются функцией Cloud Function или внешним сервисом. Детальные данные для анализа живут в BigQuery, где стоимость разрезается по меткам, сервисам и скидкам.
Интеграция с внешними системами мониторинга
Единая панель нужна, когда в компании несколько облаков и локальные массивы: расходы на хранение должны лежать рядом с загрузкой дисков и задержками сервисов. Grafana собирает данные из CloudWatch, Azure Monitor и Google Cloud Monitoring через готовые источники, а собственные скрипты дописывают метрики из Cost Explorer API (0,01 доллара за запрос), Azure Consumption API и BigQuery. Локальные массивы отдают метрики через node_exporter и textfile-коллектор, где значения обновляет скрипт, складывающий занятость датасетов ZFS и её прирост за сутки.
Дашборд, который отвечает на вопросы руководства, содержит четыре панели: расходы на хранение по дням, топ-5 бакетов по объёму с разбивкой по классам, соотношение стоимости хранения и операций, прогноз исчерпания бюджета до конца месяца. Отдельная панель показывает гигабайты исходящего трафика, потому что именно она чаще всего объясняет расхождение между прогнозом и фактом.
Практические шаги по оптимизации затрат на хранение данных
Работа со счётом начинается с аудита: выгрузка инвентаря по всем бакетам, разбор по размеру объектов, возрасту и частоте доступа. На этом шаге определяется, какие данные можно перевести в холодные классы, что дублируется и что удаляется без последствий.
Настройка жизненного цикла объектов
AWS. Правило жизненного цикла задаёт переход в Standard-IA через 30 дней после создания, в Glacier Instant Retrieval через 90, в Deep Archive через 180 и удаление через 730 дней. Отдельные правила удаляют неактуальные версии через 30 дней и прерывают незавершённые многочастные загрузки через 7 дней. Переходы стоят денег: transition request тарифицируется, поэтому многоступенчатая лестница с шагом в неделю обойдётся дороже, чем два-три перехода за жизненный цикл объекта.
Azure. Lifecycle Management описывает правила условиями daysAfterModificationGreaterThan: переход в Cool через 30 дней, в Archive через 90 или 180, удаление через 365. Фильтры задаются по префиксу имени или по тегам индекса блоба, что позволяет развести логи и пользовательские данные в одном контейнере. Ограничение: у аккаунта с иерархическим пространством имён (Data Lake Storage) часть правил недоступна.
GCP. Object Lifecycle Management настраивается условиями возраста и класса: SetStorageClass NEARLINE на 30-й день, COLDLINE на 90-й, ARCHIVE на 365-й, Delete на 1095-й. Правила применяются к бакету целиком или к объектам с заданным префиксом.
Для наборов, где характер доступа заранее неизвестен, подходит автоматическая классификация: S3 Intelligent-Tiering, в Azure отслеживание времени последнего доступа с правилом перехода, GCP Autoclass. У GCP Autoclass бесплатный и переводит объекты в холодные классы без платы за переходы, у AWS за мониторинг каждого объекта платят отдельно, поэтому для мелких файлов ручные правила дешевле.
Сжатие и дедупликация данных
Сжатие снижает плату за объём напрямую. Текстовые логи в gzip сжимаются в 5-10 раз, zstd даёт лучший коэффициент при сопоставимой скорости распаковки, а перевод аналитических выгрузок из JSON или CSV в Parquet уменьшает объём в 3-10 раз за счёт колоночного хранения и словарей. Данные, сжатые на стороне клиента, требуют распаковки при каждом чтении, поэтому для горячих наборов выигрыш в цене может быть съеден нагрузкой на CPU.
Автоматического сжатия на стороне облака почти нет. В GCS можно указать Content-Encoding, и сервис отдаст объект распакованным клиенту, но тарифицируется он по сжатому размеру. В S3 и Azure Blob сжатие выполняется до загрузки, а метаданные лишь фиксируют факт архивации.
Дедупликация эффективнее сжатия на резервных копиях: блочная дедупликация в restic, borg или специализированных системах даёт 3-5-кратное сокращение на инкрементальных наборах, где между копиями меняется 2-5% данных. Разумная последовательность: дедуплицировать, затем сжать, и только после этого загружать в облако или переносить в архивный класс.
Отдельная статья расходов, которую стоит проверить на этом шаге, это снапшоты и старые версии. Снапшоты дисков, томов и объектов живут годами и оплачиваются по полному тарифу. Ограничение срока хранения снапшотов, удаление версий старше 90 дней и отказ от лишних копий в нескольких регионах дают измеримый эффект в счёте.
Сравнение локального и облачного хранения: что выбрать в гибридной среде
Сравнение строится на TCO за три года, где облако даёт операционные расходы без капитальных, а локальный массив требует вложений в оборудование и оплаты электричества, обслуживания и амортизации. Методика расчёта и набор исходных данных разобраны в отдельном руководстве по расчёту TCO облачных решений, ниже практический пример для 100 ТБ.
Расчёт TCO для локального хранения
Формула: TCO = капитальные затраты (сервер, диски, контроллер, ИБП) / срок амортизации + операционные затраты (электроэнергия, охлаждение, аренда стойки, обслуживание и замена дисков) + стоимость рабочего времени инженера.
Пример на 100 ТБ полезной ёмкости на TrueNAS с ZFS: сервер 2U с HBA и ИБП около 5500 долларов, 12 дисков по 16 ТБ для RAIDZ2 около 3600, монтаж и настройка в пределах 500. Итого капитальные затраты около 9600 долларов, при амортизации за три года это 267 долларов в месяц. Энергопотребление 250 Вт даёт 180 кВт·ч в месяц, около 27 долларов при цене 0,15 за кВт·ч, с учётом охлаждения порядка 40. Резерв на замену дисков и регламентные работы ещё 50. Суммарно около 360 долларов в месяц или 12 900 долларов за три года.
Те же 100 ТБ в S3 Standard стоят 2355 долларов в месяц и 84 780 за три года, в Azure Blob Hot 1843 доллара в месяц, в GCP Standard 2048. Даже с переводом 80% объёма в холодные классы облачный счёт за три года остаётся выше локального в 2-3 раза.
У облака есть обратная сторона выгоды: отсутствие капитальных вложений, эластичность, долговечность на уровне 11 девяток, географическое резервирование и нулевое время на замену железа. Для набора данных, который растёт на 10 ТБ в месяц, локальный массив придётся расширять каждые несколько месяцев, а это новые закупки, время на монтаж и риски простоя. Подбор типа массива под нагрузку разобран в материале о СХД и их классификации.
Гибридные сценарии: когда облако + локальное хранилище выгоднее
Гибрид закрывает разрыв между ценой локального гигабайта и гибкостью облака. Рабочая схема: 500 ТБ архивных данных лежат на локальном TrueNAS, 50 ТБ активных данных в S3 Standard. Локальная часть требует около 30 000 долларов капитальных затрат и примерно 250 долларов в месяц операционных, облачная обходится в 1178 долларов в месяц. За три года суммарно около 80 000 долларов против 466 000, если держать все 550 ТБ в стандартном классе облака. Экономия превышает 80%.
Второй сценарий: локальный кэш горячих данных. NVMe-массив на 10 ТБ перед облачным origin снимает большую часть исходящего трафика, а он в облаке стоит дороже хранения. Кэш на 10 ТБ обходится в 2000-3000 долларов и окупается за несколько месяцев, если выгрузка превышала 3-5 ТБ в месяц.
Третий сценарий: обработка на локальных мощностях с выгрузкой результата в облако. Сырые данные остаются в локальном контуре и не создают плату за egress, а в облако уходит агрегированный результат, который в разы меньше исходного. Дополнительно локальный контур хранит копию по правилу 3-2-1: холодная копия 10 ТБ в Deep Archive стоит около 10 долларов в месяц, что дешевле содержания второго массива.
Для промежуточного слоя, где рядом нужны объектное хранилище, виртуальные машины и управляемый Kubernetes, подойдёт Timeweb Cloud: ресурсы меняются по мере роста нагрузки, а расчёт идёт в рублях, что упрощает прогноз бюджета для проектов без валютных контрактов.
Типичные ошибки в учёте и оптимизации затрат на хранение
- Игнорирование минимального срока хранения. Данные удаляют через месяц после загрузки в архивный класс и получают счёт за весь неотработанный период. Что делать: до массового перевода в архив оценить реальный срок жизни данных, а тестовые наборы держать в стандартном классе.
- Неучтённая стоимость операций при мелких объектах. Миллионы файлов по 50-100 КБ превращают счёт за операции в основную статью расходов. Что делать: упаковывать мелкие объекты в контейнеры и Parquet-партиции, снижая число запросов на порядок.
- Отсутствие тегирования. Счёт приходит одной строкой, виновник перерасхода неизвестен. Что делать: включить обязательные теги Project и Environment на этапе создания бакета и проверять их наличие в политике организации.
- Хранение дубликатов и устаревших наборов. Копии бэкапов, старые выгрузки и тестовые данные занимают до трети объёма. Что делать: квартальный аудит инвентаря с удалением наборов без владельца.
- Единый стандартный класс для всех данных. Горячий класс для годовых отчётов и логов трёхлетней давности переплачивает в 5-20 раз. Что делать: развести данные по классам через политики жизненного цикла.
- Забытые снапшоты и старые версии объектов. Версионирование и снапшоты хранят каждую копию по полному тарифу. Что делать: правило удаления неактуальных версий через 30-90 дней.
- Дорогой регион и лишний трафик между зонами. Цены в отдельных регионах выше базовых на 20-50%, а исходящий трафик между регионами платный. Что делать: держать вычисления рядом с данными и выбирать регион по цене и требованиям к задержке.
- Ручной контроль без алертов. Скачок расходов замечают в конце месяца, когда бюджет уже исчерпан. Что делать: бюджет с порогом 80% от плановой суммы и уведомлением в SNS, Action Group или Pub/Sub.
Внедрение системы контроля затрат: пошаговый план
План рассчитан на 4-6 недель для аккаунта со средней инфраструктурой и выполняется без остановки сервисов.
- Аудит ресурсов и расходов. Выгрузить инвентарь по всем бакетам и контейнерам, собрать отчёт за 3-6 месяцев, отметить топ-10 по объёму и по стоимости операций.
- Тегирование. Ввести два обязательных тега, разметить существующие ресурсы скриптом, включить их в биллинге (AWS Cost Allocation Tags, Azure tags в Cost Management, GCP labels в экспорте BigQuery).
- Сбор метрик. Включить S3 Storage Lens или Inventory, Azure Storage Insights, GCP Inventory Reports. Настроить ежедневную выгрузку в одно место, например в отдельный бакет или таблицу BigQuery.
- Бюджеты и алерты. Создать бюджет на сумму плановых расходов, пороги 80% по факту и 100% по прогнозу, добавить каналы уведомлений. Включить обнаружение аномалий.
- Регулярная отчётность. Настроить еженедельный отчёт по расходам с разбивкой по проектам и классам хранения и ежемесячный разбор с прогнозом на следующий период.
- Политики жизненного цикла. Описать правила переходов и удаления, применить сначала на двух-трёх бакетах, проверить эффект через месяц и раскатить на остальные.
- Чистка содержимого. Удалить дубликаты, старые версии и снапшоты, упаковать мелкие объекты, включить сжатие и дедупликацию на стороне источника.
- Автоматизация. Вынести аудит инвентаря и проверку тегов в регулярные задачи (Lambda, Azure Function, Cloud Function), чтобы новые ресурсы не появлялись без разметки и без политики.
- Пересмотр. Раз в квартал сверять цены провайдеров, проверять, не появился ли более выгодный класс или регион, и корректировать политики при изменении характера доступа к данным.
Чек-лист для самопроверки: теги включены в биллинге, а не только проставлены; бюджеты покрывают все аккаунты и подписки; у каждого бакета есть либо политика жизненного цикла, либо обоснованное исключение; инвентарь обновляется не реже раза в неделю; алерты приходят на человека, а не в пустой ящик; расходы на хранение сравниваются с ростом объёма, а не только с прошлым месяцем.
Начните с одного бакета: включите инвентарь, посмотрите распределение объектов по размеру и возрасту, примените политику жизненного цикла и сравните счёт за два месяца. Разница покажет реальный потенциал экономии по всему аккаунту, а полученные цифры станут основой для разговора с руководством о бюджете. Для расчёта объёмов и прироста пригодятся материалы о хранении больших данных и миграции массивов и о проектировании системы хранения данных.