キャッシュキーの管理 - Amazon CloudFront

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

キャッシュキーの管理

Amazon では CloudFront、 CloudFront エッジロケーションにキャッシュされるオブジェクトのキャッシュキーを制御できます。キャッシュキーは、キャッシュ内のすべてのオブジェクトの一意の識別子であり、ビューワーリクエストによってキャッシュヒットが発生するかどうかを決定します。キャッシュヒットが発生するのは、ビューワーリクエストが以前のリクエストと同じキャッシュキーを生成し、そのキャッシュキーのオブジェクトがエッジロケーションのキャッシュにあり、有効な場合です。キャッシュヒットが発生すると、オブジェクトは CloudFront エッジロケーションからビューワーに提供されます。これには次の利点があります。

  • オリジンサーバーの負荷を軽減

  • ビューワーのレイテンシーを低減

キャッシュヒット率が高い (キャッシュヒットにつながるビューワーリクエストの割合が高い) ほど、ウェブサイトやアプリケーションのパフォーマンスが高くなります。キャッシュヒット率を改善する 1 つの方法は、キャッシュキーに必要な最小値のみを含めることです。詳細については、「キャッシュキーについて」を参照してください。

キャッシュキーを制御するには、 CloudFront キャッシュポリシー を使用します。キャッシュポリシーは、 CloudFront ディストリビューションの 1 つ以上のキャッシュ動作にアタッチします。

キャッシュポリシーの作成

キャッシュポリシーを使用して、キャッシュキーに含まれる値 (URL クエリ文字列、HTTP ヘッダー、Cookie) を管理することで、キャッシュヒット率を改善できます。キャッシュポリシーは、 CloudFront コンソール、 AWS Command Line Interface (AWS CLI)、または CloudFront API を使用して作成できます。

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

Console
キャッシュポリシーを作成するには (コンソール)
  1. にサインインAWS Management Consoleし、 CloudFront コンソールのポリシーページを開きますhttps://console.aws.amazon.com/cloudfront/v4/home?#/policies

  2. [キャッシュポリシーの作成] を選択します。

  3. このキャッシュポリシーに目的の設定を選択します。詳細については、「キャッシュポリシーについて」を参照してください。

  4. 終了したら、[作成] を選択します。

キャッシュポリシーを作成したら、それをキャッシュ動作にアタッチできます。

既存のディストリビューションにキャッシュポリシーをアタッチするには (コンソール)
  1. の CloudFront コンソールでディストリビューションページを開きますhttps://console.aws.amazon.com/cloudfront/v4/home#/distributions

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

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

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

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

  5. [キャッシュポリシー] では、このキャッシュ動作にアタッチするキャッシュポリシーを選択します。

  6. ページの最下部で [変更の保存] を選択します。

新しいディストリビューションにキャッシュポリシーをアタッチするには (コンソール)
  1. で CloudFront コンソールを開きますhttps://console.aws.amazon.com/cloudfront/v4/home

  2. [ディストリビューションの作成] を選択します。

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

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

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

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

CLI

AWS Command Line Interface (AWS CLI) でキャッシュポリシーを作成するには、aws cloudfront create-cache-policy コマンドを使用します。コマンドの入力パラメータは、コマンドライン入力として個別に指定せずに、入力ファイルを使用して指定できます。

キャッシュポリシーを作成するには (入力ファイルを含む CLI)
  1. 次のコマンドを使用して、cache-policy.yaml コマンドのすべての入力パラメータを含む create-cache-policy という名前のファイルを作成します。

    aws cloudfront create-cache-policy --generate-cli-skeleton yaml-input > cache-policy.yaml
  2. 先ほど作成した cache-policy.yaml という名前のファイルを開きます。ファイルを編集して、必要なキャッシュポリシー設定を指定し、ファイルを保存します。ファイルからオプションのフィールドを削除することはできますが、必須フィールドは削除しないでください。

    キャッシュポリシー設定の詳細については、「キャッシュポリシーについて」を参照してください。

  3. 次のコマンドを使用して、cache-policy.yaml ファイルの入力パラメータを使用し、キャッシュポリシーを作成します。

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

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

既存のディストリビューションにキャッシュポリシーをアタッチするには (入力ファイルを含む CLI)
  1. 次のコマンドを使用して、更新するディストリビューションの CloudFront ディストリビューション設定を保存します。distribution_ID をディストリビューションの ID に置き換えます。

    aws cloudfront get-distribution-config --id distribution_ID --output yaml > dist-config.yaml
  2. 先ほど作成した dist-config.yaml という名前のファイルを開きます。ファイルを編集し、キャッシュポリシーを使用するように更新する各キャッシュ動作に次の変更を加えます。

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

    • キャッシュ動作から MinTTLMaxTTLDefaultTTL、および ForwardedValues フィールドを削除します。これらの設定はキャッシュポリシー内に指定するため、これらのフィールドとキャッシュポリシーを同じキャッシュ動作に含めることはできません。

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

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

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

    aws cloudfront update-distribution --id distribution_ID --cli-input-yaml file://dist-config.yaml
新しいディストリビューションにキャッシュポリシーをアタッチするには (入力ファイルを含む CLI)
  1. 次のコマンドを使用して、distribution.yaml コマンドのすべての入力パラメータを含む create-distribution という名前のファイルを作成します。

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

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

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

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

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

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

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

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

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

キャッシュポリシーについて

キャッシュポリシーを使用して、キャッシュキーに含まれる値 (URL クエリ文字列、HTTP ヘッダー、Cookie) を制御することで、キャッシュヒット率を向上させることができます。 CloudFront には、一般的なユースケース用に、 管理ポリシー と呼ばれる事前定義されたキャッシュポリシーがいくつか用意されています。これらのマネージドポリシーを使用することも、ユーザーのニーズ別に独自のキャッシュポリシーを作成することもできます。マネージドポリシーの詳細については、「管理キャッシュポリシーの使用」を参照してください。

キャッシュポリシーには以下の設定が含まれます。設定は、ポリシー情報Time to live (TTL) 設定、およびキャッシュキー設定に分類されます。

ポリシー情報

名前

キャッシュポリシーを特定する名前。コンソールでは、名前を使用して、キャッシュポリシーをキャッシュ動作にアタッチします。

説明

キャッシュポリシーを説明するコメント。これはオプションですが、キャッシュポリシーの目的を特定するのに役立ちます。

Time to live (TTL) 設定

有効期限 (TTL) 設定は、 Cache-Controlおよび HTTP Expires ヘッダー (オリジンレスポンスにある場合) と連携して、 CloudFront キャッシュ内のオブジェクトが有効である期間を決定します。

最小 TTL

がオリジンをチェックしてオブジェクトが更新されたかどうかを確認するまでに、オブジェクトを CloudFront キャッシュに保持する最小時間を秒単位で CloudFront 指定します。詳細については、「コンテンツがキャッシュに保持される期間 (有効期限) の管理」を参照してください。

最大 TTL

がオリジン CloudFront をチェックしてオブジェクトが更新されたかどうかを確認するまでに、そのオブジェクトがキャッシュに CloudFront保持される秒単位の最大時間。 は、オリジンがオブジェクトで Cache-Control または Expiresヘッダーを送信する場合にのみ、この設定 CloudFront を使用します。詳細については、「コンテンツがキャッシュに保持される期間 (有効期限) の管理」を参照してください。

デフォルト TTL

がオリジン CloudFront をチェックしてオブジェクトが更新されたかどうかを確認する前に、オブジェクトを CloudFront キャッシュに保持する秒単位のデフォルトの時間。 は、オリジンがオブジェクトで Cache-Controlまたは Expiresヘッダーを送信しない場合にのみ、 CloudFront この設定の値をオブジェクトの TTL として使用します。詳細については、「コンテンツがキャッシュに保持される期間 (有効期限) の管理」を参照してください。

注記

最小 TTL最大 TTL 、およびデフォルト TTL 設定がすべて 0 に設定されている場合、 CloudFront キャッシュは無効になります。

キャッシュキー設定

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

キャッシュキーには次のような設定があります。

ヘッダー

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

  • [None (なし)] - ビューワーリクエストの HTTP ヘッダーはキャッシュキーに含まれず、オリジンリクエストに自動的に含まれません

  • [次のヘッダーを含める] - ビューワーリクエストのどの HTTP ヘッダーをキャッシュキーに含め、オリジンリクエストに自動的に含めるかを指定します。

[次のヘッダーを含める] 設定を使用する場合、HTTP ヘッダーは値ではなく名前で指定します。たとえば、次の HTTP ヘッダーを考えてみます。

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

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

によって生成された特定のヘッダー CloudFront をキャッシュキーに含めることもできます。詳細については、「 CloudFront リクエストヘッダーの追加」を参照してください。

Cookie

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

  • [None (なし)] - ビューワーリクエストの Cookie はキャッシュキーに含まれず、オリジンリクエストに自動的に含まれません

  • [All (すべて)] - ビューワーリクエストのすべての Cookie は、キャッシュキーに含まれ、オリジンリクエストに自動的に含まれます。

  • [指定した Cookie を含める] - ビューワーリクエストのどの Cookie をキャッシュキーに含め、オリジンリクエストに自動的に含めるかを指定します。

  • [次を除くすべての Cookie を含める] - ビューワーリクエストのどの Cookie をキャッシュキーに含めず、オリジンリクエストに自動的に含めないかを指定します。指定した Cookie 以外の他のすべての Cookie は、キャッシュキーに含まれ、自動的にオリジンリクエストに含まれます。

[指定した Cookie を含める] または [次を除くすべての Cookie を含める] 設定を使用する場合、Cookie は値ではなく名前で指定します。たとえば、次の Cookie ヘッダーを考えてみます。

Cookie: session_ID=abcd1234

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

クエリ文字列

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

  • [None (なし)] - ビューワーリクエストのクエリ文字列はキャッシュキーに含まれず、オリジンリクエストに自動的に含まれません

  • [All (すべて)] - ビューワーリクエストのすべてのクエリ文字列は、キャッシュキーに含まれ、オリジンリクエストにも自動的に含まれます。

  • [指定したクエリ文字列を含める] - ビューワーリクエストのどのクエリ文字列をキャッシュキーに含め、オリジンリクエストに自動的に含めるかを指定します。

  • [次を除くすべてのクエリ文字列を含める] - ビューワーリクエストのどのクエリ文字列をキャッシュキーに含めず、オリジンリクエストに自動的に含めないかを指定します。指定したクエリ文字列以外の他のすべてのクエリ文字列は、キャッシュキーに含まれ、自動的にオリジンリクエストに含まれます。

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

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

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

圧縮のサポート

これらの設定により CloudFront 、ビューワーが Gzip または Brotli 圧縮形式をサポートしている場合、 は Gzip または Brotli 圧縮形式で圧縮されたオブジェクトをリクエストおよびキャッシュできます。これらの設定により、CloudFront 圧縮も機能します。ビューワーは Accept-Encoding HTTP ヘッダーを使用して、これらの圧縮形式のサポートの可否を示します。

注記

ウェブブラウザ Chrome および Firefox では、HTTPS を使用してリクエストを送信する場合のみ、Brotli 圧縮がサポートされます。これらのブラウザでは、HTTP リクエストで Brotli がサポートされません。

次のいずれかに該当する場合は、これらの設定を有効にします。

  • ビューワーによってサポートされている場合にオリジンが Gzip 圧縮オブジェクトを返す (リクエストには、HTTPヘッダー Accept-Encoding と値 gzip が含まれます)。この場合、Gzip 対応設定を使用します ( CloudFront API、 AWS SDKs、、AWS CLIまたは trueでは EnableAcceptEncodingGzipに設定しますAWS CloudFormation)。

  • ビューワーによってサポートされている場合にオリジンが Brotli 圧縮オブジェクトを返す (リクエストには、HTTPヘッダー Accept-Encoding と値 br が含まれます)。この場合、Brotli 対応設定を使用します ( CloudFront API、 AWS SDKs、、AWS CLIまたは trueでは EnableAcceptEncodingBrotliに設定しますAWS CloudFormation)。

  • このキャッシュポリシーがアタッチされているキャッシュ動作は、CloudFront圧縮 で設定されます。この場合、Gzip または Brotli のいずれか、またはその両方に対してキャッシュを有効にできます。 CloudFront 圧縮が有効になっている場合、両方の形式でキャッシュを有効にすると、インターネットへのデータ転送コストを削減できます。

注記

これらの圧縮形式のいずれかまたは両方でキャッシュを有効にする場合は、同じキャッシュ動作に関連付けられたオリジンリクエストポリシーAccept-Encodingヘッダーを含めないでください。 CloudFront は、これらの形式のいずれかでキャッシュが有効になっている場合、常にこのヘッダーをオリジンリクエストに含めます。そのため、オリジンリクエストポリシーAccept-Encodingに を含めても効果はありません。

オリジンサーバーが Gzip または Brotli 圧縮オブジェクトを返さない場合、またはキャッシュ動作が CloudFront 圧縮で設定されていない場合は、圧縮オブジェクトのキャッシュを有効にしないでください。有効にすると、キャッシュヒット率が低下する可能性があります。

次に、これらの設定が CloudFront ディストリビューションにどのように影響するかを説明します。次のシナリオはすべて、ビューワーリクエストに Accept-Encoding ヘッダーが含まれていることを前提としています。ビューワーリクエストに Accept-Encodingヘッダーが含まれていない場合、このヘッダーをキャッシュキーに含め CloudFront ず、対応するオリジンリクエストに含めません。

圧縮されたオブジェクトのキャッシュが両方の圧縮形式に対応している場合

ビューワーが Gzip と Brotli の両方をサポートしている場合、つまり gzipと の両方のbr値がビューワーリクエストの Accept-Encodingヘッダーにある場合、 CloudFront は次の操作を行います。

  • ヘッダーを Accept-Encoding: br,gzip の形式に正規化し、正規化されたヘッダーをキャッシュキーに含めます。キャッシュキーには、ビューワーから送信された Accept-Encoding ヘッダーに存在していた他の値は含まれません。

  • エッジロケーションのキャッシュに、リクエストに一致し有効期限が切れていない Brotli または Gzip 圧縮オブジェクトがある場合、エッジロケーションはそのオブジェクトをビューワーに返します。

  • エッジロケーションのキャッシュに、リクエストに一致して有効期限が切れていない Brotli または Gzip 圧縮オブジェクトがない場合、 は対応するオリジンリクエストに正規化されたヘッダー (Accept-Encoding: br,gzip) CloudFront を含めます。オリジンリクエストには、ビューワーから送信された Accept-Encoding ヘッダーに存在していた他の値は含まれません。

ビューワーが一方の圧縮形式をサポートしているが、もう一方の圧縮形式をサポートしていない場合、例えば、ビューワーリクエストの Accept-Encodingヘッダーのgzip値が であるが brではない場合、次のCloudFront 操作を行います。

  • ヘッダーを Accept-Encoding: gzip の形式に正規化し、正規化されたヘッダーをキャッシュキーに含めます。キャッシュキーには、ビューワーから送信された Accept-Encoding ヘッダーに存在していた他の値は含まれません。

  • エッジロケーションのキャッシュに、リクエストに一致し有効期限が切れていない Gzip 圧縮オブジェクトがある場合、エッジロケーションはそのオブジェクトをビューワーに返します。

  • エッジロケーションのキャッシュに、リクエストに一致して有効期限が切れていない Gzip 圧縮オブジェクトがない場合、 は対応するオリジンリクエストに正規化されたヘッダー (Accept-Encoding: gzip) CloudFront を含めます。オリジンリクエストには、ビューワーから送信された Accept-Encoding ヘッダーに存在していた他の値は含まれません。

ビューワーが Brotli をサポートしているが Gzip をサポートしていない場合 CloudFront の動作を理解するには、前の例の 2 つの圧縮形式を互いに置き換えます。

ビューワーが Brotli または Gzip をサポートしていない場合、つまりビューワーリクエストの Accept-Encodingヘッダーに値gzipとして brまたは が含まれていない場合CloudFront:

  • キャッシュキーに Accept-Encoding ヘッダーを含めません。

  • 対応するオリジンリクエストに Accept-Encoding: identity を含めます。オリジンリクエストには、ビューワーから送信された Accept-Encoding ヘッダーに存在していた他の値は含まれません。

圧縮されたオブジェクトのキャッシュが 1 つの圧縮形式に対して有効で、もう 1 つの圧縮形式に対して有効でない場合

ビューワーがキャッシュが有効になっている形式をサポートしている場合。例えば、圧縮オブジェクトのキャッシュが Gzip に対して有効になっており、ビューワーが Gzip をサポートしている場合 (gzip はビューワーリクエストの Accept-Encodingヘッダーの値の 1 つ) は、次のCloudFront 操作を行います。

  • ヘッダーを Accept-Encoding: gzip の形式に正規化し、正規化されたヘッダーをキャッシュキーに含めます。

  • エッジロケーションのキャッシュに、リクエストに一致し有効期限が切れていない Gzip 圧縮オブジェクトがある場合、エッジロケーションはそのオブジェクトをビューワーに返します。

  • エッジロケーションのキャッシュに、リクエストに一致して有効期限が切れていない Gzip 圧縮オブジェクトがない場合、 は対応するオリジンリクエストに正規化されたヘッダー (Accept-Encoding: gzip) CloudFront を含めます。オリジンリクエストには、ビューワーから送信された Accept-Encoding ヘッダーに存在していた他の値は含まれません。

この動作は、ビューワーが Gzip と Brotli の両方をサポートしている場合と同じです (ビューワーリクエストの Accept-Encoding ヘッダーには gzip br の両方の値が含まれます)。このシナリオでは、圧縮オブジェクトのキャッシュが Brotli に対応していないためです。

圧縮オブジェクトのキャッシュが Brotli に対して有効で、Gzip に対して有効になっていない場合 CloudFront の動作を理解するには、前の例で 2 つの圧縮形式を相互に置き換えます。

ビューワーがキャッシュが有効になっている圧縮形式をサポートしていない場合 (ビューワーリクエストの Accept-Encoding ヘッダーにその形式の値が含まれていない場合) CloudFront:

  • キャッシュキーに Accept-Encoding ヘッダーを含めません。

  • 対応するオリジンリクエストに Accept-Encoding: identity を含めます。オリジンリクエストには、ビューワーから送信された Accept-Encoding ヘッダーに存在していた他の値は含まれません。

圧縮されたオブジェクトのキャッシュが両方の圧縮形式に対応していない場合

圧縮されたオブジェクトのキャッシュが両方の圧縮形式で無効になっている場合、 はビューワーリクエストの他の HTTP Accept-Encodingヘッダーと同じようにヘッダーを CloudFront 扱います。デフォルトでは、キャッシュキーには含まれず、オリジンリクエストにも含まれません。他の HTTP ヘッダーと同一のキャッシュポリシーまたはオリジンリクエストポリシーのヘッダーリストに含めることができます。