リクエストトリガーでの HTTP レスポンスの生成 - Amazon CloudFront

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

リクエストトリガーでの HTTP レスポンスの生成

がリクエスト CloudFront を受信すると、Lambda 関数を使用して、レスポンスをオリジンに転送せずにビューワーに直接 CloudFront 返す HTTP レスポンスを生成できます。HTTP レスポンスを生成することで、オリジンの負荷が軽減され、通常はビューワーのレイテンシーも短縮されます。

以下に示しているのは、HTTP レスポンスを生成する一般的なシナリオです。

  • 小さいウェブページをビューワーに返す。

  • HTTP 301 または 302 ステータスコードを返して、ユーザーを別のウェブページにリダイレクトする。

  • ユーザーが認証されない場合に HTTP 401 ステータスコードをビューワーに返す。

Lambda@Edge 関数は、次の CloudFront イベントが発生したときに HTTP レスポンスを生成できます。

ビューワーリクエストイベント

関数がビューワーリクエストイベントによってトリガーされると、 はレスポンスをビューワーに CloudFront 返し、キャッシュしません。

オリジンリクエストイベント

関数がオリジンリクエストイベントによってトリガーされると、 は、以前に関数によって生成されたレスポンスについてエッジキャッシュ CloudFront をチェックします。

  • レスポンスがキャッシュにある場合、関数は実行されず、キャッシュされたレスポンスがビューワーに CloudFront 返されます。

  • レスポンスがキャッシュにない場合、関数が実行され、レスポンスがビューワーに CloudFront 返され、キャッシュされます。

HTTP レスポンスを生成するためのサンプルコードを見るには、「Lambda@Edge 関数の例」を参照してください。レスポンストリガーの HTTP レスポンスを置き換えることもできます。詳細については、「オリジンレスポンストリガーでの HTTP レスポンスの更新」を参照してください。

プログラミングモデル

このセクションでは、Lambda@Edge を使用して HTTP レスポンスを生成するためのプログラミングモデルについて説明します。

レスポンスオブジェクト

result メソッドの callback パラメータとして返すレスポンスには、以下の構造が必要です (status フィールドのみが必須)。

const response = { body: 'content', bodyEncoding: 'text' | 'base64', headers: { 'header name in lowercase': [{ key: 'header name in standard case', value: 'header value' }], ... }, status: 'HTTP status code (string)', statusDescription: 'status description' };

レスポンスオブジェクトには、以下の値が含まれる場合があります。

body

生成されたレスポンスで返 CloudFront す本文がある場合。

bodyEncoding

body で指定した値のエンコード。有効なエンコードは textbase64 のみです。をresponseオブジェクトbodyに含めても を省略するとbodyEncoding、 は本文をテキストとして CloudFront 扱います。

bodyEncoding base64 として を指定しても本文が有効な base64 ではない場合、 はエラー CloudFront を返します。

headers

生成されたレスポンスで CloudFront 返すヘッダー。次の点に注意してください。

  • headers オブジェクトのキーは標準の HTTP ヘッダー名を小文字にしたものです。小文字のキーを使用して、大文字と小文字を区別せずにヘッダー値にアクセスできます。

  • 各ヘッダー (headers["accept"]headers["host"] など) はキーと値のペアの配列です。返されたヘッダーの配列には、生成されたレスポンスの値ごとに 1 つのキーと値のペアが含まれます。

  • key (省略可能) は、HTTP リクエストに表示されるヘッダーの大文字と小文字を区別する名前です (accepthost など)。

  • ヘッダー値として value を指定します。

  • キーと値のペアのヘッダーキー部分を含めない場合、Lambda@Edge は指定したヘッダー名を使用してヘッダーキーを自動的に挿入します。ヘッダー名をどのようにフォーマットしたかにかかわらず、挿入されるヘッダーキーは、各パートの先頭の大文字がハイフン (-) で区切られて自動的にフォーマットされます。

    たとえば、ヘッダーキー 'content-type': [{ value: 'text/html;charset=UTF-8' }] なしで次のようなヘッダーを追加できます。

    この例で、Lambda@Edge はヘッダーキー Content-Type を作成します。

ヘッダー使用の制限の詳細については、「エッジ関数に対する制限」を参照してください。

status

HTTP ステータスコード 。ステータスコードを文字列として指定します。 は、提供された次のステータスコード CloudFront を使用します。

status 値が 200~599 でない場合、 はビューワーにエラー CloudFront を返します。

statusDescription

HTTP ステータスコードに付随して、レスポンスで CloudFront 返す説明。標準の説明 (HTTP ステータスコード 200 の場合の OK など) を使用する必要はありません。

エラー

生成された HTTP レスポンスで発生する可能性があるエラーを以下に示します。

レスポンスに本文が含まれ、ステータスに 204 (No Content) が指定されている

ビューワーリクエストによって関数がトリガーされると、 は、HTTP 502 ステータスコード (Bad Gateway) の両方が true である場合にビューワーに CloudFront HTTP 502 ステータスコードを返します。

  • status の値が 204 (No Content) である。

  • このレスポンスに body の値が含まれている。

これは、HTTP 204 レスポンスにはメッセージ本文を含める必要がないことを述べている RFC 2616 のオプションの制限を Lambda@Edge が適用しているためです。

生成されるレスポンスのサイズ制限を超えている

Lambda 関数によって生成されるレスポンスの最大サイズは、関数をトリガーするイベントによって異なります。

  • ビューワーリクエストイベント - 40 KB

  • オリジンリクエストイベント - 1 MB

レスポンスが許容サイズより大きい場合、 は HTTP 502 ステータスコード (Bad Gateway) をビューワーに CloudFront 返します。

必須フィールド

status フィールドは必須です。

その他のすべてのフィールドはオプションです。