すべてのエッジ機能に対する制限 - Amazon CloudFront

すべてのエッジ機能に対する制限

以下の制限は、CloudFront Functions と Lambda@Edge 両方の、すべてのエッジ関数に適用されます。

AWS アカウント の所有権

エッジ関数を CloudFront ディストリビューションに関連付けるには、関数とディストリビューションが同じ AWS アカウント によって所有されている必要があります。

CloudFront Functions と Lambda@Edge との組み合わせ

所定のキャッシュ動作については、以下の制限が適用されます。

  • イベントタイプ (ビューワーリクエスト、オリジンリクエスト、オリジンレスポンス、ビューワーレスポンス) はそれぞれ、エッジ関数の関連付けを 1 つしか持てません。

  • ビューワーイベント (ビューワーリクエストとビューワーレスポンス) で CloudFront Functions と Lambda@Edge を組み合わせることはできません。

上記以外のすべてのエッジ関数の組み合わせが許可されます。以下の表は、許可される組み合わせの説明です。

CloudFront Functions

ビューワーリクエスト

ビューワーレスポンス

Lambda@Edge

ビューワーリクエスト

許可されていません

許可されていません

オリジンリクエスト

許可

許可

オリジンレスポンス

許可

許可

ビューワーレスポンス

許可されていません

許可されていません

HTTP ステータスコード

オリジンが 400 以上の HTTP ステータスコードを返す場合、CloudFront はビューワーレスポンスイベントのエッジ関数を呼び出しません。

オリジンレスポンスイベントの Lambda@Edge 関数は、オリジンが 400 以上の HTTP ステータスコードを返す場合を含め、すべてのオリジンレスポンスに対して呼び出されます。詳細については、「オリジンレスポンストリガーでの HTTP レスポンスを更新する」を参照してください。

HTTP ヘッダー

特定の HTTP ヘッダーは許可されていません。これは、これらのヘッダーがエッジ関数に公開されておらず、関数がそれらを追加できないことを意味します。他のヘッダーは読み取り専用であるため、関数で読み取ることはできますが、追加や変更はできません。

許可されていないヘッダー

以下の HTTP ヘッダーはエッジ関数に公開されておらず、関数はこれらを追加できません。関数がこれらのヘッダーのいずれかを追加すると、CloudFront 検証が失敗し、CloudFront がビューワーに HTTP ステータスコード 502 (不正なゲートウェイ) を返します。

  • Connection

  • Expect

  • Keep-Alive

  • Proxy-Authenticate

  • Proxy-Authorization

  • Proxy-Connection

  • Trailer

  • Upgrade

  • X-Accel-Buffering

  • X-Accel-Charset

  • X-Accel-Limit-Rate

  • X-Accel-Redirect

  • X-Amz-Cf-*

  • X-Amzn-Auth

  • X-Amzn-Cf-Billing

  • X-Amzn-Cf-Id

  • X-Amzn-Cf-Xff

  • X-Amzn-Errortype

  • X-Amzn-Fle-Profile

  • X-Amzn-Header-Count

  • X-Amzn-Header-Order

  • X-Amzn-Lambda-Integration-Tag

  • X-Amzn-RequestId

  • X-Cache

  • X-Edge-*

  • X-Forwarded-Proto

  • X-Real-IP

読み取り専用ヘッダー

以下のヘッダーは読み取り専用です。関数はこれらを読み取って関数ロジックへの入力として使用できますが、値を変更することはできません。関数が読み取り専用ヘッダーを追加または編集すると、リクエストの CloudFront 検証が失敗し、CloudFront がビューワーに HTTP ステータスコード 502 (不正なゲートウェイ) を返します。

ビューワーリクエストイベントの読み取り専用ヘッダー

以下のヘッダーは、ビューワーリクエストイベントでは読み取り専用になります。

  • Content-Length

  • Host

  • Transfer-Encoding

  • Via

オリジンリクエストイベントの読み取り専用ヘッダー (Lambda@Edge 限定)

以下のヘッダーは、Lambda@Edge にしかないオリジンリクエストイベントでは読み取り専用になります。

  • Accept-Encoding

  • Content-Length

  • If-Modified-Since

  • If-None-Match

  • If-Range

  • If-Unmodified-Since

  • Transfer-Encoding

  • Via

オリジンレスポンスイベントの読み取り専用ヘッダー (Lambda@Edge 限定)

以下のヘッダーは、Lambda@Edge にしかないオリジンレスポンスイベントでは読み取り専用になります。

  • Transfer-Encoding

  • Via

ビューワーレスポンスイベントの読み取り専用ヘッダー

以下のヘッダーは、CloudFront Functions と Lambda@Edge の両方のビューワーレスポンスイベントでは読み取り専用になります。

  • Warning

  • Via

以下のヘッダーは、Lambda@Edge のビューワーレスポンスイベントでは読み取り専用になります。

  • Content-Length

  • Content-Encoding

  • Transfer-Encoding

クエリ文字列

以下の制限は、リクエスト URI 内のクエリ文字列を読み取る、更新する、または作成する関数に適用されます。

  • (Lambda@Edge 限定) オリジンリクエストまたはオリジンレスポンス関数のクエリ文字列にアクセスするには、キャッシュポリシーまたはオリジンリクエストポリシーが [Query strings] (クエリ文字列) に対して [All] (すべて) に設定されている必要があります。

  • 関数は、ビューワーリクエストイベントとオリジンリクエストイベントのクエリ文字列を作成または更新できます (オリジンリクエストイベントがあるのは Lambda@Edge だけです)。

  • 関数は、オリジンレスポンスイベントとビューワーレスポンスイベントのクエリ文字列を読み取ることができますが、それらを作成または更新することはできません (オリジンレスポンスイベントがあるのは Lambda@Edge だけです)。

  • 関数がクエリ文字列を作成または更新する場合は、以下の制限が適用されます。

    • クエリ文字列に、スペース、制御文字、またはフラグメント識別子 (#) を含めることはできません。

    • クエリ文字列を含めた URI の合計サイズは、8,192 文字未満にする必要があります。

    • URI およびクエリ文字列には、パーセントエンコーディングを使用することをお勧めします。詳細については、「URI とクエリ文字列のエンコーディング」を参照してください。

[URI]

関数でリクエストの URI を変更しても、リクエストのキャッシュ動作や転送先オリジンは変わりません。

クエリ文字列を含めた URI の合計サイズは、8,192 文字未満にする必要があります。

URI とクエリ文字列のエンコーディング

エッジ関数に渡される URI とクエリ文字列値は、UTF-8 でエンコードされています。関数は、それが返す URI とクエリ文字列値に UTF-8 エンコーディングを使用する必要があります。パーセントエンコーディングには、UTF-8 エンコーディングと互換性があります。

以下のリストでは、CloudFront が URI とクエリ文字列値のエンコーディングをどのように処理するかを説明します。

  • リクエスト内の値が UTF-8 でエンコードされている場合、CloudFront はそれらの値を変更せずにそのまま関数に転送します。

  • リクエスト内の値が ISO 8859-1 でエンコードされている場合、CloudFront はそれらの値を UTF-8 エンコーディングに変換してから関数に転送します。

  • リクエスト内の値がその他の文字エンコーディングを使用してエンコードされている場合、CloudFront はそれらが ISO 8859-1 でエンコードされているとみなし、ISO 8859-1 から UTF-8 への変換を試みます。

    重要

    変換された文字は、元のリクエストの値の正しい解釈ではない可能性があります。これは、関数またはオリジンが意図しない結果を生成する原因になる場合があります。

CloudFront がオリジンに転送する URI とクエリ文字列値は、関数がそれらの値を変更するかどうかに応じて異なります。

  • 関数が URI またはクエリ文字列を変更しない場合、CloudFront はリクエストで受け取った値をオリジンに転送します。

  • 関数が URI またはクエリ文字列を変更する場合、CloudFront は UTF-8 でエンコードされた値を転送します。

Microsoft Smooth Streaming

Microsoft Smooth Streaming 形式にトランスコードしたメディアファイルのストリーミングに使用している CloudFront ディストリビューションでは、エッジ関数を使用できません。

タグ付け

エッジ関数にタグを追加することはできません。CloudFront でのタグ付けの詳細については、「ディストリビューションのタグ付け」を参照してください。