Amazon CloudFront
開発者ガイド (API バージョン 2016-09-29)

CloudFront オリジンフェイルオーバーによる高可用性の最適化

高可用性が必要なシナリオでは、オリジンフェイルオーバーを使用して CloudFront を設定できます。開始するには、オリジングループを作成し、CloudFront のプライマリオリジンとプライマリオリジンが特定の HTTP ステータスコードの失敗応答を返したときに CloudFront が自動的に切り替わる 2 番目のオリジンを指定します。

オリジンフェイルオーバーを設定するには、少なくとも 2 つのオリジンを持つディストリビューションが必要です。次に、1 つをプライマリとして設定した 2 つのオリジンを含むディストリビューションのオリジングループを作成します。最後に、オリジングループをオリジンとして指定するキャッシュ動作を定義します。ディストリビューションのオリジングループの指定の詳細については、「オリジン ID」を参照してください。

オリジングループの 2 つのオリジンは、以下の任意の組み合わせです。Amazon S3 バケットまたは Amazon EC2 インスタンスなどの AWS オリジン、または独自の HTTP ウェブサーバーなどのカスタムオリジン。オリジングループを作成する際、プライマリオリジンが設定した特定のステータスコードを返したときに、GET、HEAD、および OPTIONS HTTP メソッドの 2 番目のオリジンにフェイルオーバーするように CloudFront を設定します。

特定のオリジンフェイルオーバーオプションを使用してオリジングループを設定する手順については、「オリジングループの作成」を参照してください。

キャッシュ動作のオリジンフェイルオーバーを設定すると、CloudFront は、ビューワーリクエストに対して次の処理を実行します。

  • キャッシュヒットがあると、CloudFront はリクエストされたファイルを返します。

  • キャッシュミスがあると、CloudFront はオリジングループで識別されたプライマリオリジンにリクエストをルーティングします。

  • フェイルオーバー用に設定されていないステータスコード (HTTP 2xx または HTTP 3xx ステータスコードなど) が返されると、CloudFront はリクエストされたコンテンツを提供します。

  • プライマリオリジンがフェイルオーバー用に設定した HTTP ステータスコードを返した場合、またはタイムアウト後に、CloudFront はそのリクエストをオリジングループのバックアップオリジンにルーティングします。

    注記

    1 つのリクエストを 3 回連続で試行した後に、オリジンに接続できない場合、CloudFront は接続タイムアウトを発行します。CloudFront は、接続試行の間最大 10 秒 まで待機します。

以前のリクエストが 2 番目のオリジンにフェイルオーバーした場合でも、CloudFront はすべての受信リクエストをプライマリオリジンにルーティングします。プライマリオリジンにルーティングしようとしたときにフェイルオーバー用に設定されたステータスコードが返されたか、またはタイムアウトになった後でのみ、CloudFront は 2 番目のオリジンにリクエストを送信します。

次の図は、オリジンフェイルオーバーの仕組みを示しています。


			オリジンフェイルオーバーの仕組み

詳細については、以下を参照してください。

オリジングループの作成

2 つのオリジンを持つオリジングループを作成します。プライマリオリジンとして 1 つを指定し、さらにプライマリオリジンが特定の HTTP ステータスコードの失敗応答を返したときに CloudFront が自動的に切り替える 2 番目のオリジンを指定します。

オリジングループを作成するには

  1. [Origin and Origin Groups (オリジンおよびオリジングループ)] タブで、[Create origin group] を選択します。

  2. オリジングループのオリジンを選択し、[Priority (優先度)] 矢印を選択して、プライマリオリジンとしてそれらのいずれかを設定します。

  3. フェイルオーバー条件として 1 つ以上の HTTP ステータスコードを選択します。次のステータスコードを任意に組み合わせて選択できます。500、502、503、504、404、または 403。

  4. オリジングループの一意のわかりやすい ID を入力します。既にオリジンまたは別のオリジングループに使用されている ID を使用することはできません。

ディストリビューションのオリジングループを指定する方法については、「オリジン ID」を参照してください。

Lambda@Edge 関数でオリジンフェイルオーバーを使用する

Lambda@Edge 関数は、オリジングループで設定した CloudFront ディストリビューションで使用できます。Lambda 関数を使用するには、キャッシュ動作を作成するときにオリジングループのオリジンリクエストまたはオリジンレスポンストリガーで指定します。

この Lambda 関数は、CloudFront がキャッシュミスでリクエストをルーティングするときに、プライマリオリジンに対してトリガーされます。プライマリオリジンが、フェイルオーバー用に設定した HTTP ステータスコードを返した場合、CloudFront が 2 番目のオリジンにリクエストを再ルーティングすると、Lambda 関数が再度トリガーされます。

次の図は、オリジンリクエストまたはレスポンストリガーに Lambda@Edge 関数を含める場合、オリジンフェイルオーバーがどのように機能するかを示しています。


				Lambda@Edge 関数でのオリジンフェイルオーバーの機能

Lambda@Edge トリガーの使用に関する詳細については、「Lambda@Edge 関数のトリガーの追加」を参照してください。

カスタムエラーページでのオリジンフェイルオーバーの使用

オリジンフェイルオーバー用に設定されていないオリジンでそれらを使用する方法と同様に、オリジングループでカスタムエラーページを使用できます。

オリジンフェイルオーバーを使用すると、プライマリまたはセカンダリオリジン (または両方) のカスタムエラーページを返すように CloudFront を設定できます。

  • プライマリオリジンに対してカスタムエラーページを返す。 プライマリオリジンが、フェイルオーバー用に設定されていない HTTP ステータスコードエラーを返した場合、CloudFront は、ビューワーにカスタムエラーページを返します。

  • セカンダリオリジンに対してカスタムエラーページを返す。 CloudFront が 2 番目のオリジンにフェイルオーバーすると、CloudFront はカスタムエラーページを返します。

CloudFront でカスタムエラーページを使用する方法の詳細については、「カスタムエラー応答の生成」を参照してください。