Облачная платформаEvolution

Версионирование в Object Storage


Версионирование — инструмент для хранения нескольких версий объекта. Управление версионированием происходит на уровне бакета: настройки применяются ко всем его объектам.

Внимание

К версиям объектов применяются стандартные правила тарификации.

Версионирование защищает данные от случайного удаления и перезаписи. Если версионирование в бакете включено:

Подсказка

Object Storage позволяет автоматизировать удаление ненужных версий с помощью политик жизненного цикла объекта.

Состояния версионирования бакета

Версионирование бакета может быть в одном из следующих состояний:

  • выключено;

  • включено;

  • приостановлено.

По умолчанию версионирование в бакете выключено. После включения версионирование нельзя выключить, но можно приостановить, если в бакете выключена блокировка (Object Lock).

Параметры версии

При сохранении объекта в бакет каждой версии объекта присваиваются служебные параметры versionId и isLatest. Управлять этими параметрами вручную нельзя.

Параметр isLatest позволяет маркировать текущую версию объекта и принимает значения:

  • true — для текущей версии объекта;

  • false — для всех остальных версий.

Параметр versionId служит уникальным идентификатором версии. Значение параметра зависит от состояния версионирования бакета:

  • Если версионирование выключено или приостановлено, новые объекты или новые версии существующих объектов сохраняются с параметром versionId, равным null.

  • Если версионирование включено, каждой версии присваивается уникальный versionId, не равный null.

Delete-маркеры

Delete-маркер позволяет пометить объект как удаленный и скрыть его, но не удалять данные физически. Delete-маркер хранится в Object Storage как особый тип объекта: он является служебной отметкой и не хранит данные версии объекта.

Object Storage автоматически создает delete-маркер, если соблюдены следующие условия:

  • версионирование в бакете включено или приостановлено;

  • в запросе на удаление объекта не указана версия объекта.

Аналогично обычной версии, delete-маркеру при создании присваиваются параметры:

  • key — соответствует ключу (названию) удаляемого объекта;

  • versionId — равен null, если версионирование приостановлено, и не равен null, если версионирование включено;

  • isLatest — равен true: маркер становится текущей версией объекта.

Если текущая версия объекта — delete-маркер, объект не отображается при выполнении операций ListObjectsV2, GetObject, HeadObject и пр.

При работе в личном кабинете объекты, помеченные как удаленные, отображаются на вкладке Версии и не отображаются на вкладке Объекты. Delete-маркер показан как версия с тегом Удаленный объект.

Объект, помеченный как удаленный, можно восстановить — сделать текущей одну из его версий, не являющуюся delete-маркером.

Если текущая версия объекта — delete-маркер, это не блокирует:

  • загрузку новых версий (PutObject) с таким же ключом (названием);

  • повторное удаление объекта (DeleteObject) — функциональность доступна при работе с хранилищем через AWS S3 API и сторонние клиенты.

Такие запросы будут завершаться без ошибки. Результат их выполнения зависит от состояния версионирования бакета.

Работа хранилища при разных состояниях версионирования

В таблице ниже описано поведение хранилища при разных состояниях версионирования.

Действие с хранилищем

Версионирование выключено

Версионирование включено

Версионирование приостановлено

Загрузка объекта с ключом, присвоенным существующему объекту

Существующий объект перезаписывается, восстановить его невозможно. Единственная копия объекта отображается как текущая. versionId объекта равен null.

Сохраняется новая версия объекта с уникальным versionId, не равным null. Новая версия становится текущей. Существующие версии объекта и delete-маркеры не изменяются и доступны в истории версий.

  • Объект сохраняется с versionId, равным null.

  • Если у объекта уже есть версия или delete-маркер с versionId, равным null, версия или delete-маркер перезаписывается. Восстановить перезаписанные данные нельзя.

  • Версии объекта и delete-маркеры с versionId, не равными null, не изменяются и доступны в истории версий.

Удаление объекта без указания версии

Объект удаляется безвозвратно.

Для объекта создается delete-маркер с уникальным versionId, не равным null. Delete-маркер становится текущей версией. Существующие версии объекта и delete-маркеры не изменяются и доступны в истории версий.

  • Для объекта создается delete-маркер с versionId, равным null.

  • Если у объекта уже есть версия или delete-маркер с versionId, равным null, версия или delete-маркер перезаписывается новым delete-маркером. Восстановить перезаписанные данные нельзя.

  • Версии объекта и delete-маркеры с versionId, не равными null, не изменяются и доступны в истории версий.

Удаление объекта с указанием версии

Единственная версия объекта удаляется безвозвратно.

Версия или delete-маркер удаляется безвозвратно. Другие версии объекта и delete-маркеры не изменяются и доступны в истории версий.

Версия или delete-маркер удаляется безвозвратно. Другие версии объекта и delete-маркеры не изменяются и доступны в истории версий.

Блокировка недоступна.

Если блокировка включена, версионирование нельзя приостановить. Статус версионирования не влияет на заблокированные объекты.