- PVSM.RU - https://www.pvsm.ru -
Привет! 
Сегодня я хочу поделиться результатами своего исследования в области версионирования объектов в S3. Я про эту фичу слышал давно, но особо много не знал. Да и сейчас не особо много знаю — расскажу, как включить версионирование в бакете и получение объектов разных версий.
Моё исследование показало, что эта функция не особо востребована, а готовых бесплатных утилит для версионирования вообще не существует. Зато есть библиотеки, в которых есть этот функционал. Нужно — разрабатывайте, мол.
Итак, для версионирования, в бакете нам прежде всего нужно его включить. Есть 2 доступных способа это сделать, и оба они завязаны на API.
Я воспользуюсь 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 — не будем на них зацикливаться.
Итак, в консоли мы увидим, что версионирование включено:

Итак, как же происходит версионирование? Да просто. AWS при попытке заменить файл не заменяет его, а присваивает новую версию, которую отдаёт в хедерах POST реквеста. Ну или в параметрах в библиотеке.
Версии выгладят так:
x-amz-version-id: mHYT.SyFXgHoG6xCy5yQVk6n6riJct4u
x-amz-version-id: .KSpevNIkZSgBoCz4vU3iTBttGWXWqIc
После этого GET запросом можно обратиться к интересующей версии файла, вставив в гет-параметры versionId. Без указания этого параметра мы получим последнюю версию этого файла.
Пример: я загрузил в бакет 3 версии файла и получил разные версии в хедерах. По следующим ссылкам можно получить эти версии:
Всё довольно просто. Удаление файла так же с параметром versionId.
В общем, ясно, что функционал есть, но не ясно, почему до сих пор широко не используется и нет нормальной и удобной имплементации для CLI. Например хранение бекапов было бы удобно. Также можно найти десяток примеров, где версионирование файлов было бы очень удобным и простым решением.
Может вы используете где-то версионирование? Расскажите что-то интересное?
Автор: korjik
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/amazon-web-services/23133
Ссылки в тексте:
[1] 6Txnrqbcb4LaXo2MGYP9gn61Em0UIrUq: http://hurl.quickblox.com/hurls/cacbcc38f80428f52158cda58ac82403199c02be/5343347e7b0590b7f82f9c0bd446735db143daa8
[2] s73raBjbDF2pZpQT9o4qPu4Yn0piy1wL: http://hurl.quickblox.com/hurls/f99258c9c10b0ef06d1187f2fbae76a37ce66ffb/1e57adfcadf6122f8b9e9162cd47979eef8831f3
[3] NQc0gba0nv6znIfSHRaxR0fT3I.ZaUQ5: http://hurl.quickblox.com/hurls/7e5366df809238151d734b774910b9c3fcee10d8/09a394fecc223d827163c06f860033de38269778
[4] Источник: http://habrahabr.ru/post/163361/
Нажмите здесь для печати.