Восстановление версии объекта в версионируемом бакете
Для восстановления версий объектов бакет должен быть версионируемым. Восстановить можно только те версии, которые были загружены при включенном версионировании. Чтобы включить версионирование, воспользуйтесь инструкцией.
Важно
На восстановление версии объекта через консоль управления отводится 25 секунд. Большие версии могут не успеть восстановиться за это время. Если восстановление закончилось ошибкой, используйте другие инструменты, например AWS CLI или API.
Чтобы восстановить версию объекта:
- В консоли управления
в списке сервисов выберите Object Storage и перейдите в нужный бакет. - На панели слева выберите
Объекты и найдите в списке нужный объект. - Выберите объект, версию которого вы хотите восстановить, нажмите
→ История версий. - В списке версий в строке с нужной версией нажмите
Восстановить. Выбранная версия будет восстановлена и отображена как текущая.
Чтобы восстановить версию объекта с помощью AWS CLI:
-
Получите идентификатор нужной версии объекта:
aws s3api list-object-versions \ --endpoint-url https://storage.yandexcloud.net \ --bucket <имя_бакета> \ --prefix <префикс_ключа_объекта>
В результате отобразится список версий всех объектов, ключи которых начинаются с указанного префикса. Идентификаторы версий содержатся в параметрах
VersionId
.Пример получения списка версий
Команда:
aws s3api list-object-versions \ --endpoint-url https://storage.yandexcloud.net \ --bucket my-bucket \ --prefix index.html
Результат:
{ "Versions": [ { "LastModified": "2015-11-10T00:20:11.000Z", "VersionId": "Rb_l2T8UHDkFEwCgJjhlgPOZ********", "ETag": "\"0622528de826c0df5db1258a********\"", "StorageClass": "STANDARD", "Key": "index.html", "Owner": { "DisplayName": "my-username", "ID": "7009a8971cd660687538875e7c86c5b672fe116bd438f46db45460dd********" }, "IsLatest": true, "Size": 38 }, { "LastModified": "2015-11-09T23:26:41.000Z", "VersionId": "rasWWGpgk9E4s0LyTJgusGeR********", "ETag": "\"06225825b8028de826c0df5d********\"", "StorageClass": "STANDARD", "Key": "index.html", "Owner": { "DisplayName": "my-username", "ID": "7009a8971cd660687538875e7c86c5b672fe116bd438f46db45460dd********" }, "IsLatest": false, "Size": 38 } ] }
Чтобы выбрать только один объект:
-
Установите и инициализируйте jq
. -
Отфильтруйте результат:
aws s3api list-object-versions \ --endpoint-url https://storage.yandexcloud.net \ --bucket <имя_бакета> \ --prefix <префикс_ключа_объекта> \ | jq '.Versions | map(select(.Key == "<ключ_объекта>"))'
Подробнее о команде читайте в ее описании в документации Amazon
. -
-
Скопируйте версию объекта в тот же бакет с тем же ключом, чтобы она стала текущей версией объекта:
aws s3api copy-object \ --endpoint-url https://storage.yandexcloud.net \ --bucket <имя_бакета> \ --copy-source <имя_бакета>/<ключ_объекта>?versionId=<идентификатор_версии> \ --key <ключ_объекта>
Где:
--bucket
– имя бакета.--copy-source
– исходный объект для копирования с указанием идентификатора нужной версии.--key
– ключ целевого объекта. Чтобы восстановить версию объекта, ключи целевого и исходного объектов должны совпадать.
Результат:
{ "CopyObjectResult": { "LastModified": "<дата_и_время_последнего_изменения_объекта>", "ETag": "\"589c8b79c230a6ecd5a7e1d040a9a030\"" }, "VersionId": "<идентификатор_восстановленной_версии_объекта>" }
Подробнее о команде читайте в ее описании в документации Amazon
.
Чтобы восстановить версию объекта:
- Получите идентификатор нужной версии объекта с помощью метода S3 API listObjectVersions.
- Скопируйте версию объекта в тот же бакет с тем же ключом с помощью метода S3 API copy.