Выгрузка метаданных объектов (S3 Inventory)
В Object Storage вы можете выгрузить метаданные объектов (S3 Inventory) из бакетов для дальнейшего анализа и каталогизации. Данные выгружаются в другой бакет в формате CSV
Важно
Функциональность выгрузки метаданных объектов (S3 Inventory) находится на стадии Preview и не тарифицируется. В дальнейшем выгрузка будет платной.
Операции LIST и HEAD, выполненные в рамках функциональности S3 Inventory, отдельно тарифицироваться не будут.
Взимается плата за операции PUT и хранение данных в бакете, в который выгружаются метаданные. Подробнее см. в разделе Правила тарификации для Object Storage.
Выгрузка метаданных всех объектов будет полезна для следующих задач:
- поиск и анализ данных;
- очистка бакета от дубликатов файлов;
- упрощение синхронизации с другими хранилищами и сервисами;
- улучшение наблюдаемости (observability);
- реализация сценариев резервного копирования и восстановления версионированных данных.
Механизм выгрузки
Выгрузка S3 Inventory представляет собой список объектов с метаданными, сформированный по принципу Eventual consistency
Такой принцип выбран, поскольку для обеспечения горизонтального масштабирования отказоустойчивости и доступности данные в хранилище Object Storage разбиты на отдельные сегменты — шарды, и чтобы формирование выгрузок не влияло на производительность работы с бакетом, опрос всех шардов хранилища происходит асинхронно.
Если во время формирования выгрузки объекты были записаны в шард, который уже был просканирован, то конкретно в эту выгрузку данные об этих объектах не попадут. Аналогично работает и удаление объектов. Это стандартная ситуация при выполнении операций LIST в бакете.
Совет
Перед тем как произвести какое-либо действие с объектом из выгрузки, рекомендуется проверить его актуальное состояние с помощью метода HeadObject в соответствии с инструкцией.
Исходный и целевой бакеты
Бакет, из которого выгружаются метаданные, называется исходным бакетом. Такой бакет содержит конфигурацию выгрузки и объекты, метаданные которых нужно выгрузить. Вы можете получить метаданные всех объектов исходного бакета или отфильтровать объекты по папке (префиксу).
Бакет, в который будут записаны выгружаемые метаданные, называется целевым бакетом. Чтобы сгруппировать файлы выгрузки в целевом бакете, в конфигурации можно указать префикс для выгрузки.
Требования
- Исходный и целевой бакеты могут совпадать.
- Исходный и целевой бакеты должны находиться в одном облаке.
- На целевом бакете не должно быть включено шифрование.
Примечание
Чтобы записывать отчеты в целевой бакет, для которого настроена политика доступа, добавьте в нее правило, разрешающее всем учетным записям выполнять действие PutObject, а в качестве ресурса укажите <префикс_выгрузки>/.
Конфигурация выгрузки и типы метаданных
Вы можете создать конфигурацию выгрузки с помощью Yandex Cloud CLI или Yandex Cloud API. В конфигурации указываются следующие параметры:
- имя конфигурации;
- целевой бакет и префикс, по которому будет произведена выгрузка;
- периодичность создания отчетов — ежедневно или еженедельно;
- включаемые версии объектов — текущие или все версии;
- опциональный префикс для фильтрации объектов, которые попадут в отчет;
- статус конфигурации: включена или выключена;
- список опциональных метаданных объектов.
Отчет выгрузки содержит список объектов в исходном бакете и метаданные для каждого перечисленного объекта. Всегда включает следующие поля:
BUCKET_NAME— имя исходного бакета;KEY— ключ объекта.
Если выгрузка осуществляется по всем версиям объектов, то также будут добавлены:
VERSION_ID— идентификатор версии;IS_LATEST— флаг последней версии;DELETE_MARKER— флаг маркера удаления.
Опциональные метаданные, которые можно указать в конфигурации:
SIZE— размер в байтах, кроме размера незавершенных частей составных загрузок, метаданных объекта и маркеров удаления;LAST_MODIFIED_DATE— дата создания или последнего изменения;ETAG— хэш;STORAGE_CLASS— класс хранилища;IS_MULTIPART_UPLOADED— маркер составной загрузки;ENCRYPTION_STATUS— статус шифрования;OBJECT_LOCK_RETAIN_UNTIL_DATE— дата окончания блокировки версии;OBJECT_LOCK_MODE— тип блокировки версии;OBJECT_LOCK_LEGAL_HOLD_STATUS— статус бессрочной блокировки версии;CHECKSUM_ALGORITHM— алгоритм, используемый для расчета контрольной суммы;OBJECT_ACCESS_CONTROL_LIST— ACL в кодировке base64;OBJECT_OWNER— идентификатор аккаунта владельца.
Актуальный перечень доступных параметров см. в Справочнике API.
Результаты выгрузки
S3 Inventory генерирует манифест выгрузки, файл с контрольной суммой манифеста и отчет.
Манифест
Манифест отчета представлен в двух файлах:
-
<префикс_выгрузки>/<имя_исходного_бакета>/<идентификатор_конфигурации>/<дата_выгрузки>/manifest.json— файл манифеста; -
<префикс_выгрузки>/<имя_исходного_бакета>/<идентификатор_конфигурации>/<дата_выгрузки>/manifest.checksum— контрольная сумма манифеста, вычисленная по алгоритму MD5 .Где:
<префикс_выгрузки>— префикс, по которому производилась выгрузка;<имя_исходного_бакета>— имя бакета, из которого выгружаются метаданные;<идентификатор_конфигурации>— идентификатор конфигурации выгрузки;<дата_выгрузки>— дата выгрузки в форматеYYYY-MM-DDThh:mmZ.
Манифест содержит следующую информацию об отчете:
- исходный бакет;
- целевой бакет;
- версия S3 Inventory;
- время начала сканирования бакета;
- формат файла;
- схема отчета — поля, которые попали в отчет;
- список файлов в отчете.
Пример манифеста:
{
"sourceBucket": "source-bucket",
"destinationBucket": "example-inventory-destination-bucket",
"version": "2016-11-30",
"creationTimestamp" : "1514944800000",
"fileFormat": "CSV",
"fileSchema": "Bucket, Key, VersionId, IsLatest, IsDeleteMarker, Size",
"files": [
{
"key": "prefix/source-bucket/config-name/data/3a6d560f-d5d5-434c-a896-15b13f52ac09.csv",
"size": 2147483647,
"MD5checksum": "f11166069f1990abeb9c97ace9cdfabc"
}
]
}
Отчет
Отчет представляет собой CSV-файл с метаданными всех объектов исходного бакета. Для выгрузки метаданных из крупных бакетов отчет может быть разбит на несколько файлов.
Примечание
Не гарантируется, что объекты в отчете будут отсортированы в каком-либо порядке.
Отчет генерируется по следующему пути: <префикс_выгрузки>/<имя_исходного_бакета>/<идентификатор_конфигурации>/data/<имя_отчета>.csv, где:
<префикс_выгрузки>— префикс, по которому производилась выгрузка;<имя_исходного_бакета>— имя бакета, из которого выгружаются метаданные;<идентификатор_конфигурации>— идентификатор конфигурации выгрузки;<имя_отчета>— UUID отчета, который можно найти в манифесте.
Пример отчета:
source-bucket-name,some-file-key-1,16777216,2024-11-26 08:22:15.12345+00,STANDARD,75662d2b5026e477f88a1b385fccfad7,f,SSE-S3,,,,MD5,,ajegtlf2q28a********
source-bucket-name,some-file-key-2,647168,2025-05-25 22:05:28.12345+00,COLD,7f9429f312poga209cd412aae2020ae,f,SSE-S3,,,,MD5,,ajegtlf2q28a********