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

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

高可用性が必要なシナリオでは、オリジンフェイルオーバーを使用して CloudFront を設定できます。開始するには、プライマリとセカンダリの 2 つのオリジンを持つオリジングループを作成します。プライマリオリジンが使用できない場合、または障害を示す特定の HTTP レスポンスステータスコードを返す場合、CloudFront は自動的にセカンダリオリジンに切り替わります。

オリジンフェイルオーバーを設定するには、少なくとも 2 つのオリジンを持つディストリビューションが必要です。次に、1 つをプライマリとして設定した 2 つのオリジンを含むディストリビューションのオリジングループを作成します。最後に、オリジングループを使用するようにキャッシュ動作を作成または更新します。

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

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

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

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

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

  • 次のいずれかに該当する場合:

    • プライマリオリジンは、フェイルオーバー用に設定した HTTP ステータスコードを返します。

    • CloudFront プライマリオリジンへの接続に失敗する

    • プライマリオリジンからの応答に時間がかかりすぎる (タイムアウト)

    この場合、CloudFront はオリジングループ内のセカンダリオリジンにリクエストをルーティングします。

    注記

    動画コンテンツのストリーミングなど、ユースケースによっては、CloudFront をセカンダリオリジンにすばやくフェイルオーバーする必要が生じる場合があります。CloudFront がセカンダリオリジンにフェイルオーバーされるのにかかる時間を調整するには、「オリジンのタイムアウトと試行の制御」を参照してください。

CloudFront は、以前のリクエストがセカンダリオリジンにフェイルオーバーされた場合でも、すべての受信リクエストをプライマリオリジンにルーティングします。CloudFront は、プライマリオリジンへのりくえすとが失敗した後のみセカンダリオリジンにリクエストを送信します。

CloudFront は、ビューワーリクエストの HTTP メソッドが、GETHEAD、または OPTIONS の場合にのみセカンダリオリジンにフェイルオーバーします。CloudFront は、ビューワーが別の HTTP メソッド (POSTPUT など) を送信してもフェールオーバーしません。

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


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

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

オリジングループの作成

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

  1. AWS マネジメントコンソール にサインインし、https://console.aws.amazon.com/cloudfront/ にある、CloudFront コンソールを開きます。

  2. オリジングループを作成するディストリビューションを選択します。

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

  4. [Origin and Origin Groups (オリジンとオリジングループ)] タブで、[Create Origin Group (オリジングループの作成)] を選択します。

  5. オリジングループのオリジンを選択します。オリジンを追加したら、矢印を使用して優先度 (つまり、どのオリジンがプライマリで、どのオリジンがセカンダリであるか) を設定します。

  6. フェイルオーバー基準として使用する HTTP ステータスコードを選択します。次のステータスコードを任意に組み合わせて選択できます。500、502、503、504、404、または 403。CloudFront は、指定したステータスコードの 1 つを含むレスポンスを受信すると、セカンダリオリジンにフェイルオーバーします。

    注記

    CloudFront は、ビューワーリクエストの HTTP メソッドが、GETHEAD、または OPTIONS の場合にのみセカンダリオリジンにフェイルオーバーします。CloudFront は、ビューワーが別の HTTP メソッド (POSTPUT など) を送信してもフェールオーバーしません。

  7. オリジングループの一意の識別子を入力します。AWS アカウントの別のオリジンまたはオリジングループにすでに使用されている識別子を使用することはできません。

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

オリジンのタイムアウトと試行の制御

デフォルトでは、CloudFront は、セカンダリオリジンにフェイルオーバーする前に 30 秒間 (それぞれ 10 秒間の接続試行が 3 回)、オリジングループ内のプライマリオリジンへの接続を試行します。動画コンテンツのストリーミングなど、ユースケースによっては、CloudFront をセカンダリオリジンによりすばやくフェイルオーバーする必要が生じる場合があります。次の設定を調整して、CloudFront がセカンダリオリジンにフェイルオーバーするのにかかる時間を変えることができます。オリジンがセカンダリオリジンであるか、オリジングループの一部ではないオリジンである場合、これらの設定は、CloudFront が HTTP 504 レスポンスをビューワーに返す速度に影響します。

よりすばやくフェイルオーバーするには、接続タイムアウトを短くするか、接続試行回数を減らすか、またはその両方を行います。カスタムオリジン (静的ウェブサイトホスティングで設定されている Amazon S3 バケットオリジンを含む) の場合、オリジン応答タイムアウトを調整することもできます。

オリジン接続タイムアウト

オリジン接続タイムアウト設定は、オリジンへの接続を確立しようとしたときに CloudFront が待機する時間に影響します。デフォルトでは、CloudFront は接続の確立まで 10 秒待機しますが、1 ~ 10 秒 (両端の値を含む) を指定できます。詳細については、「オリジン接続タイムアウト」を参照してください。

オリジン接続の試行

オリジン接続試行の設定は、CloudFront がオリジンへの接続を試行する回数に影響します。デフォルトでは、CloudFront は 3 回接続を試行しますが、1 ~ 3 (両端の値を含む) を指定できます。詳細については、「オリジン接続の試行」を参照してください。

カスタムオリジン (静的ウェブサイトホスティングで設定された Amazon S3 バケットを含む) では、この設定は、オリジン応答タイムアウトの場合に CloudFront がオリジンから応答を取得しようとする回数にも影響します。

オリジン応答タイムアウト
注記

これは、カスタムオリジンにのみ適用されます。

オリジン応答タイムアウト設定は、CloudFront がオリジンからの応答を受信する (または完全な応答を受信する) のを待機する時間の長さに影響します。デフォルトでは、CloudFront は 30 秒間待機しますが、1 ~ 60 秒 (両端の値を含む) を指定できます。詳細については、「オリジン応答タイムアウト」を参照してください。

これらの設定を変更する方法

CloudFront コンソールでこれらの設定を変更するには

  • 新しいオリジンまたは新しいディストリビューションの場合、リソースの作成時にこれらの値を指定します。

  • 既存のディストリビューションの既存のオリジンについては、オリジンを編集するときにこれらの値を指定します。

詳細については、「ディストリビューションを作成または更新する場合に指定する値」を参照してください。

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

Lambda@Edge 関数は、オリジングループで設定した CloudFront ディストリビューションで使用できます。Lambda 関数を使用するには、キャッシュ動作を作成するときにオリジングループのオリジンリクエストまたはオリジンレスポンストリガーで指定します。オリジングループで Lambda@Edge 関数を使用すると、1 つのビューワーリクエストに対して、この関数を 2 回トリガーできます。たとえば、次のシナリオが考えられます。

  1. オリジンリクエストトリガーを使用して Lambda@Edge 関数を作成します。

  2. Lambda 関数は、(キャッシュミス時に) プライマリオリジンに CloudFront がリクエストを送信したときに 1 回トリガーされます。

  3. プライマリオリジンは、フェイルオーバー用に設定された HTTP ステータスコードで応答します。

  4. CloudFront がセカンダリオリジンに同じリクエストを送信すると、Lambda 関数が再度トリガーされます。

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


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

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

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

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

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

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

  • セカンダリオリジンのカスタムエラーページを返す - CloudFront がセカンダリオリジンからエラーステータスコードを受け取った場合、CloudFront はカスタムエラーページを返します。

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