一般的なヘルパーメソッド
このページでは、CloudFront Functions 内の追加のヘルパーメソッドについて説明します。これらのメソッドを使用するには、JavaScript ランタイム 2.0 を使用して CloudFront 関数を作成します。
import cf from 'cloudfront';
詳細については、「CloudFront Functions の JavaScript ランタイム 2.0 の機能」を参照してください。
edgeLocation メタデータ
このメソッドは、cloudfront モジュールの使用が必要です。
注記
このメソッドは、ビューワーリクエスト関数にのみ使用できます。ビューワーレスポンス関数の場合、このメソッドは空です。
この JavaScript オブジェクトを使用して、エッジロケーションの空港コード、予想されるリージョナルエッジキャッシュリージョン、またはリクエストの処理に使用される CloudFront サーバーの IP アドレスを取得します。このメタデータは、ビューワーリクエストイベントトリガーでのみ使用できます。
cf.edgeLocation = { name: SEA serverIp: 1.2.3.4 region: us-west-2 }
cf.edgeLocation オブジェクトには、以下を含めることができます。
- 名前
-
リクエストを処理したエッジロケーションの 3 文字の IATA コード
。 - serverIp
-
リクエストを処理したサーバーの IPv4 または IPv6 アドレス。
- リージョン
-
キャッシュミスがある場合にリクエストで使用されることが予想される CloudFront Regional Edge Cache (REC)。予想される REC が使用できず、バックアップ REC がリクエストに使用される場合、この値は更新されません。プライマリ REC と Origin Shield が同じ場所である場合を除き、これには使用されている Origin Shield の場所は含まれません。
注記
CloudFront がオリジンフェイルオーバーを使用するように設定されている場合、CloudFront Functions は 2 回目は呼び出されません。詳細については、「CloudFront オリジンフェイルオーバーを使用して高可用性を最適化する」を参照してください。
rawQueryString() 方法
このメソッドに、cloudFront モジュールは必要ありません。
rawQueryString() メソッドを使用して、解析されていない未変更のクエリ文字列を文字列として取得します。
[リクエスト]
function handler(event) { var request = event.request; const qs = request.rawQueryString(); }
レスポンス
先頭の ? なしで、受信リクエストの完全なクエリ文字列を文字列値として返します。
-
クエリ文字列はないが、
?が存在する場合、関数は空の文字列を返します。 -
クエリ文字列がなく、
?が存在しない場合、関数はundefinedを返します。
- ケース 1: 完全なクエリ文字列が返された (先頭に
?なし) -
受信リクエスト URL:
https://example.com/page?name=John&age=25&city=BostonrawQueryString()戻り値 。"name=John&age=25&city=Boston" - ケース 2: 空の文字列が返された (
?は存在するが、パラメータがない場合) -
受信リクエスト URL:
https://example.com/page?rawQueryString()戻り値 。"" - ケース 3:
undefinedが返された (クエリ文字列および?なし) -
受信リクエスト URL:
https://example.com/pagerawQueryString()戻り値 。undefined
logCustomData() 方法
この方法を使用するには、cloudfront モジュールをインポートします。
logCustomData() メソッドを使用して、Amazon CloudFront 関数から CloudFront アクセスログにカスタムデータを送信します。この関数がビューワーリクエストイベントまたはビューワーレスポンスイベントに関連付けられているかどうかに応じて、データは viewer-request-log-data または viewer-response-log-data ログフィールドに書き込まれます。
メソッドは 1 つの文字列引数を受け取ります。オブジェクトをログに記録するには、JSON.stringify() を使用して最初に文字列に変換します。例えば、次のようになります。
const resp_obj = JSON.stringify(some_obj); cf.logCustomData(resp_obj);
各フィールドは、最大 800 バイトのデータをサポートします。CloudFront は、ログフィールドに書き込む前にデータを自動的に URL エンコードします。CloudFront は、URL エンコード後に 800 バイトを超えるデータを切り捨てます。関数が 1 回の実行で logCustomData() を複数回呼び出す場合、CloudFront は最後の値のみを使用します。
ログ設定にフィールドを追加する
CloudFront アクセスログでこのデータを受け取るには、リアルタイムログ設定または標準ログ記録 (v2) 設定に viewer-request-log-data または viewer-response-log-data フィールドを追加する必要があります。CloudFront Functions は、埋め込み Point of Presence (POP) のカスタムデータログ記録をサポートしていません。
console.log() との違い
logCustomData() メソッドは CloudFront Functions の console.log() を置き換えません。console.log() を使用して Amazon CloudWatch Logs にログ行を送信します。cf.logCustomData() を使用して、CloudFront アクセスログ (リアルタイムログと標準ログ (v2)) にカスタムデータを書き込みます。同じ関数で両方のメソッドを使用できます。詳細については、「CloudFront Functions のログ」を参照してください。
このメソッドは次の構文を使用します。
cf.logCustomData(String);
例ビューワーリクエスト関数でヘッダーをログに記録する
import cf from 'cloudfront'; function handler(event) { var request = event.request; // Check if the debug header exists, if so log it if (request.headers['x-debug-header']) { // Log the debug header value cf.logCustomData("debug header found: " + request.headers['x-debug-header'].value); } return request; }