オリジンリクエストの制御 - Amazon CloudFront

オリジンリクエストの制御

CloudFront へのビューワーリクエストにより、キャッシュミス (リクエストされたオブジェクトがエッジロケーションでキャッシュされない) が発生した場合、CloudFront はオブジェクトを取得するためのリクエストをオリジンに送信します。これは、オリジンリクエストと呼ばれます。オリジンリクエストには、ビューワークエストの次の情報が常に含まれます。

  • URL パス (URL クエリ文字列またはドメイン名を含まないパスのみ)

  • リクエストボディ (存在する場合)

  • CloudFront がすべてのオリジンリクエストに自動的に含める HTTP ヘッダー (HostUser-AgentX-Amz-Cf-Id など)。

ビューワーリクエストのその他の情報 (URL クエリ文字列、HTTP ヘッダー、Cookie など) は、デフォルトではオリジンリクエストに含まれません。ただし、分析やテレメトリーのためにデータを収集するなど、オリジンでこのその他の情報を受信することができます。オリジンリクエストポリシー を使用して、オリジンリクエストに含まれる情報を制御できます。

オリジンリクエストポリシーは、キャッシュキーを制御するキャッシュポリシーとは別のものです。この分離により、オリジンで追加情報を受信し、良好なキャッシュヒット率 (キャッシュヒットとなるビューワーリクエストの割合) を維持することができます。これを行うには、オリジンリクエストに含める情報 (オリジンリクエストポリシーを使用) とキャッシュキーに含める情報 (キャッシュポリシーを使用) を個別に制御します。

2 種類のポリシーは別々のものですが、関連性があります。キャッシュキーに含めるすべての URL クエリ文字列、HTTP ヘッダー、および Cookie (キャッシュポリシーを使用) は、オリジンリクエストに自動的に含まれます。オリジンリクエストポリシーを使用して、オリジンリクエストに含めるが、キャッシュキーには含めない情報を指定します。キャッシュポリシーと同様に、オリジンリクエストポリシーを CloudFront ディストリビューション内の 1 つ以上のキャッシュ動作にアタッチします。

オリジンリクエストポリシーを使用して、ビューワーリクエストに含まれていないオリジンリクエストに追加の HTTP ヘッダーを追加することもできます。これらの追加ヘッダーは、オリジンリクエストを送信する前に CloudFront によって追加されます。ヘッダー値は、ビューワーリクエストに基づいて自動的に決定されます。詳細については、「CloudFront HTTP ヘッダーの使用」を参照してください。

オリジンリクエストポリシーについて

CloudFront には、一般的ユースケース用管理ポリシーと呼ばれる事前定義されたオリジンリクエストポリシーがいくつか用意されています。これらの管理ポリシーを使用することも、ユーザーのニーズに固有の独自のオリジンリクエストポリシーを作成することもできます。管理ポリシーの詳細については、「管理オリジンリクエストポリシーの使用」を参照してください。

オリジンリクエストポリシーには以下の設定が含まれます。設定は、ポリシー情報オリジンリクエスト設定に分類されます。

ポリシー情報

名前

オリジンリクエストポリシーを識別する名前。コンソールでは、名前を使用して、オリジンリクエストポリシーをキャッシュ動作にアタッチします。

コメント

オリジンリクエストポリシーを説明するコメント。これはオプションです。

オリジンリクエスト設定

オリジンリクエスト設定では、CloudFront がオリジンに送信するリクエスト (オリジンリクエストと呼ばれる) に含まれるビューワーリクエストの値を指定します。値には、URL クエリ文字列、HTTP ヘッダー、および Cookie を含めることができます。指定した値は、オリジンリクエストに含まれますが、キャッシュキーには含まれません。キャッシュキーの制御については、「キャッシュキーの管理」を参照してください。

クエリ文字列

CloudFront によりオリジンリクエストに含まれる、ビューワーリクエストの URL クエリ文字列。クエリ文字列には、以下のいずれかの設定を選択できます。

  • [None (なし)] – ビューワーリクエストのクエリ文字列は、オリジンリクエストに含まれません

  • [All (すべて)] – ビューワーリクエストのすべてのクエリ文字列は、オリジンリクエストに含まれます。

  • [Whitelist (ホワイトリスト)] – ビューワーリクエストのどのクエリ文字列をオリジンリクエストに含めるかを指定します。

[ホワイトリスト] の設定を使用する場合、クエリ文字列は値ではなく名前で指定します。たとえば、次の URL パスを考えてみます。

/content/stories/example-story.html?split-pages=false

この場合、クエリ文字列を split-pages=false としてではなく、split-pages として指定します。ただし、CloudFront では、オリジンリクエストに、その値を含む完全なクエリ文字列が含まれます。

ヘッダー

CloudFront によりオリジンリクエストに含まれる、ビューワーリクエストの HTTP ヘッダー。ヘッダーには、以下のいずれかの設定を選択できます。

  • [Note (なし)] – ビューワーリクエストの HTTP ヘッダーは、オリジンリクエストに含まれません

  • [All viewer headers (すべてのビューワーヘッダー)] – ビューワーリクエストのすべての HTTP ヘッダーは、オリジンリクエストに含まれます。

  • [Whitelist (ホワイトリスト)] – オリジンリクエストに含める HTTP ヘッダーを指定します。

  • [All viewer headers and whitelisted CloudFront-* headers (すべてのビューワーヘッダーとホワイトリストに登録された CloudFront-* ヘッダー)] – ビューワーアリクエストのすべての HTTP ヘッダーは、オリジンリクエストに含まれます。さらに、オリジンリクエストに追加する CloudFront ヘッダーを指定します。CloudFront ヘッダーの詳細については、「CloudFront HTTP ヘッダーの使用」を参照してください。

[ホワイトリスト] または [All viewer headers and whitelisted CloudFront-* headers (すべてのビューワーヘッダーとホワイトリストに登録された CloudFront-* ヘッダー)] の設定を使用する場合、HTTP ヘッダーは値ではなく名前で指定します。たとえば、次の HTTP ヘッダーを考えてみます。

Accept-Language: en-US,en;q=0.5

この場合、ヘッダーを Accept-Language: en-US,en;q=0.5 としてではなく、Accept-Language として指定します。ただし、CloudFront では、オリジンリクエストに、その値を含む完全なヘッダーが含まれます。

Cookie

CloudFront によりオリジンリクエストに含まれる、ビューワーリクエストの Cookie。Cookie には、以下のいずれかの設定を選択できます。

  • [None (なし)] – ビューワーリクエストの Cookie は、オリジンリクエストに含まれません

  • [All (すべて)] – ビューワーリクエストのすべての Cookie は、オリジンリクエストに含まれます。

  • [Whitelist (ホワイトリスト)] – ビューワーリクエストのどの Cookie をオリジンリクエストに含めるかを指定します。

[ホワイトリスト] 設定を使用する場合、Cookie は値ではなく名前で指定します。たとえば、次の Cookie ヘッダーを考えてみます。

Cookie: session_ID=abcd1234

この場合、Cookie を session_ID=abcd1234 としてではなく、session_ID として指定します。ただし、CloudFront では、オリジンリクエストに、その値を含む完全な Cookie が含まれます。

オリジンリクエストポリシーの作成

オリジンリクエストポリシーを使用して、CloudFront がオリジンに送信するリクエストに含まれる値 (URL クエリ文字列、HTTP ヘッダー、Cookie) を制御できます。オリジンリクエストポリシーは、CloudFront コンソール、AWS コマンドラインインターフェイス (AWS CLI)、または CloudFront API を使用して作成できます。

オリジンリクエストポリシーを作成したら、CloudFront ディストリビューションの 1 つ以上のキャッシュ動作にアタッチします。

オリジンリクエストポリシーは必須ではありません。キャッシュ動作にオリジンリクエストポリシーがアタッチされていない場合、オリジンリクエストには、キャッシュポリシーで指定されたすべての値が含まれますが、それ以上は含まれません。

注記

オリジンリクエストポリシーを使用するには、キャッシュ動作でもキャッシュポリシーを使用する必要があります。キャッシュポリシーがないと、キャッシュ動作でオリジンリクエストポリシーを使用することはできません。

オリジンリクエストポリシーを作成するには (コンソール)

  1. AWS マネジメントコンソールにサインインし、CloudFront コンソールで [Policies (ポリシー)] ページ (https://console.aws.amazon.com/cloudfront/v2/home?#/policies) を開きます。

  2. [Origin request policy (オリジンリクエストポリシー)] を選択してから、[Create origin request policy (オリジンリクエストポリシーの作成)] を選択します。

  3. このオリジンリクエストポリシーに目的の設定を選択します。詳細については、「オリジンリクエストポリシーについて」を参照してください。

  4. 終了したら、[Create origin request policy (オリジンリクエストポリシーの作成)] を選択します。

オリジンリクエストポリシーを作成したら、それをキャッシュ動作にアタッチできます。

オリジンリクエストポリシーを既存のディストリビューションにアタッチするには (コンソール)

  1. CloudFront コンソールで [Distributions (ディストリビューション)] ページ (https://console.aws.amazon.com/cloudfront/home#distributions:) を開きます。

  2. 更新するディストリビューションを選択し、[動作] タブを選択します。

  3. 更新するキャッシュ動作を選択し、[編集] を選択します。

    または、新しいキャッシュ動作を作成するには、[動作を作成] を選択します。

  4. [キャッシュとオリジンリクエストの設定] で、[キャッシュポリシーとオリジンリクエストポリシーを使用] が選択されていることを確認します。

  5. [Origin Request Policy (オリジンリクエストポリシー)] で、このキャッシュ動作にアタッチするオリジンリクエストポリシーを選択します。

  6. ページの最下部で [はい、編集します] を選択します。

オリジンリクエストポリシーを新しいディストリビューションにアタッチするには (コンソール)

  1. https://console.aws.amazon.com/cloudfront/home で CloudFront コンソールを開きます。

  2. [ディストリビューションの作成] を選択し、[ウェブ] で [使用を開始する] を選択します。

  3. [キャッシュとオリジンリクエストの設定] で、[キャッシュポリシーとオリジンリクエストポリシーを使用] が選択されていることを確認します。

  4. [Origin Request Policy (オリジンリクエストポリシー)] で、このディストリビューションのデフォルトのキャッシュ動作にアタッチするオリジンリクエストポリシーを選択します。

  5. オリジン、デフォルトのキャッシュ動作、およびディストリビューションの設定を選択します。詳細については、「ディストリビューションを作成または更新する場合に指定する値」を参照してください。

  6. 終了したら、[ディストリビューションを作成] を選択します。

AWS コマンドラインインターフェイス (AWS CLI) でオリジンリクエストポリシーを作成するには、aws cloudfront create-origin-request-policy コマンドを使用します。各パラメータをコマンドライン入力として指定するのではなく、入力ファイルを使用してコマンドの入力パラメータを指定できます。

オリジンリクエストポリシーを作成するには (入力ファイルを含む CLI)

  1. 次のコマンドを使用して、create-origin-request-policy コマンドのすべての入力パラメータを含む origin-request-policy.yaml という名前のファイルを作成します。

    aws cloudfront create-origin-request-policy --generate-cli-skeleton yaml-input > origin-request-policy.yaml
    注記

    yaml-input オプションは、AWS CLI のバージョン 2 でのみ使用できます。AWS CLI のバージョン 1 では、JSON 形式の入力ファイルを生成できます。詳細については、AWS コマンドラインインターフェイスユーザーガイドの「JSON または YAML 入力ファイルからの AWS CLI スケルトンと入力パラメータの生成」を参照してください。

  2. 先ほど作成した origin-request-policy.yaml という名前のファイルを開きます。ファイルを編集して、必要なオリジンリクエストポリシー設定を指定し、ファイルを保存します。ファイルからオプションのフィールドを削除することはできますが、必須フィールドは削除しないでください。

    オリジンリクエストポリシー設定の詳細については、「オリジンリクエストポリシーについて」を参照してください。

  3. 次のコマンドを使用して、origin-request-policy.yaml ファイルの入力パラメータを使用し、オリジンリクエストポリシーを作成します。

    aws cloudfront create-origin-request-policy --cli-input-yaml file://origin-request-policy.yaml

    コマンドの出力の Id 値を書き留めます。これはオリジンリクエストポリシー ID であり、オリジンリクエストポリシーを CloudFront ディストリビューションのキャッシュ動作にアタッチするために必要です。

オリジンリクエストポリシーを既存のディストリビューションにアタッチするには (入力ファイルを含む CLI)

  1. 以下のコマンドを使用して、更新する CloudFront ディストリビューションのディストリビューション設定を保存します。distribution_ID をディストリビューションの ID に置き換えます。

    aws cloudfront get-distribution-config --id distribution_ID --output yaml > dist-config.yaml
    注記

    --output yaml オプションは、AWS CLI のバージョン 2 でのみ使用できます。AWS CLI のバージョン 1 では、JSON 形式で出力を生成できます。詳細については、『AWS コマンドラインインターフェイスユーザーガイド』の「AWS CLI からのコマンド出力の制御」を参照してください。

  2. 先ほど作成した dist-config.yaml という名前のファイルを開きます。ファイルを編集し、オリジンリクエストポリシーを使用するように更新する各キャッシュ動作に次の変更を加えます。

    • キャッシュ動作で、OriginRequestPolicyId という名前のフィールドを追加します。フィールドの値には、ポリシーの作成後に書き留めたオリジンリクエストポリシー ID を使用します。

    • ETag フィールドの名前を IfMatch に変更しますが、フィールドの値は変更しないでください。

    完了したら、ファイルを保存します。

  3. オリジンリクエストポリシーを使用するようにディストリビューションを更新するには、次のコマンドを使用します。distribution_ID をディストリビューションの ID に置き換えます。

    aws cloudfront update-distribution --id distribution_ID --cli-input-yaml file://dist-config.yaml

新しいディストリビューションにキャッシュポリシーをアタッチするには (入力ファイルを含む CLI)

  1. 次のコマンドを使用して、create-distribution コマンドのすべての入力パラメータを含む distribution.yaml という名前のファイルを作成します。

    aws cloudfront create-distribution --generate-cli-skeleton yaml-input > distribution.yaml
    注記

    yaml-input オプションは、AWS CLI のバージョン 2 でのみ使用できます。AWS CLI のバージョン 1 では、JSON 形式の入力ファイルを生成できます。詳細については、AWS コマンドラインインターフェイスユーザーガイドの「JSON または YAML 入力ファイルからの AWS CLI スケルトンと入力パラメータの生成」を参照してください。

  2. 先ほど作成した distribution.yaml という名前のファイルを開きます。デフォルトのキャッシュ動作の [OriginRequestPolicyId] フィールドに、ポリシーの作成後に書き留めたオリジンリクエストポリシー ID を入力します。ファイルの編集を続行して必要なディストリビューション設定を指定し、完了したらファイルを保存します。

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

  3. 次のコマンドを使用して、distribution.yaml ファイルの入力パラメータを使用し、ディストリビューションを作成します。

    aws cloudfront create-distribution --cli-input-yaml file://distribution.yaml

CloudFront API を使用してオリジンリクエストポリシーを作成するには、CreateOriginRequestPolicy を使用します。この API コールで指定するフィールドの詳細については、「オリジンリクエストポリシーについて」、および AWS SDK やその他の API クライアントの API リファレンスドキュメントを参照してください。

オリジンリクエストポリシーを作成したら、次の API コールのいずれかを使用して、それをキャッシュ動作にアタッチできます。

  • 既存のディストリビューションのキャッシュ動作にアタッチするには、UpdateDistribution を使用します。

  • 新しいディストリビューションのキャッシュ動作にアタッチするには、CreateDistribution を使用します。

これらの API コールの両方について、キャッシュ動作内で、OriginRequestPolicyId フィールドにオリジンリクエストポリシーの ID を指定します。これらの API コールで指定するその他のフィールドの詳細については、「ディストリビューションを作成または更新する場合に指定する値」と、AWS SDK やその他の API クライアントの API リファレンスドキュメントを参照してください。