PLAY DEVELOPERS BLOG

HuluやTVerなどの日本最大級の動画配信を支える株式会社PLAYが運営するテックブログです。

HuluやTVerなどの日本最大級の動画配信を支える株式会社PLAYが運営するテックブログです。

Amazon S3 レプリケーションを使用してバケット間で大量のオブジェクトをコピーする

こんにちは、OTTサービス事業部の冷牟田です。

私が以前対応した案件の中で、S3のレプリケーション機能を触る機会がありました。 調べると結構便利な機能だったため、そもそものS3の説明からレプリケーション利用時の手順までを簡単にご紹介させていただきます。

Amazon S3

S3とは

S3 (Simple Storage Service)は、 AWS (Amazon Web Services)で利用できる、容量無制限のオブジェクトストレージサービスです。
※ アップロード可能なファイルサイズは5TBまでという制限はございます。

S3はバージョニングという機能をもっており、バケット(オブジェクトを格納するコンテナ)内の一つのオブジェクト(ファイル)に対して、複数のバージョンを保持できます。 これにより、少し前のバージョンの状態に戻したり、削除されたオブジェクトを復元したりすることが容易に可能です。
※ 但し、バージョニングで保持される過去バージョンのファイル自体にもS3ストレージ料金がかかります。 また、S3のバケット作成時にバージョニングはデフォルトで無効となっています。利用したい場合はバケットの設定画面から有効化する必要があります。

バックアップが必要なとき

S3バケット内の特定のオブジェクトに対してアクション(更新や削除等)をするとき、安全面を考慮して、バックアップをとっておきたいことがあると思います。 この時、AWSのCLIコマンドやSDKを用いてオブジェクトをコピーする方法があります。 docs.aws.amazon.com docs.aws.amazon.com

しかし、オブジェクト数が多いと実行時間がかなり掛かってしまったり、作業実施の同タイミングや実施後にオブジェクトが新規追加され続ける場合、すべてに対応出来ないため定期的に作業を実施しなければならなかったりします。 このとき、Amazon S3 Replicationという機能を利用すると、対応が容易に可能となります。

Amazon S3 Replication

S3のレプリケーションとは

そもそもレプリケーションとは、レプリカ(複製)を作成することです。 S3でレプリケーション機能を使うと、バケットに新しくオブジェクトをアップロードしたとき、自動的に別のバケットにレプリカを作成することができます。

具体的には、以下の特徴があります。

  • セイムリージョンレプリケーション(同じリージョンにレプリケートする)や、クロスリージョンレプリケーション(異なるリージョンにレプリケートする)、クロスアカウントデータレプリケーション(異なるアカウント間でレプリケートする)等の方法がある。
  • レプリケート対象として、「バケット内のすべてのオブジェクト」、「特定のプレフィックスやタグでフィルタリングしたオブジェクトのみ」の指定が可能。
  • オブジェクトを削除したときに作られる「削除マーカー」もレプリケーション可能。
  • タグやACL(アクセス許可設定)、オブジェクトロック設定(削除や上書きの防止設定)等のメタデータの変更もレプリケーション可能。

他にも追加料金がかかりますが、15分以内にレプリケートするオプションや、CloudWatchメトリクスを利用して進捗度をモニタリングすることも可能です。

利用手順

事前準備

  • レプリケート元バケットのバージョニングを有効にしておく。
  • レプリケート先バケットを作成して、バージョニングを有効にしておく。

レプリケーションルールを設定する

① レプリケート元バケットページの「管理」タブ内のレプリケーションルールから、「レプリケーションルールを作成」をクリックする。

② 「ソースバケット」項目で、レプリケート対象の条件を指定する。

③ 「送信先」項目で、レプリケート先のバケットを指定する。

④ メタデータや削除マーカーなどもレプリケートしたい場合は、「追加のレプリケーションオプション」項目で設定する。

⑤ 「保存」をクリックする。

注意事項

ここで、レプリケーション利用時の気をつけておくべきこととして下記が挙げられます。

  • バケットのバージョニングが必ず有効である必要がある。
  • レプリケーションルール設定後に変更(アップロードや削除等)が起きたオブジェクトしかレプリケートされない。

上記より、既に作成されているオブジェクトに対してはレプリケーション機能が働きません。 数年前までは、既存オブジェクトをレプリケートした場合はAWSサポートの方に問い合わせる必要がありました。 しかし、2022年2月8日にAmazon S3 Batch Replicationという機能がサポートされ、利用者側だけで対応出来るようになりました。 既存オブジェクトを一括レプリケートしたい場合はこれを利用します。

Amazon S3 Batch Replication

バッチレプリケーションとは

レプリケーションは、レプリケーションルール設定後のオブジェクトを対象にレプリケートする機能です。 バッチレプリケーションでは、下記のオブジェクトに対してもレプリケーションが可能になります。

  • レプリケーションルール設定前のオブジェクト
  • レプリケーションに失敗したオブジェクト
  • 既に別のバケットにレプリケートされたオブジェクト
  • レプリケート先のレプリカオブジェクト

利用手順

パターンA (レプリケーションルール作成時に実行する)

事前準備
  • レプリケート元バケットのバージョニングを有効にしておく。
  • レプリケート先バケットを作成して、バージョニングを有効にしておく。
バッチオペレーションジョブを設定する

① レプリケーションルール作成時、既存のオブジェクトをレプリケートするか否かのモーダルが表示されるため、「はい、既存のオブジェクトをレプリケートします。」の方を選択する。

② 「ジョブ設定」項目で、ジョブの自動実行可否を設定する。

③ 「完了レポート」項目で、実行したオブジェクトに対する結果を出力したファイルの出力先を指定する。

④ 「アクセス許可」項目で、IAMロールを指定する。

⑤ 「保存」をクリックする。

パターンB (マニフェストファイルを使って実行する)

マニフェストファイルを使うことで、より詳細なフィルタリングを掛けたバッチレプリケーションが可能です。

事前準備
  • レプリケート元バケットのバージョニングを有効にしておく。
  • レプリケート先バケットを作成して、バージョニングを有効にしておく。
  • マニフェストファイル(実行対象オブジェクト一覧)を用意する。
バッチオペレーションジョブを設定する

① S3のバッチオペレーションから「ジョブの作成」をクリックする。

② 「マニフェスト」項目で、用意したマニフェストファイルを選択する。

③ 「オペレーション」項目で「コピーする」を選択する。

④ 「コピー先」項目で、レプリケート先バケットを指定する。

⑤ 「完了レポート」項目で、実行したオブジェクトに対する結果を出力したファイルの出力先を指定する。

⑥ 「アクセス許可」項目で、IAMロールを指定する。

⑦ 「保存」をクリックする。

注意事項

  • レプリケート元バケットとレプリケート先バケットの両方でバージョニングを有効化する必要がある。
  • 対象オブジェクト数が多い場合、予めコストを確認しておく。
    例)1MBのオブジェクト100万件をレプリケートした場合
      バッチレプリケーションのジョブあたりの料金: $0.25
     + 100万オブジェクトあたり$1.00のオペレーション料金: $1.00
     + レプリケート先のストレージ料金: $0.025/GB/月 × 1TB = $25/月
     + レプリケート先のPUTリクエスト料金: $0.005/1,000回 × 100万回 = $5.00
     ...等が必要

まとめ

AWSのS3にはレプリケーション機能があり、レプリケーションルールを設定することで、簡単にレプリカを作成することが出来ます。 既存オブジェクトに対してレプリケートしたい場合は、バッチオペレーションジョブを設定することで対応可能です。 オプション機能もあり、それによって料金も変わってくるため、事前に見積もりしておくことを推奨します。

今回はAWS S3のレプリケーション機能に焦点を置いて話をしました。 AWSはこれに限らず多くのサービスや機能があるため、他の様々なものについても今後ご紹介できればと思います。

参考

docs.aws.amazon.com docs.aws.amazon.com aws.amazon.com aws.amazon.com