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。ビューワーが別の HTTP メソッド (、 などPUT) を送信しても POST. CloudFront does はフェイルオーバーしません。

以下の図は、オリジンフェイルオーバーのしくみを示しています。


				オリジンフェイルオーバーのしくみ

オリジングループの作成

オリジングループを作成するには
  1. にサインインAWS Management Consoleし、 で CloudFront コンソールを開きますhttps://console.aws.amazon.com/cloudfront/v4/home

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

  3. [オリジン] タブを選択します。

  4. ディストリビューションに複数のオリジンがあることを確認します。そうでない場合は、2 番目のオリジンを追加します。

  5. [Origin groups] (オリジンのグループ) ペインの [Origins] (オリジン) タブで、[Create Origin group] (オリジングループの作成) を選択します。

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

  7. オリジングループの名前を入力します。

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

    注記

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

  9. [Create origin group] (オリジングループの作成) を選択します。

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

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

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

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

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

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

オリジン接続の試行

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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