Docs で説明されているように、Viewer Response
のクラウドフロントトリガー用にLambda @ Edgeを設定しました。
ラムダ関数コード:
'use strict';
exports.handler = (event, context, callback) => {
console.log('----EXECUTED------');
const response = event.Records[0].cf.response;
console.log(event.Records[0].cf_response);
callback(null, response);
};
Viewer Response
イベントのトリガーを適切に設定しました。
これで、cloudfrontを介してリクエストを行うと、cloudwatchにログインする必要がありますが、ログインしません。
単純なTest Lambda Function
(ボタンを使用)を実行すると、正しくログに記録されます。
ここでの問題は何でしょうか?
Lambda @ Edge関数をデプロイすると、LambdaEdge関数のバージョンレプリカとともに世界中のすべてのリージョンにデプロイされます。
ユーザーが最も近いポップ/エッジを要求すると、最も近い領域に関連付けられたラムダが呼び出されます。これらのリージョンに関連付けられているLambdaのすべてのログは、regional cloudwatchログに記録されます。
たとえば、
ユーザーがus-east-1リージョンをヒットしている場合、関連するログはus-east-1になります。
関数がログを記録している場所(どのリージョン)を正確に知るには、次のAWSCLIスクリプトを実行できます。
FUNCTION_NAME=function_name_without_qualifiers
for region in $(aws --output text ec2 describe-regions | cut -f 3)
do
for loggroup in $(aws --output text logs describe-log-groups --log-group-name "/aws/lambda/us-east-1.$FUNCTION_NAME" --region $region --query 'logGroups[].logGroupName')
do
echo $region $loggroup
done
done
「function_name_without_qualifiers」をlambda @ Edgeの名前に置き換える必要があります。 リンク
それが役に立てば幸い。
AWSドキュメント によるとLambda @ Edge関数の場合:
ログファイルを確認するときは、関数が実行される場所に最も近いリージョンにログファイルが保存されることに注意してください。そのため、たとえばロンドンからWebサイトにアクセスする場合、ロンドンリージョンのCloudWatchログを表示するにはリージョンを変更する必要があります。