web-dev-qa-db-ja.com

バージョン管理されたS3バケットを特定の時点に復元する

バケットでS3バージョニングを有効にしているとしましょう: http://docs.aws.Amazon.com/AmazonS3/latest/dev/Versioning.html

次に、誰か(たとえば、後輩)がS3バケットをめちゃくちゃにした(ファイルを誤って削除してしまったなど)としましょう。

バージョン管理されたバケット全体を特定の時点に復元するにはどうすればよいですか?これはS3のAPIがあれば可能だと思いますが、何かを見落とすのを恐れて、自分でそのようなスクリプトを書く必要はありません(AWSのエキスパートではありません)。

この問題に対する適切な解決策はありますか? Railsアプリの画像ストアとしてS3バケットを使用しているので、rakeタスクとして使用できるRubyベースのものが理想的です。

17
elsurudo

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バケットバージョンから、または有効になっている場合は氷河から復元
17
Angelo

documentation を正しく理解している場合、バージョン管理を有効にしているときにファイルを削除すると、「最新」のバージョンが1つのバージョン番号に戻ります。ただし、これはバケット全体を復元する機能を提供しません。これにより、S3の以前のバージョンがニーズ(つまり、削除からの回復)に適さなくなります。

念のため、バックアップを別の場所に保管してください。 Stack Overflow には、これを使用した質問/回答があり、s3cmd。 Rubyベースのスクリプトをどこかで見つけたり、必要な場合はそのサイトで助けを求めたりできると思います。

2
Nathan C

これは、バージョニングを使用してバックアップバケットからバケットを復元するために使用した便利な小さな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;

これら2つのタイムスタンプの間にバージョン管理されたファイルからバックアップを復元する

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 =

1
user278847