

# すべてのエッジ機能に対する制限
<a name="edge-function-restrictions-all"></a>

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

**Topics**
+ [AWS アカウント の所有権](#function-restrictions-account-ownership)
+ [CloudFront Functions と Lambda@Edge との組み合わせ](#function-restrictions-combining-functions)
+ [HTTP ステータスコード](#function-restrictions-status-codes)
+ [HTTP ヘッダー](#function-restrictions-headers)
+ [クエリ文字列](#function-restrictions-query-strings)
+ [[URI]](#function-restrictions-uri)
+ [URI、クエリ文字列、ヘッダーのエンコーディング](#function-restrictions-encoding)
+ [Microsoft Smooth Streaming](#function-restrictions-microsoft-smooth-streaming)
+ [タグ付け](#function-restrictions-tagging)

## AWS アカウント の所有権
<a name="function-restrictions-account-ownership"></a>

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

## CloudFront Functions と Lambda@Edge との組み合わせ
<a name="function-restrictions-combining-functions"></a>

所定のキャッシュ動作については、以下の制限が適用されます。
+ イベントタイプ (ビューワーリクエスト、オリジンリクエスト、オリジンレスポンス、ビューワーレスポンス) はそれぞれ、エッジ関数の関連付けを 1 つしか持てません。
+ ビューワーイベント (ビューワーリクエストとビューワーレスポンス) で CloudFront Functions と Lambda@Edge を組み合わせることはできません。

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

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/edge-function-restrictions-all.html)

## HTTP ステータスコード
<a name="function-restrictions-status-codes"></a>

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

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

## HTTP ヘッダー
<a name="function-restrictions-headers"></a>

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

**Topics**
+ [許可されていないヘッダー](#function-restrictions-disallowed-headers)
+ [読み取り専用ヘッダー](#function-restrictions-read-only-headers)

### 許可されていないヘッダー
<a name="function-restrictions-disallowed-headers"></a>

以下の 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`

### 読み取り専用ヘッダー
<a name="function-restrictions-read-only-headers"></a>

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

#### ビューワーリクエストイベントの読み取り専用ヘッダー
<a name="function-restrictions-read-only-headers-viewer-request"></a>

以下のヘッダーは、ビューワーリクエストイベントでは読み取り専用になります。
+ `Content-Length`
+ `Host`
+ `Transfer-Encoding`
+ `Via`

#### オリジンリクエストイベントの読み取り専用ヘッダー (Lambda@Edge 限定)
<a name="function-restrictions-read-only-headers-origin-request"></a>

以下のヘッダーは、Lambda@Edge にしかないオリジンリクエストイベントでは読み取り専用になります。
+ `Accept-Encoding`
+ `Content-Length`
+ `If-Modified-Since`
+ `If-None-Match`
+ `If-Range`
+ `If-Unmodified-Since`
+ `Transfer-Encoding`
+ `Via`

#### オリジンレスポンスイベントの読み取り専用ヘッダー (Lambda@Edge 限定)
<a name="function-restrictions-read-only-headers-origin-response"></a>

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

#### ビューワーレスポンスイベントの読み取り専用ヘッダー
<a name="function-restrictions-read-only-headers-viewer-response"></a>

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

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

## クエリ文字列
<a name="function-restrictions-query-strings"></a>

以下の制限は、リクエスト URI 内のクエリ文字列を読み取る、更新する、または作成する関数に適用されます。
+ (Lambda@Edge 限定) オリジンリクエストまたはオリジンレスポンス関数のクエリ文字列にアクセスするには、キャッシュポリシーまたはオリジンリクエストポリシーが [**Query strings**] (クエリ文字列) に対して [**All**] (すべて) に設定されている必要があります。
+ 関数は、ビューワーリクエストイベントとオリジンリクエストイベントのクエリ文字列を作成または更新できます (オリジンリクエストイベントがあるのは Lambda@Edge だけです)。
+ 関数は、オリジンレスポンスイベントとビューワーレスポンスイベントのクエリ文字列を読み取ることができますが、それらを作成または更新することはできません (オリジンレスポンスイベントがあるのは Lambda@Edge だけです)。
+ 関数がクエリ文字列を作成または更新する場合は、以下の制限が適用されます。
  + クエリ文字列に、スペース、制御文字、またはフラグメント識別子 (`#`) を含めることはできません。
  + クエリ文字列を含めた URI の合計サイズは、8,192 文字未満にする必要があります。
  + URI およびクエリ文字列には、パーセントエンコーディングを使用することをお勧めします。詳細については、「[URI、クエリ文字列、ヘッダーのエンコーディング](#function-restrictions-encoding)」を参照してください。

## [URI]
<a name="function-restrictions-uri"></a>

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

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

## URI、クエリ文字列、ヘッダーのエンコーディング
<a name="function-restrictions-encoding"></a>

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

以下のリストでは、CloudFront が URI、クエリ文字列、ヘッダーのエンコーディングをどのように処理するかを説明します。
+ リクエスト内の値が UTF-8 でエンコードされている場合、CloudFront はそれらの値を変更せずにそのまま関数に転送します。
+ リクエスト内の値が [ISO 8859-1 でエンコード](https://en.wikipedia.org/wiki/ISO/IEC_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
<a name="function-restrictions-microsoft-smooth-streaming"></a>

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

## タグ付け
<a name="function-restrictions-tagging"></a>

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