関数の目的を決定する - 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 はこれをすぐにビューワーに返します。

接続リクエストイベントタイプの mTLS 接続を検証する

接続関数は、カスタム検証および認証ロジックを提供するために TLS 接続中に実行される CloudFront Functions の一種です。接続関数は現在、相互 TLS (mTLS) 接続で使用できます。ここでは、クライアント証明書を検証し、標準証明書の検証を超えてカスタム認証ロジックを実装できます。接続関数は TLS ハンドシェイクプロセス中に実行され、証明書プロパティ、クライアント IP アドレス、または他の条件に基づいて接続を許可または拒否できます。

接続関数を作成して公開した後、mTLS が有効なディストリビューションとの接続リクエストイベントタイプの関連付けを追加してください。これにより、クライアントが CloudFront との mTLS 接続を確立しようとするたびに関数が実行されるようになります。

次の擬似コードは、接続関数の構造を示しています。

function connectionHandler(connection) { // Validate certificate and connection properties here. if (/* validation passes */) { connection.allow(); } else { connection.deny(); } }

関数はヘルパーメソッドを使用して、接続を許可または拒否するかどうかを決定します。ビューワーリクエストおよびビューワーレスポンス関数とは異なり、接続関数は HTTP リクエストまたはレスポンスを変更できません。

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