関数の目的を決定する - Amazon CloudFront

関数の目的を決定する

関数コードを記述する前に、関数の目的を決めます。CloudFront Functions の関数の大半は、次のいずれかを目的としています。

関数の目的にかかわらず、handler はあらゆる関数のエントリポイントです。CloudFront から関数に送られる event という単一の引数を使います。event は、HTTP リクエスト表記の JSON オブジェクトです(関数が HTTP レスポンスを変更する場合は、レスポンス)。

ビューワーリクエストイベントタイプの HTTP リクエストの変更

関数は、CloudFront がビューワー (クライアント) から受信する HTTP リクエストを変更し、変更されたリクエストを CloudFront に返して処理を続行できます。たとえば、関数コードでキャッシュキーを正規化したり、リクエストヘッダーを変更したりできます。

HTTP リクエストを変更する関数を作成する場合は、必ずビューワーリクエストイベントタイプを選択してください 。すなわち、関数は CloudFront がビューワーからリクエストを受信するたびに、リクエストされたオブジェクトが CloudFront キャッシュにあるかどうかをチェックする前に実行されます。

次の擬似コードは、HTTP リクエストを変更する関数の構造を示しています。

function handler(event) { var request = event.request; // Modify the request object here. return request; }

この関数は、変更された request オブジェクトを CloudFront に返します。CloudFront は、CloudFront キャッシュでキャッシュヒットがないかチェックし、必要に応じてリクエストをオリジンに送信することで、返されたリクエストの処理を続行します。

ビューワーリクエストイベントタイプで HTTP レスポンスを生成する

関数は、エッジで HTTP レスポンスを生成し、キャッシュされたレスポンスまたは CloudFront によるそれ以降の処理をチェックすることなく、ビューワー(クライアント)に直接返すことができます。たとえば、関数コードは、リクエストを新しい URL にリダイレクトしたり、承認をチェックして、401403 レスポンスを非承認リクエストに返す場合があります。

HTTP レスポンスを生成する関数を作成する場合は、必ずビューワーリクエストイベントタイプを選択してください 。つまりこの関数は、CloudFront がビューワーからリクエストを受信するたびに、CloudFront がリクエストの処理を行う前に実行されます。

次の擬似コードは、HTTP 応答を生成する関数の構造を示しています。

function handler(event) { var request = event.request; var response = ...; // Create the response object here, // using the request properties if needed. return response; }

この関数は、CloudFront に response オブジェクトを返します。CloudFront はこのオブジェクトを、CloudFront キャッシュをチェックしたり、オリジンにリクエストを送信したりすることなく、すぐにビューワーに戻します。

ビューワーレスポンスイベントタイプの HTTP レスポンスの変更

関数は、レスポンスが CloudFront キャッシュとオリジンのどちらから来たかに関係なく、CloudFront がビューワー (クライアント) に送信する前に HTTP レスポンスを変更できます。例えば、関数コードでレスポンスヘッダー、ステータスコード、本文のコンテンツを追加または変更する場合があります。

HTTP レスポンスを変更する関数を作成する場合は、必ずビューワーレスポンスイベントタイプを選択してください。つまり関数は、レスポンスが CloudFront キャッシュまたはオリジンのどちらから来たかに関係なく、CloudFront がビューワーにレスポンスを返す前に実行されます。

次の擬似コードは、HTTP レスポンスを変更する関数の構造を示しています。

function handler(event) { var request = event.request; var response = event.response; // Modify the response object here, // using the request properties if needed. return response; }

この関数は変更された response オブジェクトを CloudFront に返し、CloudFront はこれをすぐにビューワーに返します。

CloudFront Functions の操作の詳細については、以下のトピックを参照してください。