- PVSM.RU - https://www.pvsm.ru -

Версионирование объектов в S3-хранилищах — это мощный механизм, который позволяет отслеживать изменения файлов, предотвращать их случайное удаление и восстанавливать предыдущие версии. Это особенно полезно при работе с резервными копиями или чувствительными данными — есть возможность в любой момент вернуться к определенному состоянию объекта или восстановить его даже после удаления.
Всем привет! Меня зовут Гришин Александр, я продакт-менеджер и отвечаю за развитие объектного хранилища [1] и облачных баз данных [2]. В этой статье расскажу, как включить версионирование в объектном хранилище Selectel и работать с ним через Python с использованием библиотеки boto3 и панель управления. Материал пригодится как инженерам облачной инфраструктуры, так и разработчикам приложений.
Используйте навигацию, если не хотите читать текст целиком:
→ Часть работы в панели управления Selectel [3]
→ Включаем версионирование в бакете [4]
→ Загрузка объекта и создание версий [5]
→ Восстановление предыдущей версии [6]
→ Заключение [7]
В целом, здесь нам нужно просто создать и настроить контейнер объектного хранилища. Очень подробный пошаговый гайд вы найдете в статье [8] моего коллеги. Я же перечислю только основные шаги.

Работа с сервисными пользователями в панели управления.

Перед тем, как работать с версиями файлов, необходимо включить версионирование в контейнере. Это переопределяет поведение хранилища.
Версионирование можно включить при создании контейнера. Для этого поставьте галочку Версионирование в разделе Защита данных.

Включение версионирования при создании нового контейнера.
Эту функциональность можно включать и выключать также и для существующего контейнера. Стоит учесть, что выключение версионирования не удаляет существующие версии в контейнере версии объектов, а лишь меняет поведение хранилища при записи. Новые версии перестанут записываться отдельным объектом, а будут перезаписывать существующий.

Включение версионирования для уже существующих контейнеров.
Если же вам удобнее работать с кодом, то берем библиотеку boto3 и включаем версионирование с помощью нескольких строк:
import boto3
s3 = boto3.client(
's3',
endpoint_url='https://s3.storage.selcloud.ru',
aws_access_key_id='ВАШ_ACCESS_KEY',
aws_secret_access_key='ВАШ_SECRET_KEY'
)
bucket_name = 'my-versioned-bucket'
# Включаем версионирование
s3.put_bucket_versioning(
Bucket=bucket_name,
VersioningConfiguration={'Status': 'Enabled'}
)
print(f'Версионирование включено для бакета {bucket_name}')
Попробуем загрузить объект example.txt несколько раз. Любые загрузки файлов с одинаковыми именами создают новые версии, а старые остаются доступными.
file_name = 'example.txt'
# Записываем первую версию файла
with open(file_name, 'w') as f:
f.write('Первая версия файла')
s3.upload_file(file_name, bucket_name, file_name)
# Загружаем обновленную версию файла
with open(file_name, 'w') as f:
f.write('Вторая версия файла')
s3.upload_file(file_name, bucket_name, file_name)
Теперь S3-хранилище хранит все версии этого объекта, их можно удалять или делать основными.

Версионирование объектов в панели управления Selectel.
Запросим все версии конкретного файла из кода:
versions = s3.list_object_versions(Bucket=bucket_name, Prefix=fi
for version in versions.get('Versions', []):
print(f"Версия: {version['VersionId']} | Последний модифицированный: {version['LastModified']}")
В любой момент времени можно восстановить старую версию объекта как из API, так и через панель управления. Для этого перейдите на листинг объектов, выберете нужную версию и восстановите объект.

Восстановление объекта из версий замещает основной объект.
Версионирование объектов в S3-хранилище — это удобный инструмент для работы с изменяющимися файлами, защиты данных от случайного удаления и ведения истории изменений. Используя интерфейс панели управления, готовый клиент или S3, можно легко управлять версиями, восстанавливать файлы и автоматизировать обработку данных.
В этой статья я использовал код только для демонстрации версионирования в объектном хранилище Selectel [1]. Для большего удобства рекомендую использовать готовые приложения, поддерживающие такую функциональность из коробки. К ним относятся:
Пользуясь случаем, выделю именно Rclone т. к. недавно мы стали официальными технологическими партнерами [15] и получили нативную поддержку нашей услуги в этом клиенте.
Если у вас есть вопросы или идеи по автоматизации работы с объектным хранилищем Selectel — пишите в комментариях!
Автор: GrishinAlex
Источник [16]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/419329
Ссылки в тексте:
[1] объектного хранилища: https://selectel.ru/services/cloud/storage/?utm_source=habr.com&utm_medium=referral&utm_campaign=storage_article_Version_060525_content
[2] облачных баз данных: https://selectel.ru/services/cloud/managed-databases/?utm_source=habr.com&utm_medium=referral&utm_campaign=dbaas_article_Version_060525_content
[3] Часть работы в панели управления Selectel: #1
[4] Включаем версионирование в бакете: #2
[5] Загрузка объекта и создание версий: #3
[6] Восстановление предыдущей версии: #4
[7] Заключение: #5
[8] в статье: https://habr.com/ru/companies/selectel/articles/875956/#2
[9] в панель управления: https://my.selectel.ru/?utm_source=habr.com&utm_medium=referral&utm_campaign=myselectel_article_Version_060525_content
[10] aws cli: https://docs.selectel.ru/cloud/object-storage/tools/aws-cli/
[11] Rclone: https://docs.selectel.ru/cloud/object-storage/tools/rclone/
[12] s3cmd: https://docs.selectel.ru/cloud/object-storage/tools/s3cmd/
[13] cyberduck: https://docs.selectel.ru/cloud/object-storage/tools/cyberduck/
[14] s3fs: https://docs.selectel.ru/cloud/object-storage/tools/s3fs/
[15] мы стали официальными технологическими партнерами: https://rclone.org/s3/#selectel
[16] Источник: https://habr.com/ru/companies/selectel/articles/906898/?utm_source=habrahabr&utm_medium=rss&utm_campaign=906898
Нажмите здесь для печати.