S3のクロスリージョンレプリケーションについてまとめてみた

こんにちは、西海です。
今回、S3の機能であるレプリケーション、特にクロスリージョンレプリケーションについて自分の理解をまとめます。

S3レプリケーションとは

レプリケーションとは英語の「replication」で、意味は「複製(レプリカ)を作成する」です。
つまりS3レプリケーションとは、S3バケット内のオブジェクトを別のS3バケットに複製する機能となります。
S3レプリケーションを使用することで、Amazon S3 バケット間でオブジェクトを自動で非同期的にコピーできます。

S3レプリケーションの特徴

S3レプリケーションの特徴について、いくつかまとめます。

・メタデータを保持しながらオブジェクトをレプリケートできる
 元オブジェクトのすべてのメタデータを保持するオブジェクトをコピーできます。

・別のストレージクラスにオブジェクトをレプリケートできる
 S3 Glacierなどの別のストレージクラスにもレプリケーションできる。バケットのライフサイクル設定を利用して、一定期間経過後に別のストレージクラスに移動させることもできます。

・複数の AWS リージョンに格納されたオブジェクトを保持する
 元オブジェクトとは別のリージョンにレプリケーションすることで、レイテンシーの短縮、コンプライアンス、セキュリティ、ディザスタリカバリ、およびリージョンの効率向上に対応できます。 元オブジェクトとは別のリージョンにレプリケーションすることで、レイテンシーの短縮、コンプライアンス、セキュリティ、ディザスタリカバリ、およびリージョンの効率向上に対応できます。

他にも特徴がありますので、詳しくは公式ユーザガイドをご確認ください。

S3レプリケーションの種類

S3レプリケーションの種類は下記のようになります。

・クロスリージョンレプリケーション(CRR)
・同一リージョンレプリケーション(SRR)
・バッチレプリケーション
・双方向レプリケーション・双方向レプリケーション

また、異なるAWSアカウントを使用したレプリケーションを、クロスアカウントレプリケーションと呼びます。
今回は上記の中からクロスリージョンレプリケーションについてまとめていきます。

クロスリージョンレプリケーションとは

クロスリージョンレプリケーションとはその名の通り、異なるAWSリージョン内のS3バケットにオブジェクトをコピーすることができます。
別リージョンにコピーするメリットは以下の通りです。

・コンプライアンス要求を満たす
 2つの異なるリージョン間でデータを保存することで、より複雑なコンプライアンス要求をみたすことができます。 2つの異なるリージョン間でデータを保存することで、より複雑なコンプライアンス要求をみたすことができます。

・レイテンシーを最小にする
 ユーザが2つの離れた地点にいる場合、より近いリージョンのオブジェクトにアクセスすることでレイテンシーを最小にできます。

動作検証

クロスリージョンレプリケーションの動作を確認します。
今回は東京リージョンと大阪リージョンの2つを使用します。
送信元(レプリケーション元):東京リージョン
送信先(レプリケーション先):大阪リージョン

また、作成手順についてはこちらを参考にしました。
Amazon S3 レプリケーションを使用して、AWS リージョン内およびリージョン間でデータをレプリケートする

設定時に気を付けること

クロスリージョンレプリケーション設定時は、下記設定が必須となります。

・送信元と送信先の両方のバケットで、バージョニングを有効にする

また、オブジェクトが暗号化されていれば、下記設定も必須です。

・レプリケーションルール作成時の暗号化オプション設定

ファイル削除もレプリケーションするにはオプションで下記設定を追加します。

「削除マーカーのレプリケーション」を有効にする

構成図

各リソースについては下記のような構成となります。

S3バケット作成

東京リージョンと大阪リージョンに1つずつバケットを作成します。
その際、設定する項目は下記です。
※下記以外の項目はデフォルト設定のままとします。

設定項目 設定値(東京) 設定値(大阪)
AWSリージョン アジアパシフィック(東京)ap-northeast-1 アジアパシフィック(大阪)ap-northeast-3
バケット名 s3-crr-test-tokyo s3-crr-test-osaka
バケットのバージョニング 有効 有効
タグ User/saikai User/saikai
デフォルトの暗号化 Amazon S3 マネージドキーを使用したサーバー側の暗号化 (SSE-S3) Amazon S3 マネージドキーを使用したサーバー側の暗号化 (SSE-S3)

まず東京リージョンでバケットを作成します。
AWSコンソールからS3サービス画面を表示します。
左ペインから「バケット」を押下し、「バケットの作成」を押下します。

表の通りに設定し、バケットを作成します。

東京リージョンでバケット作成後、同様に大阪リージョンにバケットを作成します。

レプリケーションルール作成

今回は東京リージョンのバケットを送信元のソースバケットとします。
そのため東京リージョンに作成したバケットにレプリケーションルールを作成します。

作成したバケットを選択し、「管理」タブの「レプリケーションルールを作成」を押下します。

下記項目を設定します。
※下記以外の項目はデフォルト設定のままとします。

設定項目 設定値
レプリケーションルール名 s3-crr-test
ルールスコープを選択 バケット内のすべてのオブジェクトに適用
送信先 このアカウントのバケットを選択する
バケット名 s3-crr-test-osaka
既存のIAMロールから選択 新しいロールの作成
暗号化 AWS Key Management Serviceで暗号化されたオブジェクトをレプリケートする
ソースオブジェクトを複合するためのAWS KMSキー aws/s3
送信先オブジェクトを暗号化するためのAWS KMSキー AWS KMSキーから選択する
使用可能なAWS KMSキー s3

※優先度とは、同じ送信先バケットに複数のレプリケーションルールが設定されている場合にどのルールを優先するかを設定できます。数字が小さいほど優先度が高くなります。
1つの送信先バケットに対して1つのレプリケーションルールしか設定されていない場合は特に考慮されません。

設定後に「保存」ボタンを押下すると、レプリケーションルール画面に遷移します。
その際に「既存のオブジェクトをレプリケートしますか?」という確認ポップアップが表示されます。今回はバケット内にまだなにも保存されていないので、「いいえ」を選択します。

レプリケーションルールが正常に作成され、有効になっていることを確認します。
また、IAMロールも作成され設定されていることも確認できます。


 

レプリケーション動作確認

レプリケーションルールを作成したので、実際の動作を確認します。
ローカルに確認用ファイル「test.txt」を作成し、東京リージョンに作成したバケットにアップロードします。

アップロード成功後、ファイル名を押下して詳細画面を表示します。
詳細画面内の「オブジェクト管理の概要」欄にある「レプリケーションステータス」がPENDINGからCOMPLETEDになればレプリケーションは成功です。

大阪リージョンに作成したバケット内を確認すると先ほどアップロードしたファイルと同じファイルが保存されていることを確認できます。

これにより、クロスリージョンレプリケーションの動作を確認することができました。

追加確認① ファイル削除もレプリケーションするには

クロスリージョンレプリケーションについて確認できたので、東京リージョンのバケットからアップロードファイルを削除しました。
私の中では送信元バケットからファイルを削除したら送信先バケットからも削除されるのだろうと思っていたのですが、実際は送信元バケットにファイルが残ったままになりました。
調べたところ、レプリケーションルール作成時に「追加のレプリケーションオプション」項目内の「削除マーカーのレプリケーション」を有効にしないといけないようです。
作成済みのレプリケーションルールでも後から有効化できるので、せっかくなので追加で確認してみました。

作成済みのレプリケーションルールを選択し、「ルールの編集」ボタンを押下します。

「追加のレプリケーションオプション」項目内の「削除マーカーのレプリケーション」を有効にし保存します。

削除確認用に「test2.txt」ファイルを作成し、送信元バケットにアップロードします。

送信先バケットに「test2.txt」ファイルがレプリケーションされたことを確認します。

送信元バケットから「test2.txt」を削除します。

少し時間を置いてから送信元バケットを確認すると、「test2.txt」が削除されました。

さいごに

実際にクロスリージョンレプリケーションを設定することで、レプリケーションの挙動について理解できました。
細かい設定については今回触れませんでしたが、業務で使用する際は各設定についてしっかりした要件が決められると思うので、それに合わせて設定することになるかと思います。

また、同一リージョンレプリケーションについては下記弊社ブログ記事で触れていますので、こちらもご参考ください。

・協栄情報ブログ
S3のレプリケーション機能を使って、ファイルを別バケットに連携してみる

Last modified: 2023-12-04

Author