

# Lambda@Edge に対する制限
<a name="lambda-at-edge-function-restrictions"></a>

以下の制限は、Lambda@Edge のみに適用されます。

**Contents**
+ [

## DNS 解決
](#lambda-at-edge-restrictions-dns)
+ [

## HTTP ステータスコード
](#lambda-at-edge-restrictions-status-codes)
+ [

## Lambda 関数のバージョン
](#lambda-at-edge-restrictions-version)
+ [

## Lambda リージョン
](#lambda-at-edge-restrictions-region)
+ [

## Lambda のロール許可
](#lambda-at-edge-restrictions-role-permissions)
+ [

## Lambda の機能
](#lambda-at-edge-restrictions-features)
+ [

## ランタイムのサポート
](#lambda-at-edge-restrictions-runtime)
+ [

## CloudFront ヘッダー
](#lambda-at-edge-restrictions-cloudfront-headers)
+ [

## [本文を含める] オプションを使用する場合のリクエスト本文に対する制限
](#lambda-at-edge-restrictions-request-body)
+ [

## レスポンスタイムアウトとキープアライブタイムアウト (カスタムオリジンのみ)
](#timeout-for-lambda-edge-functions)

 クォータの詳細については、「」を参照してください[Lambda@Edge のクォータ](cloudfront-limits.md#limits-lambda-at-edge)

## DNS 解決
<a name="lambda-at-edge-restrictions-dns"></a>

CloudFront は、オリジンドメイン名で DNS 解決を実行してから、オリジンリクエストの Lambda@Edge 関数を実行します。**ドメインの DNS サービスで問題が発生しているために、CloudFront がドメイン名の解決によって IP アドレスを取得できない場合、Lambda@Edge 関数は呼び出されません。CloudFront は、[HTTP 502 ステータスコード (不正なゲートウェイ)](http-502-bad-gateway.md) をクライアントに返します。詳細については、「[DNS エラー (`NonS3OriginDnsError`)](http-502-bad-gateway.md#http-502-dns-error)」を参照してください。

関数ロジックがオリジンのドメイン名を変更すると、CloudFront は関数の実行完了後に、更新されたドメイン名に対して別の DNS 解決を実行します。

DNS フェイルオーバーの管理の詳細については、「Amazon Route 53 デベロッパーガイド」の「[DNS フェイルオーバーの設定](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/dns-failover-configuring.html)」を参照してください。**

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

ビューワーレスポンスイベントの Lambda@Edge 関数は、レスポンスがオリジンまたは CloudFront キャッシュからのものであるかどうかにかかわらず、レスポンスの HTTP ステータスコードを変更できません。

## Lambda 関数のバージョン
<a name="lambda-at-edge-restrictions-version"></a>

`$LATEST` やエイリアスではなく、Lambda 関数の番号付きバージョンを使用する必要があります。

## Lambda リージョン
<a name="lambda-at-edge-restrictions-region"></a>

Lambda 関数は、米国東部 (バージニア北部) リージョンにある必要があります。

## Lambda のロール許可
<a name="lambda-at-edge-restrictions-role-permissions"></a>

Lambda 関数に関連付けられている IAM 実行ロールは、サービスプリンシパル `lambda.amazonaws.com` と `edgelambda.amazonaws.com` によるそのロールの引き受けを許可する必要があります。詳細については、「[Lambda@Edge 用の IAM アクセス許可とロールのセットアップ](lambda-edge-permissions.md)」を参照してください。

## Lambda の機能
<a name="lambda-at-edge-restrictions-features"></a>

以下の Lambda 機能は、Lambda@Edge でサポートされていません。
+ **[自動]** (デフォルト) 以外の [Lambda ランタイム管理設定](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-update.html#runtime-management-controls)
+ VPC 内のリソースにアクセスするための Lambda 関数の設定
+ [Lambda 関数のデッドレターキュー](https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#dlq)
+ [Lambda 環境変数](https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html) (自動的にサポートされる予約環境変数は除く)
+ [レイヤーによる AWS Lambda 依存関係の管理](https://docs.aws.amazon.com/lambda/latest/dg/chapter-layers.html)を使用する Lambda 関数
+ [ の使用AWS X-Ray](https://docs.aws.amazon.com/lambda/latest/dg/lambda-x-ray.html)
+ Lambda プロビジョニング済み同時実行
**注記**  
Lambda@Edge 関数には、Lambda 関数と同じ[リージョンの同時実行](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html)機能があります。詳細については、「[Lambda@Edge のクォータ](cloudfront-limits.md#limits-lambda-at-edge)」を参照してください。
+ [コンテナイメージを使用した Lambda 関数の作成](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html)
+ [arm64 アーキテクチャを使用する Lambda 関数](https://docs.aws.amazon.com/lambda/latest/dg/foundation-arch.html)
+ エフェメラルストレージが 512 MB を超える Lambda 関数
+ [カスタマーマネージドキーを使用した .zip デプロイパッケージの暗号化](https://docs.aws.amazon.com/lambda/latest/dg/encrypt-zip-package.html)

## ランタイムのサポート
<a name="lambda-at-edge-restrictions-runtime"></a>

Lambda@Edge は、最新バージョンの Node.js および Python ランタイムをサポートしています。サポートされているバージョンとその将来の廃止日のリストについては、「*AWS Lambda デベロッパーガイド*」の「[サポートされているランタイム](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html#runtimes-supported)」を参照してください。

**ヒント**  
ベストプラクティスとして、提供されている最新バージョンのランタイムでパフォーマンスを改善し、新しい機能を使用してください。
廃止されたバージョンの Node.js で関数を作成または更新することはできません。これらのバージョンの既存の関数は、CloudFront ディストリビューションにのみ関連付けることができます。これらのバージョンに該当する関数のうち、ディストリビューションに関連付けられているものは、引き続き実行されます。ただし、関数を新しいバージョンの Node.js に移行することをお勧めします。詳細については、「*AWS Lambda デベロッパーガイド*」の「[ランタイムの非推奨化に関するポリシー](https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html)」と、GitHub の [Node.js リリーススケジュール](https://github.com/nodejs/Release#release-schedule)を参照してください。

## CloudFront ヘッダー
<a name="lambda-at-edge-restrictions-cloudfront-headers"></a>

Lambda@Edge 関数は、[CloudFront のリクエストヘッダーを追加する](adding-cloudfront-headers.md) にリストされている任意の CloudFront ヘッダーの読み取り、編集、削除、または追加を行うことができます。

**注意事項**  
これらのヘッダーを CloudFront で追加する場合は、[キャッシュポリシー](controlling-the-cache-key.md)または[オリジンリクエストポリシー](controlling-origin-requests.md)を使用してヘッダーを追加するように CloudFront を設定する必要があります。
CloudFront は、ビューワーリクエストイベントの後にヘッダーを追加します。つまり、ビューワーリクエストの Lambda@Edge 関数ではヘッダーを使用できません。**ヘッダーは、オリジンリクエストとオリジンレスポンスの Lambda@Edge 関数でのみ使用できます。
ビューワーリクエストにこれらの名前を持つヘッダーが含まれており、[キャッシュポリシー](controlling-the-cache-key.md)または[オリジンリクエストポリシー](controlling-origin-requests.md)を使用してこれらのヘッダーを追加するように CloudFront を設定した場合は、CloudFront がビューワーリクエストにあったヘッダー値を上書きします。ビューワー向けの関数はビューワーリクエストからのヘッダー値を認識し、オリジン向けの関数は CloudFront が追加したヘッダー値を認識します。
ビューワーリクエスト関数で `CloudFront-Viewer-Country` ヘッダーを追加すると、検証に失敗し、CloudFront は HTTP ステータスコード 502 (不正なゲートウェイ) をビューワーに返します。

## [本文を含める] オプションを使用する場合のリクエスト本文に対する制限
<a name="lambda-at-edge-restrictions-request-body"></a>

**[本文を含める]** オプションを選択してリクエスト本文を Lambda@Edge 関数に公開する場合は、公開または置換する本文部分に以下の情報およびサイズ制限が適用されます。
+ CloudFront は常に、リクエスト本文を base64 でエンコードしてから、それを Lambda@Edge に公開します。
+ リクエスト本文が大きい場合、CloudFront は、本文を以下のように切り詰めてから Lambda@Edge に公開します。
  + ビューワーリクエストでは、本文が 40 KB で切り捨てられます。
  + オリジンリクエストでは、本文が 1 MB で切り捨てられます。
+ 読み取り専用としてリクエスト本文にアクセスする場合、CloudFront は元の完全なリクエスト本文をオリジンに送信します。
+ Lambda@Edge 関数がリクエスト本文を置き換える場合、関数が返す本文には、以下のサイズ制限が適用されます。
  + Lambda@Edge 関数が本文をプレーンテキストとして返す場合:
    + ビューワーリクエストイベントでは、本文が 40 KB に制限されます。
    + オリジンリクエストイベントでは、本文が 1 MB に制限されます。
  + Lambda@Edge 関数が本文を base64 でエンコードされたテキストとして返す場合:
    + ビューワーリクエストイベントでは、本文が 53.2 KB に制限されます。
    + オリジンリクエストイベントでは、本文が 1.33 MB に制限されます。

**注記**  
Lambda@Edge 関数がこれらの制限を超える本文を返した場合、リクエストは失敗し、HTTP 502 ステータスコード ([Lambda 検証エラー](http-502-bad-gateway.md#http-502-lambda-validation-error)) が返されます。本文がこれらの制限を超えないように Lambda@Edge 関数を更新することをお勧めします。

## レスポンスタイムアウトとキープアライブタイムアウト (カスタムオリジンのみ)
<a name="timeout-for-lambda-edge-functions"></a>

Lambda@Edge 関数を使用してディストリビューションオリジンのレスポンスタイムアウトまたはキープアライブタイムアウトを設定している場合は、オリジンがサポートできる値を指定していることを確認します。詳細については、「[レスポンスとキープアライブのタイムアウトクォータ](DownloadDistValuesOrigin.md#response-keep-alive-timeout-quota)」を参照してください。