CloudFrontを利用してオリジンサーバー障害時にS3上のコンテンツを表示する

今回はCloudFrontを利用し、特定のパスへのアクセスをリダイレクトしてみたいと思います。確認する構成はCloudFront + Custom Origin(ALB)と、CloudFront + S3 Origin(ウェブサイトホスティング)となります。
2019.01.23

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

こんにちは、坂巻です。

CloudFrontのマルチオリジン(ELB-Origin、S3-Origin)構成で、オリジンサーバの障害時に、S3 Originに自動的に切り替わるように設定してみたいと思います。

構成

マルチオリジン(ELB-Origin、S3-Origin)のパスよるオリジンの振り分けを設定した構成です。

07

設定

S3バケット

障害時に表示させたいコンテンツ格納するバケット「nochi251」を作成します。配下にmaintenanceフォルダを作成し、ファイルを格納しています。

01

S3 Originは、通常のバケットとして設定するか、Webサイトホスティング機能を有効にして使用するかで、機能に違いがあるのでご注意ください。詳細は以下をご確認ください。

ここでは、Webサイトホスティングは設定せず、S3 Origin(バケット)として利用します。CloudFrontからのアクセスを許可する設定は、後ほどCloudFront経由で設定を行います。

CloudFront

Origins

ELB-Originと、障害時用のオリジンとしてS3-Originを追加します。

02

ここで注意頂きたいのは、S3 Originの以下の設定です。

05

CloudFrontからのみ、該当バケットへのアクセスを許可する設定です。Grant Read Permissions on Bucketを「Yes」にすることでバケットポリシーが更新されます。

バケット「nochi251」のバケットポリシーに、CloudFrontからのアクセス許可が設定されました。

06

こちらの設定の詳細については、以下をご確認ください。

Behaviors

maintenance/* を追加し、S3 Originを指定します。

03

Error Pages

HTTP Error Codeに502〜504を指定し、Response Page Pathに、/maintenance/index.htmlを指定します。こちらは、要件にあわせ考慮が必要です。

04

やってみた

通常時は、CloudFrontに設定したドメインにアクセスすると、ELB-Origin配下のWebサーバが応答します。

09

次は、擬似的な障害として、ALBのセキュリティグループのルールを変更し、CloudFrontからELB-Originにアクセスできない状況をつくりました。この状態でアクセスすると、パスよる振り分けでS3 Originにアクセスされます。

08

さいごに

Route53のフェイルオーバー等で、上記のような事もできるかと思いますが、オリジンへのHTTPS通信が必須の場合、SSL証明書のエラー(S3ウェブホスティングにSSL証明書は割り当てられない)になるので、このような構成になるのではないでしょうか。

参考