web-dev-qa-db-ja.com

AWS S3バケットのオフライン増分バックアップを作成する方法

AWSバケットの毎日のバックアップを増分バックアップとして取得する方法を探しています。これらはオフラインでAWSから離れて保存されます。

他のストレージシステム(NASドライブなど)の場合、バックアップには毎日 rsync を使用します。rsyncの--link-destスイッチ。リモートファイルシステムの完全なスナップショットを毎日とることができます。前回のバックアップ以降に変更されていないファイルは、前回のバックアップにハードリンクされています。つまり、毎日の完全なスナップショットは、増分バックアップのストレージ容量のみを使用します。

Amazon S3バケットにも同様の設定をしたいのですが。バケットには20 GBありますが、1日あたりの変更は約50 MBです。

これはS3バケットのコンテンツのバックアップであり、他のコンテンツをS3バケットにバックアップしないことに注意してください。

AWS CLIツールを使用して完全バックアップを実行する方法を確認できます。増分バックアップを実行する方法がわかりません。

S3をローカルハードドライブに(毎日)同期し、ローカルハードドライブを毎日バックアップできると思います。これはとても不格好な感じです。

編集

これは、バックアップのセキュリティに関する一般的な議論ではなく、簡単な技術的な質問を意図したものです。しかし、「なぜこれが必要なのか」という質問を受けているため、バックアップの基本原則を説明する必要があることがわかりました。

追記:私は最近、コミュニケーションの誤りのため、サードパーティのITプロバイダーが(完全に)S3バケットをドロップするのを目撃しました。これは非常にコストがかかる可能性がありました(最近の作業が10万ポンド、総作業が100万ポンドまで)。幸いにも、私たちはたまたまローカルラップトップにもコピーを作成し、わずか1,000ポンドでコンテンツを再構築しました。

唯一の有効な「バックアップ」は分離されたシステムに保存されている =)offsiteおよびoffline、および効果的に時間ロック。他のバックアップは強化され、より迅速なリカバリなどを提供できますが、すべてのAWSバックアップを自分のAWSアカウントで保持することは...ユーザーエラーのため安全ではありません。

3
Philip Couling

aws s3 sync以外にも方法がありますが、同じように扱いにくいかもしれません。ご覧のとおり、PUTで​​トリガーされるS3バケットにLambdaフックを追加することになります。理論的には、これによりS3バケットのAdd-onlyレプリカを作成できるため、DELETEは複製されません。これにはチュートリアルがありますが、本質的には:

  1. オブジェクトはバケット内で操作されます。
  2. 操作のイベントデータを指定すると、ラムダがトリガーされます。
  3. 操作がPUTの場合、作成したコードはそのオブジェクトを使用して処理を行います。 DELETEは無視されます。

増分バックアップロジックはユーザーが作成します。

4
sysadmin1138

注:これは、元の質問beforeへの回答ですofflineバックアップ。元の質問の回答としてここに残します:AWS S3バケットの増分バックアップを作成する方法

最初の質問はS3バケットをバックアップする理由は何ですか?保護しようとしている問題は何ですか?

  • S3耐久性は約99.99999%であることを覚えておいてください-あなたは極めて可能性が低いオブジェクトを失うハードウェア障害のため、除外できます。

  • S3で誤って上書きされたオブジェクトを確実に回復できるようにする場合は、S3 versioningを使用できます。これにより、ファイルのすべての古いバージョンの履歴とその方法で回復できます。削除についても同じです。

  • 削除と言えば-MFA for S3 Deletionsを別の保護層として使用するように要求できます。コンプライアンスおよび監査上の理由から。 (thx Tim:)

  • プライマリリージョンがオフラインになるというまれなイベントのために、他のリージョンで2番目のDR(災害復旧)バケットが必要な場合は、S3クロスリージョンレプリケーション変更があるたびに、バケットのコンテンツをリージョン間で自動的にミラーリングします。

  • 上記のいずれもまだニーズを満たさない場合は、S3バケットの各変更を処理するLambda関数が必要になる場合があります。そうすることで、S3でオブジェクトを書き込んだり更新したりするたびに、Lambdaが希望の宛先にバックアップを作成します。これは使用できます。異なるAWSアカウント間、他のクラウドプロバイダー、またはオフラインの宛先にS3バケットをミラーリングする(たとえば、オンプレミスサーバーに)。 Lambdaを使用すると、変更をどう処理するかについて究極の柔軟性が得られます。 Amazon S3でのLambdaの使用 を参照してください

  • それでも十分でない場合は、常にaws s3 syncを使用して、ソースと宛先のバケットを比較し、コピーしますonly what変更されました。

  • (更新)オフラインバックアップ

    • もちろん、aws s3 syncも使用できます。これは、バケット間だけでなく、ディスクとの間で同期できます。
    • または、オブジェクトが作成/更新されたときにS3イベントをキャッチし、それが発生したらすぐにオフラインストレージにコピーすることに基づいて、より複雑なソリューションを開発できます。これは、サーバーに座ってS3イベントまたはSNSメッセージをリッスンし、更新されたオブジェクトについてS3に到達するのかなり単純なプログラムである必要があります。

たくさんの選択肢があります。それのいくつかがあなたのニーズに合うことを願っています:)

5
MLu