В этом году в Yandex Cloud появился механизм S3 Inventory — периодическая выгрузка отчёта по объектам в бакете. Вместо самостоятельного «обхода» бакета через операцию LIST и дополнительных API-запросов для каждого объекта можно настроить S3 Inventory и регулярно получать готовую таблицу со списком объектов и их метаданными.

S3 Inventory в Yandex Cloud: аудит бакетов без миллионов вызовов S3 API
Разбираем, как новый инструмент внутри Yandex Object Storage помогает анализировать использование хранилища и управление жизненным циклом данных.
- S3 Inventory — это механизм в Yandex Cloud для периодической выгрузки отчёта по объектам в бакете в формате CSV.
- Отчёт S3 Inventory содержит ключевые данные об объектах: KEY (ключ объекта), SIZE (размер объекта), LAST_MODIFIED_DATE (дата создания или последнего изменения объекта), ETAG (хеш), STORAGE_CLASS (класс хранения), INTELLIGENT_TIERING_ACCESS_TIER (уровень доступа объекта в умном хранилище) и другие.
- Отчёт формируется ежедневно или еженедельно и может состоять из нескольких файлов для больших бакетов.
- S3 Inventory упрощает анализ использования хранилища, аудит, миграцию данных, восстановление и резервное копирование, интеграцию с другими сервисами, управление жизненным циклом данных и подготовку отчётности.
- С отчётом S3 Inventory можно работать как с обычным набором данных: читать через скрипты, загружать в аналитические инструменты, подключать к SQL-движкам, использовать в пайплайнах миграции, резервного копирования и аудита.
- Использование S3 Inventory позволяет избежать многочисленных API-запросов и упростить обработку больших объёмов данных.
- S3 Inventory полезен для оптимизации расходов на хранение данных — например, путём выявления редко используемых или устаревших данных, которые можно переместить в более дешёвый класс хранения.
- Настроить управление выгрузкой S3 Inventory можно через CLI/API, а в будущем будет доступна конфигурация через UI.
- S3 Inventory экономически выгоднее и удобнее, чем многократный «обход» бакета с помощью S3 LIST для больших объёмов данных.
Управление хранилищем и анализ эффективности его использования становятся нетривиальной задачей, когда объём данных вырастает даже до нескольких миллионов объектов. В какой-то момент перестаёт быть очевидно:
- какие данные занимают больше всего места;
- сколько весит конкретный префикс, условная «директория» или набор данных;
- какие файлы лежат в дорогих классах хранения без необходимости.
Даже на нескольких тысячах файлов для проведения такого анализа часто приходится много раз вызывать S3 API: LIST, а иногда и HEAD. На миллионах или миллиардах объектов такой подход становится дорогим, медленным и неудобным.
Например, чтобы посчитать общий размер объектов в определённом префиксе («диретории»), нужно пройтись по всему списку объектов. Чтобы понять, в каком классе хранения находятся объекты, потребуется получать дополнительные метаданные. Это создаёт потребление платных запросов, требует агрегации полученных данных из множества вызовов и, как следствие, вынуждает писать программный код для получения данных и их подготовки для последующей обработки.
Отчёт сохраняется в бакет и формируется ежедневно или еженедельно. Выгрузка представляет собой список объектов с метаданными. Она проходит в ночное время, начинает собираться после полуночи по московскому времени.
С отчётом можно работать как с обычным набором данных: читать через скрипты, загружать в аналитические инструменты, подключать к SQL-движкам, использовать в пайплайнах миграции, резервного копирования и аудита. S3 Inventory полезен тем, что он превращает задачу «обхода» объектного хранилища в задачу анализа табличных данных. Вместо тысяч API-вызовов можно один раз получить CSV и выполнить по нему фильтрацию, агрегацию. Насколько это применимо и удобно в практических сценариях, расскажем дальше.
Из чего состоит отчёт S3 Inventory
S3 Inventory — это выгрузка данных в формате CSV.
Наиболее интересными для использования можно считать следующие данные:
KEY— ключ объекта;SIZE— размер объекта;LAST_MODIFIED_DATE— дата создания или последнего изменения объекта;ETAG— хеш;STORAGE_CLASS— класс хранения;INTELLIGENT_TIERING_ACCESS_TIER— уровень доступа объекта в умном хранилище.
Для больших бакетов отчёт S3 Inventory может состоять из нескольких файлов.
Для чего нужен S3 Inventory: сценарии
Аудит и соответствие требованиям
Компании, работающие в регулируемых отраслях (например, финансах или здравоохранении), могут использовать S3 Inventory для аудита содержимого своих бакетов и обеспечения соответствия требованиям законодательства и внутренних политик. Отчёты помогают отслеживать, какие хранятся данные и как долго, а также соответствуют ли они установленным стандартам.
Миграция данных
При миграции данных между различными хранилищами или сервисами S3 Inventory помогает составить полный список объектов, их метаданных и характеристик. Это упрощает планирование и выполнение миграции, обеспечивая точность и целостность данных.
Анализ использования хранилища
Разработчикам и администраторам S3 Inventory полезен для анализа того, как используется хранилище. Отчёты позволяют выявить редко используемые или устаревшие данные, которые можно удалить или переместить в более дешёвое хранилище, оптимизируя расходы.
Восстановление данных и резервное копирование
В случае необходимости восстановить данные или создать резервные копии S3 Inventory предоставляет список всех объектов, которые нужно восстановить или скопировать. Это ускоряет процесс и уменьшает вероятность ошибок.
Интеграция с другими сервисами и приложениями
Некоторые приложения и сервисы требуют списка объектов в хранилище для своей работы. S3 Inventory позволяет легко экспортировать этот список в нужном формате и тем самым упростить интеграцию.
Управление жизненным циклом данных
S3 Inventory можно использовать для реализации политик управления жизненным циклом данных. Отчёты помогают автоматически перемещать данные между различными классами хранения в зависимости от их возраста, частоты использования и других критериев.
Отчётность и аналитика
Бизнес-аналитики и руководители могут использовать S3 Inventory для составления отчётов о состоянии хранилища, анализа тенденций использования и планирования будущих потребностей в хранении данных.
Практические задачи с применением S3 Inventory
Рассмотрим несколько практических задач максимально подробно, чтобы разобрать как именно применять S3 Inventory.
Анализ использования хранилища и оптимизация стоимости
S3 Inventory позволяет ответить на вопросы:
- сколько данных лежит в каждом префиксе;
- сколько объектов находится в STANDARD, COLD и ICE, а также получить разбивку потребления внутри уровней хранения Intelligent Tiering;
- есть ли мелкие объекты, которые неэффективно хранить в некоторых классах.
Чтобы провести такой анализ, нужно сгруппировать данные по префиксу и STORAGE_CLASS и понять, какие части приложения создают основное потребление хранилища по объёму. Для бакетов в Intelligent Tiering вместо поля STORAGE_CLASS нужно использовать поле INTELLIGENT_TIERING_ACCESS_TIER — именно там хранится информация об уровне хранения внутри класса «Умного хранилища».
В нашей статье мы приводили характерные размеры файлов, эффективных для хранения в каждом классе. При анализе размера каждого файла можно понять, эффективно ли он находится в конкретном классе хранения. Например, файл размером 10 КБ лучше оставить в классе STANDARD.
Расчёт размера «директории» в бакете
Без преувеличения, это самая популярная задача над данными в S3, особенно при использовании концепции «коммунального бакета», когда множество пользователей хранят данные в одном бакете.
В S3 нет настоящих директорий. Есть только ключи объектов с префиксами. Но на практике приложения часто используют структуру вида:
- s3://userbucket/user1/123/photos/
- s3://userbucket/user2/data/
- s3://userbucket/user3/01.01.2026/
Структура обусловлена структурой политик доступа в S3.
Например, эта политика определяет, что данные разных клиентов будут лежать в разных префиксах:
{
"Version":"2012-10-17",
"Statement":[
{
"Sid": "OwnDirPermissions",
"Effect": "Allow",
"Principal": "*",
"Action": "*",
"Resource": ["arn:aws:s3:::<имя_бакета>/${aws:userid}/*"]
}
]
}
Чтобы узнать, сколько весит такой «каталог», нужно суммировать размер всех объектов с нужным префиксом. Без S3 Inventory это обычно делается через операции List с пагинацией. На больших бакетах такой подход может занимать минуты или часы. S3 Inventory позволяет легко построить внутренний биллинг: сколько данных хранит каждый клиент и сколько это стоит. Например, можно будет сгруппировать данные по первым префиксам примерно так:
SELECT
split_part(key, '/', 1) AS top_level_prefix,
COUNT(*) AS object_count,
SUM(size) AS total_size
FROM inventory_table
GROUP BY 1
ORDER BY total_size DESC;
Резервное копирование и миграция данных
S3 Inventory можно использовать для отчёта об объектах и инкрементальных бэкап-операций. Например, если вы проводите миграцию или копирование данных из одного бакета в другой, то в качестве верификации результата вы можете получать отчёты из двух бакетов (источника и назначения). Их можно сравнить, по каждому объекту учитывая key, size, etag, last_modified — это даст повышенную надежность.
При инкрементальном бекапе можно получать список объектов, изменённых с прошлой процедуры резервного копирования. Например, так можно получить только объекты, изменённые после определённой даты:
SELECT
key,
size,
last_modified_date
FROM inventory_table
WHERE last_modified_date > timestamp '2026-08-01 00:00:00';
Отчётность и аналитика
Используя регулярные отчёты S3 Inventory и накапливая результаты аналитики, вы сможете проследить ситуацию в динамике. Например, оценить тренды роста префиксов («директорий»), распределение данных по классам хранения, отследить аномальные всплески, определить доли холодных или архивных данных и многое другое.
Подключите S3 Inventory к вашему бакету
Настроить управление выгрузкой можно через CLI/API.
А скоро можно будет сконфигурировать выгрузку отчётов S3 Inventory в UI.
Что в итоге
S3 Inventory — это практичный инструмент для работы с большими бакетами. Он позволяет заменить дорогой и медленный «обход» миллионов объектов через API на регулярную табличную выгрузку, которую удобно анализировать SQL-запросами, скриптами и дата-пайплайнами.
Применяйте S3 Inventory для аудита, аналитики, оптимизации стоимости, миграции, резервного копирования и восстановления он часто оказывается удобнее, масштабируемее и экономически выгоднее.
|
Критерий |
S3 Inventory |
S3 LIST |
|
Основное назначение |
Для ежедневного или еженедельного формирования отчётов. Отлично подходит для регулярной инвентаризации, аудита, аналитики, массовой обработки объектов |
Разовое получения списка объектов (текущее состояние бакета) на момент запроса |
|
Лёгкость использования |
Достаточно разово задать конфигурацию без написания кода |
Нужно писать код для «обхода» бакета через API-вызовы, обработку пагинации, ошибок и агрегации результата в табличную форму |
|
Если в бакете миллионы объектов |
Вы получаете подготовленную табличную выгрузку в файлах |
«Обход» миллионов объектов требует выделить вычислительные ресурсы. Полный обход занимает много времени |
|
Версии объектов |
Информация о версиях объектов есть в отчёте S3 Inventory |
Для работы с версионированными объектами требуется дополнительно вызывать |
|
Историческая аналитика |
Да, если сохранять отчёты за разные даты |
Историю нужно собирать и хранить самостоятельно |
|
Стоимость получения полного перечня объектов |
Обычно выгоднее для регулярных массовых задач. Оплачивается генерация и хранение отчёта |
Зависит от числа LIST-запросов. При массовом «обходе» больших бакетов стоимость и нагрузка растут |
|
Удельная цена на один объект |
0,26 ₽ за 1 млн объектов. Подробнее о тарификации — в документации. |
|
|
Версии объектов, шифрование, ObjectLock, ACL, теги, контрольные суммы |
Да, всё есть в отчёте S3 Inventory |
Потребуются дополнительные вызовы: |
|
Информация об уровне хранения объекта внутри Intelligent Tiering |
Да |
Нет. Информацию об уровне хранения в Intelligent Tiering можно получить только в S3 Inventory |

