Восстановить удаленный объект
Если необходимо восстановить удаленный объект в S3-совместимом хранилище с включенной версионностью, можно выполнить удаление соответствующего Delete Marker. Это позволит сделать последнюю сохраненную версию объекта снова доступной как текущую(IsLatest).
- AWS CLI
- Python API
Если AWS CLI еще не установлен, установите и настройте его. Для работы с объектным хранилищем используйте команды s3api и s3.
AWS CLI. Восстановить удаленный объект
В терминале выполните команду:
aws s3api delete-object \
--bucket <bucket_name> \
--key <object_name> \
--version-id <versionid>
Укажите:
<bucket_name> — имя бакета;
<object_name> — имя объекта;
<versionid> — идентификатор-версии-delete-marker.
Если необходимо восстановить определенную версию объекта и сделать ее актуальной (
IsLatest), можно воспользоваться операцией копирования объекта (copy-object) с указанием нужной версии источника. При этом будет создана новая версия объекта, содержащая те же данные, что и выбранная версия.
В терминале выполните команду:
aws s3api copy-object \
--bucket <bucket-name> \
--key <object-key> \
--copy-source <bucket-name>/<object-key>?versionId=<versionid>
Укажите:
<bucket_name> — имя бакета;
<object_name> — имя объекта;
<versionid> — уникальный идентификатор версии, которую вы хотите восстановить.
После выполнения этой команды:
- будет создана новая версия объекта с содержимым, идентичным указанной версии.
- новая версия станет текущей (
IsLatest: true); - Delete Marker останется в истории версий, но перестанет быть актуальной (IsLatest: false), так как она будет "перекрыта" новой версией.
| Ситуация | Решение |
|---|---|
| Объект случайно удалили, и нужно просто восстановить как было | Удалить Delete Marker |
| Объект был изменен, потом удален, и нужно восстановить определенную старую версию | copy-object нужной версии + удалить Delete Marker |
Подробнее о бакетах и объектах см. в статьях О бакетах и Об объектах.
Boto3 — это библиотека Python, предоставляющая программный интерфейс (SDK) для взаимодействия с объектным хранилищем S3. Подробности см. в документации AWS Boto3.
Python API. Восстановить удаленный объект
В терминале выполните команду:
import boto3
from botocore.exceptions import ClientError
session = boto3.session.Session(profile_name='default') #Создает сессию с использованием профиля default. Профиль находится в файле ~/.aws/credentials.
s3 = session.client('s3', endpoint_url='$endpoint')
def delete_object_version(bucket_name, object_key, version_id):
try:
s3.delete_object(Bucket=bucket_name, Key=object_key, VersionId=version_id)
print(f"Версия объекта '{object_key}' с version-id '{version_id}' удалена из бакета '{bucket_name}'.")
except ClientError as e:
print(f"Ошибка при удалении версии объекта: {e}")
delete_object_version(
bucket_name='<bucket_name>',
object_key='<object_name>',
version_id='<versionid>'
)
Укажите:
<bucket_name> — имя бакета;
<object_name> — имя объекта;
<versionid>— идентификатор-версии-delete-marker.
Если необходимо восстановить определенную версию объекта и сделать ее актуальной (IsLatest), можно воспользоваться операцией копирования объекта (copy-object) с указанием нужной версии источника. При этом будет создана новая версия объекта, содержащая те же данные, что и выбранная версия.
import boto3
from botocore.exceptions import ClientError
session = boto3.session.Session(profile_name='default') #Создает сессию с использованием профиля default. Профиль находится в файле ~/.aws/credentials.
s3 = session.client('s3', endpoint_url='$endpoint')
def restore_object_version(bucket_name, object_key, version_id):
try:
copy_source = {
'Bucket': bucket_name,
'Key': object_key,
'VersionId': version_id
}
s3.copy_object(
Bucket=bucket_name,
Key=object_key,
CopySource=copy_source
)
print(f"Версия '{version_id}' объекта '{object_key}' восстановлена в бакете '{bucket_name}'.")
except ClientError as e:
print(f"Ошибка при восстановлении версии объекта: {e}")
restore_object_version(
bucket_name='<bucket_name>',
object_key='<object_name>',
version_id='<versionid>'
)
Укажите:
<bucket_name> — имя бакета;
<object_name> — имя объекта;
<versionid> — уникальный идентификатор версии, которую вы хотите восстановить.
После выполнения этой команды:
- будет создана новая версия объекта с содержимым, идентичным указанной версии;
- новая версия станет текущей (
IsLatest: true); - Delete Marker останется в истории версий, но перестанет быть актуальной (IsLatest: false), так как она будет "перекрыта" новой версией.
| Ситуация | Решение |
|---|---|
| Объект случайно удалили, и нужно просто восстановить как было | Удалить Delete Marker |
| Объект был изменен, потом удален, и нужно восстановить определенную старую версию | copy-object нужной версии + удалить Delete Marker |
Подробнее о бакетах и объектах см. в статьях О бакетах и Об объектах.