将版本化的S3存储桶还原到特定的时间点


16

假设我已经为我的存储桶启用了S3版本控制:http : //docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html

然后,假设某人(例如,下级员工)弄乱了S3存储桶(意外删除了一些文件,等等)。

然后,如何将整个版本化存储桶还原到特定的时间点?我相信使用S3的API应该可以做到这一点,但是我宁愿不必自己编写这样的脚本,因为会丢失某些内容(我不是AWS专家)。

有解决这个问题的好方法吗?我将S3存储桶用作我的Rails应用程序的图像存储,因此可以用作rake任务的基于Ruby的东西是理想的。

Answers:


17

您可以使用 s3-pit-restore

S3时间点还原是一种工具,可以准确地将存储桶或存储桶的子集还原到给定的时间点,如下所示:

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

s3-pit-restore实际上提供了什么:

  • 还原所有时间戳小于给定文件的文件
  • 恢复整个存储桶或存储桶前缀
  • 并行下载多个文件,整体速度极快
  • 定制并行工作人员计数以优化带宽使用
  • 从s3存储桶版本或从冰川还原(如果启用)

这似乎对我不起作用。尽管对该工具进行了说明,但Destination仅创建一个本地目录。
亚瑟

你救了我的日子。感谢您让我们知道这个了不起的工具。
cyberrspiritt

2

如果我正确理解了文档,则启用了版本控制后,删除文件只会将“最新”版本恢复为一个版本号。但是,这不能恢复整个存储桶。这使得S3中的早期版本不适合您的需求(即从删除中恢复)。

还要在其他地方保留备份,以防万一。Stack Overflow使用对此有一个问题/答案s3cmd。我相信您可以在某个地方找到基于Ruby的脚本,或者在该站点上寻求帮助。


正确。您要对存储桶中的每个对象进行版本控制,而不是整个存储桶。
EEAA 2014年

1
哦,我都明白。这就是为什么我意识到这不是那么简单。我可能不得不遍历存储桶中的所有文件,获取每个文件的版本信息,然后根据我要“还原”的日期时间选择正确的项目(如果存在)。没那么简单。我确实认为亚马逊会为这种通用用例提供一些帮助,但是,可惜,没有...所以我想知道是否有人已经编写了这个乏味的脚本。我将研究s3cmd,但我也喜欢在S3上创建快照版本。
elsurudo

此答案包含错误的信息-简单地delete插入删除标记,以后的请求将返回404,而不是先前的版本。要还原,您可以将旧版本复制到新版本,也可以delete使用当前对象的特定版本-然后get,将最新版本提供给future 。 docs.aws.amazon.com/AmazonS3/latest/dev/… 公平地说,关于存储桶版本控制的文档往往含糊不清并且缺乏...
敏锐的

@keen请注意,此问题已在大约三年前回答了……他们很可能会更新文档。不错,但是。
内森·C

docu引用的链接是关于恢复(超高级恢复视图)的,并且没有更改-公平地讲,当它开始谈论删除时,它有点令人困惑。只是想确保没有人看到这一点,并以为“只是从版本为s3的存储桶中删除一个对象,这意味着将开始返回旧版本”-可以发生,但是您必须专门删除当前版本(... /键?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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.