CloudFront Functions が実行されているかどうかを確認する方法はありますか
困っていた内容
CloudFront Functions をビューワーリクエストイベントに設定しているのに、一部のリクエストで関数が実行されません。
設定した関数が実行されているかどうかを確認する方法も知りたいです。
どう対応すればいいの?
以下に関数が実行されない主な原因と、実際のリクエストで実行されているかどうかを確認する方法を 2 つご紹介します。
関数はビヘイビアごとに関連付けられる
CloudFront Functions は、ディストリビューションの「ビヘイビア(キャッシュ動作)」ごとに関連付けを設定します。
ディストリビューションで関数を使用するには、関数をディストリビューションの 1 つ以上のキャッシュ動作に関連付けます。
設定した関数は、関連付けたビヘイビアのパスパターンに一致するリクエストにのみ実行されます。
例えば、デフォルトのビヘイビア(*)にのみ関数を関連付けている場合、/images/* や /api/* などの専用ビヘイビアに該当するリクエストでは関数は実行されません。
期待しているすべてのリクエストで関数を実行させるには、それぞれのビヘイビアに関数を関連付ける必要があります。
次に、実際のリクエストで関数が想定どおりに実行されているかどうかを確認する方法を 2 つご紹介します。
コンソールのテスト機能を使う
CloudFront コンソールの関数詳細ページにある「テスト」タブから、指定したリクエストに対して関数の動作をシミュレートいただけます。
URL パスやヘッダーを指定してリクエストを作成し「関数をテスト」を実行すると、実行結果(関数が出力したリクエストや関数ログ)をコンソール上で確認いただけます。
ただし、コンソールのテスト実行はビヘイビアによるリクエストの振り分けを含む CloudFront の処理フロー全体をシミュレートするものではありません。
実際のリクエストでは関数が動かないパスに対しても、テストは成功する場合があります。
CloudWatch Logs で実行ログを確認する
関数コードに console.log() の呼び出しが含まれている場合、実際のリクエストに対する関数の実行ログを CloudWatch Logs で確認いただけます。
CloudFront 関数のコードに console.log() ステートメントが含まれている場合、CloudFront Functions はこれらのログ行を CloudWatch Logs に自動的に送信します。console.log() ステートメントがない場合、CloudWatch Logs には何も送信されません。
CloudFront Functions は、本番リクエストとレスポンスに応答して実行されるステージ LIVE の関数のみ、ログを CloudWatch に送信します。関数をテストするとき、CloudFront は CloudWatch にログを送信しません。
確認先は次のとおりで、ログが出力されていれば関数は実行されています。
- リージョン:米国東部(バージニア北部) us-east-1
- ロググループ:/aws/cloudfront/function/<FunctionName>
ただし、 CloudFront のログはベストエフォートで提供されるため、まれにログが配信されないことがあります。
ログが出力されていない場合も、関数が実行されていないと断定できないことにご注意ください。
参考情報






