将版本化的S3存储桶恢复到特定时间点

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

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

然后,我怎样才能将整个版本化的存储桶恢复到特定的时间点? 我相信这应该是可能的,因为S3的API,但我宁愿不必自己写这样的脚本,因为害怕失去一些东西(我不是一个AWS专家)。

这个问题有没有很好的解决办法? 我使用S3存储桶作为我的Rails应用程序的映像存储,所以基于Ruby的我可以用作rake任务。

    你可以使用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存储桶版本或从冰川恢复

    如果我正确理解文档 ,当您启用版本控制时,删除文件只需将“最新”版本还原回一个版本号。 但是,这并不能够恢复整个存储桶。 这使得以前的S3版本不适合您的需求(即从删除中恢复)。

    为了以防万一,还要在其他地方备份。 堆栈溢出有一个使用s3cmd这个问题/答案。 我相信你可以在某个地方find一个基于Ruby的脚本,或者如果你需要,可以在这个站点上寻求帮助。

    这里是一个方便的小脚本我用来恢复我的水桶从备份桶与版本:

    要打开版本控制,运行回到桶中

     #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