双方向レプリケーションのS3バケットをCloudFrontのオリジンにして切り替えてみた

マルチリージョンでのS3双方向レプリケーションのS3バケットを利用してCloudFrontのオリジン設定を切り替えてみました。

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、AWS事業本部のニシヤマです。

前回のブログで東京リージョンと、大阪リージョンのS3での双方向レプリケーションを試してみました。

今回はそのS3の双方向レプリケーション構成を利用してCloudFrontによるコンテンツ配信を切り替えてみたいと思います。

準備

前回ブログの構成を利用とは言いつつ両方のS3バケットでコンテンツが同期されているとどちらのリージョンのS3バケットにアクセスしているかわからなくなるので一旦、レプリケーションがされていない状態の空のS3バケットを用意します。 前回同様以下のS3バケット名で作成します。新規作成するのが手っ取り早いです。

  • test-bidirectionalreplication-tokyo-bucket:東京リージョンのS3バケット
  • test-bidirectionalreplication-osaka-bucket:大阪リージョンのS3バケット

オブジェクトは旧バージョンも含め空の状態です。

後ほど双方向レプリケーションを設定するのでバージョニングも有効化しておきます。リージョンも東京リージョン大阪リージョンで分かれています。

レプリケーションも未設定の状態になっています。

やってみる

それではやっていきましょう。 まずは区別がつくようにそれぞれのS3のバケットにオブジェクトをアップします。

このように各リージョンの名前のファイルをアップしました。こちらのオブジェクトはレプリケーションしないようにします。

S3のレプリケーション設定

それでは双方向レプリケーションの設定を行なっていきます。設定については前回のブログを参照してください。

レプリケーションの設定を行う際、先ほどアップした各リージョンの名前のファイルを同期しないように既存のオブジェクトをレプリケートしますか?の際にいいえ、既存のオブジェクトをレプリケートしません。を選択します。

結果このようにレプリケーションは設定されているけど、既存のオブジェクトは同期されてない状態になりました。

オブジェクトの状態

レプリケーション設定

同期するオブジェクトをアップロード

あとは自由にファイルをアップロードして同期させます。

双方向の同期が完了して最初にアップロードしたオブジェクトのみが差分になっている状態になりました。

CloudFrontの設定

それではこの状態でS3をオリジンにしたCloudFrontを設定していきます。設定にはこちらのブログを参考にしてください。

CloudFrontで S3のコンテンツを配布する

オリジンが東京リージョンのS3バケットでディストリビューションを作成

CloudFrontの画面でディストリビューションを作成をクリックします。

以下の情報でディストリビューションを作成します。今回は検証なのでその他の値はデフォルトのままで作成します。

  • オリジンドメイン:東京リージョンのS3バケット
  • S3 バケットアクセス:はい、OAI を使用します
  • 新しい OAI を作成:新規OAI名を指定して作成します
  • バケットポリシー:はい、バケットポリシーを自動で更新します

ディストリビューションを作成すると東京リージョンのS3バケットにバケットポリシーが設定されています。

ディストリビューションのデプロイが完了したらブラウザからアクセスしてみます。

事前にリージョンの区別のためにアップロードしていたオブジェクトにアクセスしてみます。

東京リージョン用のオブジェクトは表示できます。

大阪リージョン用のオブジェクトは表示できませんでした。

その他の双方向レプリケーションしているオブジェクトにもアクセスできています。

オリジンを大阪リージョンのS3バケットに変更

それではオリジンを大阪リージョンに変更してみます。

先ほど作成したCloudFrontディストリビューションのオリジンタブでS3のオリジン設定を指定し、編集をクリックします。

編集画面で今度はオリジンを大阪リージョンのS3バケットに変更、再度新しいOAIを作成して変更を保存します。

  • オリジンドメイン:大阪リージョンのS3バケット
  • S3 バケットアクセス:はい、OAI を使用します
  • 新しい OAI を作成:新規OAI名を指定して作成します
  • バケットポリシー:はい、バケットポリシーを自動で更新します

再びデプロイが完了するのを待ちます。

キャッシュが残っている可能性があるので、CloudFrontのキャッシュを削除します。

CloudFrontのキャッシュ削除はこちらを参照してください。

[AWS] Amazon CloudFrontのキャッシュ削除(Invalidation)

では再びブラウザからアクセスしてみます。

東京リージョン用のオブジェクトが表示できなくなりました。この時ブラウザのキャッシュが残っている場合もあるので注意してください。

そして、今度は大阪リージョン用のオブジェクトが表示できるようになりました!

もちろんその他の双方向レプリケーションしているオブジェクトにもアクセスできます。

大阪リージョンに新規オブジェクトを作成してみましたが、CloudFrontで確認することもできました!

もう一度オリジンを東京リージョンのS3バケットに戻してみる

これでオリジンを東京リージョンのS3バケットから大阪リージョンのS3バケットへ変更することはできましたが、もう一度東京リージョンのS3バケットへ戻してみたいと思います。

先ほどと同じくCloudFrontディストリビューションのオリジンタブでS3のオリジン設定を指定し、編集をクリックして設定を東京リージョンのS3バケットの時の状態にします。

今度は既存のOAIを指定して、バケットポリシーも既に設定済みなのでいいえを選択して設定の保存をします。

念の為CloudFrontのキャッシュ削除も実施します。

また、ブラウザでアクセスを実施してみると東京リージョン用のオブジェクトが表示され、大阪リージョン用のオブジェクトが見れない状態になりました!

そして、大阪リージョンに切り替えた際にアップロードしたオブジェクトもレプリケーションされ見れています。

以上です!

まとめ

いかがでしたででしょうか。S3自体が通常3つのアベイラビリティーゾーンで運用されているので、あまり使えない状況が発生することはないかとは思いますが、双方向のレプリケーションを組み合わせることで他のリージョンにオブジェクトをマルチマスター構成で利用ができます。 また、CloudFrontのオリジンにS3バケットを利用している場合にも、このようにすることで特定のリージョンのS3に問題が起きた場合も切り替え運用することが可能となります。

以上、この記事がどなたかの参考になれば幸いです。

参考URL