Если версионирование включено, бакет хранит все версии объекта. Если файл по ошибке перезаписали или удалили, можно восстановить предыдущую версию.
В примерах используется AWS CLI, настроенный для UzCloud. Замените my-bucket на имя своего бакета.
Включение версионирования
В консоли: включите Bucket Versioning при создании бакета. См. Управление объектным хранилищем.
Через AWS CLI:
aws s3api put-bucket-versioning --bucket my-bucket \
--versioning-configuration Status=Enabled
# check the status
aws s3api get-bucket-versioning --bucket my-bucket
Версионирование нельзя выключить полностью, только приостановить (Status=Suspended). Уже созданные версии сохраняются.
Просмотр версий
aws s3api list-object-versions --bucket my-bucket --prefix docs/report.pdf
У каждой версии есть VersionId. У текущей версии "IsLatest": true.
Восстановление версии
Скачайте нужную версию:
aws s3api get-object --bucket my-bucket --key docs/report.pdf \
--version-id <VersionId> report-old.pdf
Или снова сделайте ее текущей, скопировав поверх объекта:
aws s3api copy-object --bucket my-bucket --key docs/report.pdf \
--copy-source "my-bucket/docs/report.pdf?versionId=<VersionId>"
Восстановление удаленного объекта
В бакете с версионированием удаление объекта только добавляет маркер удаления (delete marker). Чтобы восстановить объект, удалите маркер:
aws s3api list-object-versions --bucket my-bucket --prefix docs/report.pdf \
--query 'DeleteMarkers[?IsLatest].VersionId'
aws s3api delete-object --bucket my-bucket --key docs/report.pdf \
--version-id <delete-marker-VersionId>
Примечание
Все версии занимают место и оплачиваются. Чтобы ограничить число хранимых версий, настройте правило жизненного цикла, которое удаляет старые версии.