Восстановить версионную корзину S3 в определенный момент времени

16

Допустим, у меня включена поддержка версий S3 для моего сегмента: http://docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html

Затем, скажем, кто-то (например, младший сотрудник) портит корзину S3 (удаляет некоторые файлы случайно и т. Д.)

Как я могу восстановить весь версионный контейнер в определенный момент времени? Я полагаю, что это возможно, учитывая API S3, но я бы предпочел не писать такой скрипт сам, опасаясь пропустить что-то (я не эксперт AWS).

Есть ли хорошее решение этой проблемы? Я использую корзину S3 в качестве хранилища изображений для моего приложения на Rails, поэтому что-то на основе Ruby, которое я мог бы использовать в качестве грабли, было бы идеальным.

elsurudo
источник

Ответы:

17

Ты можешь использовать s3-pit-restore

S3 Point in Time Restore - это инструмент, который вы можете использовать точно для восстановления сегмента или подмножества фрагмента в определенный момент времени, например так:

s3-pit-restore --bucket my-bucket --dest my-restored-bucket --timestamp "06-17-2016 23:59:50 +2"

Что на самом деле предлагает s3-pit-restore:

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

Если я правильно понимаю документацию , когда у вас включено управление версиями, удаление файла просто возвращает «последнюю» версию на один номер версии. Это, однако, не дает возможности восстановить целое ведро. Это делает предыдущие версии в S3 не подходящими для ваших нужд (например, восстановление после удаления).

Сохраните резервную копию в другом месте, а также на всякий случай. У Stack Overflow есть вопрос / ответ по этому вопросу s3cmd. Я уверен, что вы могли бы найти скрипт на основе Ruby где-нибудь или попросить помощь на этом сайте, если вам это нужно.

Натан С
источник
Верный. Вы управляете каждым отдельным объектом в корзине, а не корзиной в целом.
EEAA
1
О, я все это понимаю. Вот почему я понимаю, что это не так просто. Вероятно, мне придется пройтись по всем файлам в корзине, получить информацию о версии для каждого файла, а затем выбрать правильный элемент (если он существует), основываясь на дате, в которую я хочу «вернуться». Не все так просто. Я подумал, что у Amazon есть что-то для такого общего случая использования, но, увы, нет ... Поэтому мне было интересно, написал ли кто-нибудь этот утомительный сценарий уже. Я посмотрю s3cmd, но мне нравится иметь версионные снимки на S3.
elsurudo
этот ответ содержит неверную информацию - простая deleteвставка маркера удаления и последующие запросы возвращают 404, а не предыдущую версию. Чтобы ВОССТАНОВИТЬ, вы можете скопировать старую версию в новую или вы можете сделать это deleteс определенной версией текущего объекта - тогда будущим getбудет предоставлена ​​вторая до последней версии. docs.aws.amazon.com/AmazonS3/latest/dev/... быть справедливым, доку вокруг ведра версионности имеет тенденцию быть расплывчатым и не хватает ...
острому
@keen Обратите внимание, что на этот вопрос был дан ответ почти три года назад ... вполне возможно, что они обновили документацию. Хороший улов, хотя.
Натан С
ссылка на документ содержит ссылку на восстановление (представление восстановления на высшем уровне) и не изменилась - и, честно говоря, более чем немного запутанно, когда начинает говорить об удалениях. просто хотел убедиться, что никто не видел этого и подумал: «просто удаление объекта из версионного хранилища s3 означает, что старая версия начнет возвращаться» - это МОЖЕТ произойти, но вы должны специально удалить текущую версию (... / key ? versionId = xyz), чтобы это произошло ...
заинтересовано
1

Вот небольшой удобный php-скрипт, который я использовал для восстановления своей корзины из резервной копии с версионированием:

Чтобы вернуться в ведро с включенным контролем версий

#CONFIGURATION
export bucket_to_backup='example-of-a-bucket-name';
export backup_bucket='example-of-a-backup-bucket-name'; 
export AWS_ACCESS_KEY_ID=ASDFDSAFADSFDASF;
export AWS_SECRET_ACCESS_KEY=adsfdsaf86adsf5adsf568aadf75ads;
#you will need to download and install the s3cmd tool at the following url:
#http://s3tools.org/
s3cmd --access_key=$AWS_ACCESS_KEY_ID --secret_key=$AWS_SECRET_ACCESS_KEY --recursive sync s3://$bucket_to_backup s3://$backup_bucket;

восстановить резервную копию из файлов, которые были версии между этими двумя временными метками

export startSnapShotTimeStamp=1427577934;
export endSnapShotTimeStamp=1427577939;
#do the restore with php script
php awsUtil.php sync example-of-a-backup-bucket-name example-of-a-bucket-name $startSnapShotTimeStamp-$endSnapShotTimeStamp

Вы можете скачать скрипт PHP здесь: http://boulderapps.co/post/backing-up-and-restoring-s3-to-a-versioned-bucket

user278847
источник