Версионирование объектов в S3

от автора

Привет! image

Сегодня я хочу поделиться результатами своего исследования в области версионирования объектов в S3. Я про эту фичу слышал давно, но особо много не знал. Да и сейчас не особо много знаю — расскажу, как включить версионирование в бакете и получение объектов разных версий.

Моё исследование показало, что эта функция не особо востребована, а готовых бесплатных утилит для версионирования вообще не существует. Зато есть библиотеки, в которых есть этот функционал. Нужно — разрабатывайте, мол.

Итак, для версионирования, в бакете нам прежде всего нужно его включить. Есть 2 доступных способа это сделать, и оба они завязаны на API.

  • Чистый REST/SOAP запрос
  • Через библиотеку

Я воспользуюсь Ruby библиотекой aws-sdk, которую и установим:

$ gem install aws-sdk 


После этого зайдем в Ruby консоль:

$ irb 

Далее авторизуемся и включим версионирование для бакета:

require 'aws-sdk'  s3 = AWS::S3.new(     :access_key_id => ENV['AMAZON_ACCESS_KEY_ID'],      :secret_access_key => ENV['AMAZON_SECRET_ACCESS_KEY'] ) my_bucket=s3.buckets['epamcccctesting'] my_bucket.enable_versioning 

Я думаю, что вы в курсе, что означают переменные окружения AMAZON_ACCESS_KEY_ID и AMAZON_SECRET_ACCESS_KEY — не будем на них зацикливаться.

Итак, в консоли мы увидим, что версионирование включено:
image

Итак, как же происходит версионирование? Да просто. AWS при попытке заменить файл не заменяет его, а присваивает новую версию, которую отдаёт в хедерах POST реквеста. Ну или в параметрах в библиотеке.

Версии выгладят так:

x-amz-version-id: mHYT.SyFXgHoG6xCy5yQVk6n6riJct4u x-amz-version-id: .KSpevNIkZSgBoCz4vU3iTBttGWXWqIc 

После этого GET запросом можно обратиться к интересующей версии файла, вставив в гет-параметры versionId. Без указания этого параметра мы получим последнюю версию этого файла.

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

Всё довольно просто. Удаление файла так же с параметром versionId.

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

Может вы используете где-то версионирование? Расскажите что-то интересное?

ссылка на оригинал статьи http://habrahabr.ru/company/epam_systems/blog/163361/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *