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

Lambda@Edge に対する制限

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

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

DNS 解決

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

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 (不正なゲートウェイ) をビューワーに返します。

[本文を含める] オプションを使用する場合のリクエスト本文に対する制限

[本文を含める] オプションを選択してリクエスト本文を 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 検証エラー) が返されます。本文がこれらの制限を超えないように Lambda@Edge 関数を更新することをお勧めします。

レスポンスタイムアウトとキープアライブタイムアウト (カスタムオリジンのみ)

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