Lambda@Edge に対する制限 - Amazon CloudFront

Lambda@Edge に対する制限

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

クォータの詳細については、「Lambda@Edge のクォータ」を参照してください。

DNS 解決

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

DNS フェイルオーバーの管理の詳細については、「Amazon Route 53 デベロッパーガイド」の「DNS フェイルオーバーの設定」を参照してください。

HTTP ステータスコード

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

Lambda 関数のバージョン

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

Lambda リージョン

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

Lambda のロール許可

Lambda 関数に関連付けられている IAM 実行ロールは、サービスプリンシパル lambda.amazonaws.comedgelambda.amazonaws.com によるそのロールの引き受けを許可する必要があります。詳細については、「Lambda@Edge 用の IAM アクセス権限とロールの設定」を参照してください。

Lambda の機能

以下の Lambda 機能は、Lambda@Edge でサポートされていません。

ランタイムのサポート

Lambda@Edge は、以下のランタイムで Lambda 関数をサポートします。

Node.js

Python

  • Node.js 20

  • Node.js 18

  • Node.js 16¹

  • Node.js 14²

  • Node.js 12²

  • Node.js 10²

  • Node.js 8²

  • Node.js 6²

  • Python 3.12

  • 「Python 3.11」

  • 「Python 3.10」

  • Python 3.9

  • Python 3.8

  • Python 3.7

¹このバージョンの Node.js はサポートが終了し、AWS Lambda によってまもなく廃止されます。

²このバージョンの Node.js はサポートが終了し、AWS Lambda によって完全に廃止されました。

廃止されたバージョンの Node.js で関数を作成または更新することはできません。これらのバージョンの既存の関数は、CloudFront ディストリビューションにのみ関連付けることができます。これらのバージョンに該当する関数のうち、ディストリビューションに関連付けられているものは、引き続き実行されます。ただし、関数を新しいバージョンの Node.js に移行することをお勧めします。詳細については、「AWS Lambda デベロッパーガイド」の「ランタイムの非推奨化に関するポリシー」と、GitHub の Node.js リリーススケジュールを参照してください。

ヒント

ベストプラクティスとして、提供されている最新バージョンのランタイムでパフォーマンスを改善し、新しい機能を使用してください。

CloudFront ヘッダー

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

メモ
  • これらのヘッダーを CloudFront で追加する場合は、キャッシュポリシーまたはオリジンリクエストポリシーを使用してヘッダーを追加するように CloudFront を設定する必要があります。

  • CloudFront は、ビューワーリクエストイベントの後にヘッダーを追加します。つまり、ビューワーリクエストの Lambda@Edge 関数ではヘッダーを使用できません。ヘッダーは、オリジンリクエストとオリジンレスポンスの Lambda@Edge 関数でのみ使用できます。

  • ビューワーリクエストにこれらの名前を持つヘッダーが含まれており、キャッシュポリシーまたはオリジンリクエストポリシーを使用してこれらのヘッダーを追加するように CloudFront を設定した場合は、CloudFront がビューワーリクエストにあったヘッダー値を上書きします。ビューワー向けの関数はビューワーリクエストからのヘッダー値を認識し、オリジン向けの関数は CloudFront が追加したヘッダー値を認識します。

  • ビューワーリクエスト関数で CloudFront-Viewer-Country ヘッダーを追加すると、検証に失敗し、CloudFront は HTTP ステータスコード 502 (不正なゲートウェイ) をビューワーに返します。

Include Body オプションがあるリクエストボディに対する制限

Lambda@Edge 関数にリクエストボディを公開するために [Include Body] オプションを選択する場合は、公開または置き換えられたボディの一部に以下の情報クォータとサイズクォータが適用されます。

  • 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 で切り捨てられます。