假设我已经为我的桶启用了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版本不适合您的需求(即从删除中恢复)。
为了以防万一,还要在其他地方备份。 堆栈溢出有一个使用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