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


16

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

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

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

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

Ответы:


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 или из ледника, если включено

Это не похоже на работу для меня. Пункт назначения создает только локальный каталог, несмотря на описание инструмента.
— Артур

Вы спасли мой день. Спасибо, что сообщили нам удивительный инструмент.
— 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.