【新機能】S3でCross-Region Replicationが出来るようになりました!
ウィスキー、シガー、パイプをこよなく愛する大栗です。
本日S3に重要なアップデートが行われました。S3のオブジェクトを別リージョンへレプリケーションすることで出来るようになりました。
設定
今回はManagement Consoleから設定を行いました。
まずS3の画面を表示します。Cross-Region Replicationの告知が表示されていました。
レプリケーションのオリジンとしてS3バケットを"maroon1st-rep-tokyo"という名称で作成して設定します。
Propertiesの中に"Cross-Region Replication"が増えています。 まず、[Enable Versioning]をクリックして有効化します。有効化は既存"Versioning"の項でも実施可能です。
次にレプリケーションの内容を設定します。
- [Enable Cross-Region Replication]を選択
- Source:[This bucket]を選択([A prefix in this bucket]を選択すると特定のオブジェクトのみを対象とできます)
- Destination Region:レプリケーション先のリージョンを選択
- Destination Bucket:レプリケーション先のS3バケットを選択(今回は既存バケット[maroon1st-rep-oregon]。ここで新規バケットも作成可能。)
最後にIAMの権限設定を行います。 S3画面側で[Create/Select IAM Role]をクリックするとIAMの設定画面が開きます。ここで[Allow]をクリックします。 設定内容は以下になります。
- IAM Role:デフォルトの[Create a new IAM Role]を選択し、新しいRoleを作成
- Role-Name:デフォルト値の"maroon1st-rep-tokyo-maroon1st-rep-oregon-s3-repl-role"を設定
ここで作成したIAM Policyは以下の内容になります。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:Get*", "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::maroon1st-rep-tokyo", "arn:aws:s3:::maroon1st-rep-tokyo/*" ] }, { "Action": [ "s3:ReplicateObject", "s3:ReplicateDelete" ], "Effect": "Allow", "Resource": "arn:aws:s3:::maroon1st-rep-oregon/*" } ] }
[Selected IAM Role]で先ほど作成したIAM Roleである"maroon1st-rep-tokyo-maroon1st-rep-oregon-s3-repl-role"が設定されていることを確認して、[Save]をクリックします。
そのままでは、以下のメッセージが表示されますので、レプリケーション先のS3バケット"maroon1st-rep-oregon"でVersioningを有効化します。その後、再度[Save]をクリックします。
これでCross-Region Replicationの設定は完了です。
動作確認
まず、オリジンの[maroon1st-rep-tokyo]にManagement Consoleからファイルをアップロードします。
東京リージョンのmaroon1st-rep-tokyoにファイルをアップロードします。 アップロード直後は[Replication Status]が"Pending"になっているますが、少し経つと"Completed"になります。
レプリケーション先バケットを確認すると、同じオブジェクトが同じタイムスタンプで作成されています。こちらの[Replication Status]は"Replica"となります。
今度はオブジェクトを更新します。オリジンのバケット[Size]と[Last Modified]が変わっています。
同様にレプリケーション先バケットでも[Size]と[Last Modified]が更新されます。
ファイルを削除してみましょう。 オリジンのバケットでオブジェクトを削除します。
レプリケーション先バケットでも削除されます。
オブジェクトの追加、更新、削除のレプリケーションを確認できました。
注意点
機能的な制限事項として注意点があります。
- レプリケーション先は1バケットのみ設定可能のようです。
- レプリケーション先は別リージョンのみ指定可能です。同じリージョンへはレプリケーションできません。
- Cross-Region Replicationの設定前にあったオブジェクトはレプリケーションされません。別途コピーが必要です。
- SSE-CとSSE-KMSを使用して暗号化したオブジェクトはレプリケーションされません。
- バケット所有者が権限を持っていない場合はレプリケーションできません。
- S3のリソース(lifecycle、acl等)は複製されません。
- lifecycleで行われた操作はレプリケーションされません。そのため、ログのパージ設定などは各々のバケットで設定する必要があります。
- 多段レプリケーションは行えません。
- バージョンの削除はレプリケーションされません。バージョンを削除したい場合には、各々のバケットに対して削除する必要があります。
また、運用方法や料金に注意が必要です。
- レプリケーション先バケットのオブジェクトを操作すると整合性が崩れるため、更新操作は行わないほうが良いと思われます。
- Versioningを有効化することが前提になるため、過去のオブジェクトに対しても課金が発生します。頻繁な更新がある場合は、予想しない高額な利用料金になる可能性があります。
さいごに
S3は堅牢性が99.999999999%ですが、可用性はそうでなく99.99%です。超高可用性が必要な場合などに使用できると思います。 S3のCross-Region Replicationは通常使用できる9リージョンで使用可能です。ユースケースに合う場合は試してみては如何でしょうか?