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


15

バケットのS3バージョン管理を有効にしたとします:http : //docs.aws.amazon.com/AmazonS3/latest/dev/Versioning.html

次に、誰か(たとえば、下級従業員)がS3バケットを台無しにします(いくつかのファイルを誤って削除するなど)

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

この問題の良い解決策はありますか?RailsアプリのイメージストアとしてS3バケットを使用しているため、rakeタスクとして使用できる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

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

万が一に備えて、バックアップを別の場所に保管してください。スタックオーバーフローには、これに関する質問/回答がありs3cmdます。Rubyベースのスクリプトをどこかで見つけるか、必要に応じてそのサイトで助けを求めることができると確信しています。


正しい。バケット全体ではなく、バケット内の各オブジェクトをバージョン管理しています。
EEAA 14

1
ああ、私はそれをすべて理解しています。それがそれほど単純ではないことに気付いた理由です。おそらくバケット内のすべてのファイルを走査し、各ファイルのバージョン情報を取得し、「元に戻す」日時に基づいて正しいアイテム(存在する場合)を選択する必要があります。それほど単純ではありません。アマゾンがそのような一般的なユースケースのために何かを持っているだろうと思ったが、悲しいかな、そうではない...だから誰かがすでにこの退屈なスクリプトを書いているのだろうかと思っていた。を調べますがs3cmd、S3でバージョン管理されたスナップショットを作成することも好きです。
elsurudo

この回答には誤った情報が含まれています-単純なdeleteものは削除マーカーを挿入し、将来のリクエストは以前のバージョンではなく404を返します。復元するには、古いバージョンを新しいバージョンにコピーするかdelete、現在のオブジェクトの特定のバージョンを使用してコピーできます-将来getのバージョンには最新から最新のバージョンが与えられます。 docs.aws.amazon.com/AmazonS3/latest/dev/… 公平を期すために、バケットのバージョン管理に関するドキュメントは曖昧で欠けている傾向があります...-
鋭い

@keenこの質問はほぼ3年前に回答されたことに注意してください...ドキュメントを更新した可能性が非常に高いです。しかし、良いキャッチ。
ネイサンC

docuで参照されているリンクは回復に関するもので(超高レベルの回復ビュー)、変更されていません-公正なことに、削除について話し始めると少し混乱します。誰もこれを見て、「バージョン管理されたs3バケットからオブジェクトを削除するだけで古いバージョンが返され始めることを意味する」と考えたかっただけです-それは起こる可能性がありますが、現在のバージョン(... / key ?versionId = xyz)そのために...-
鋭い

2

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.