Перейти к содержимому

Удаление и восстановление объектов

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

  • Веб-консоль
  • AWS CLI
  • Python
  • Go
  1. В веб-консоли выберите нужный проект.
  2. В списке сервисов выберите Object Storage.
  3. Нажмите на имя нужного бакета.
  4. Включите опцию Показать версии.
  5. Нажмите на значок для удаляемой версии и выберите Удалить.

Удаление из бакета всех объектов и их версий (например, удаление бакета с версионированием) можно автоматизировать с помощью приведенных ниже примеров кода.

  • Python
  • Go

Приведенный код на Python:

  1. Импортирует boto3 — официальный AWS SDK для Python.
  2. Cоздает ресурс и сессию для доступа к Object Storage.
  3. Определяет имя бакета.
  4. Проверяет, включено ли в бакете версионирование.
  5. Если версионирование включено, удаляет из бакета все объекты и их версии.
  6. Если версионирование не включено, выводит соответствующее сообщение. Никакие объекты из бакета при этом не удаляются.
python
import boto3
# Создаем ресурс S3
session = boto3.session.Session(profile_name='default')
s3 = session.resource('s3', endpoint_url='https://storage.mwsapis.ru')
# Указываем имя бакета
bucket_name = 'bucket'
bucket = s3.Bucket(bucket_name)
# Проверяем, включено ли версионирование
bucket_versioning = s3.BucketVersioning(bucket_name)
if bucket_versioning.status == 'Enabled':
# Удаляем все версии объектов
for version in bucket.object_versions.all():
version.delete()
print("All objects and versions have been successfully deleted")
else:
print("Versioning is not enabled in the bucket")

Если вы по ошибке удалили объект из бакета с включенным версионированием, вы всегда можете восстановить его.
Для этого нужно:

  1. Получить список всех версий для этого объекта.
  2. Найти среди этих версий маркер удаления.
  3. Удалить маркер удаления.

После этого будет восстановлена последняя версия, загруженная до удаления.

  • Python
  • Go

Приведенный код на Python:

  1. Импортирует boto3 — официальный AWS SDK для Python.
  2. Создает сессию и клиент для подключения к Object Storage.
  3. Определяет имя бакета и имя объекта, который нужно восстановить.
  4. Получает список всех версий указанного объекта.
  5. Проходит по списку циклом и находит последний маркер удаления (у которого параметр IsLatest имеет значение true).
  6. Удаляет маркер удаления и восстанавливает удаленную ранее текущую версию объекта.
python
import boto3
# Создаем сессию и клиент
session = boto3.session.Session(profile_name='default')
s3 = session.client('s3')
# Параметры
bucket_name = 'bucket'
object_key = 'object.txt'
# Получаем список всех версий объекта
response = s3.list_object_versions(
Bucket=bucket_name,
Prefix=object_key
)
# Ищем последний маркер удаления (IsLatest: True)
delete_marker_version_id = None
for delete_marker in response.get('DeleteMarkers', []):
if delete_marker['Key'] == object_key and delete_marker['IsLatest']:
delete_marker_version_id = delete_marker['VersionId']
print(f"Found latest delete marker with version ID: {delete_marker_version_id}")
break
# Удаляем маркер удаления, если он найден
if delete_marker_version_id:
s3.delete_object(
Bucket=bucket_name,
Key=object_key,
VersionId=delete_marker_version_id
)
print(f"Successfully removed the latest delete marker for {object_key} in {bucket_name}")
else:
print(f"No delete marker found for {object_key} in {bucket_name}")