web-dev-qa-db-ja.com

Lambda @Edgeがクラウドフロントリクエストにログオンしていません

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(ボタンを使用)を実行すると、正しくログに記録されます。

ここでの問題は何でしょうか?

13
formatkaka

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の名前に置き換える必要があります。 リンク

それが役に立てば幸い。

34
Kannaiyan

AWSドキュメント によるとLambda @ Edge関数の場合:

ログファイルを確認するときは、関数が実行される場所に最も近いリージョンにログファイルが保存されることに注意してください。そのため、たとえばロンドンからWebサイトにアクセスする場合、ロンドンリージョンのCloudWatchログを表示するにはリージョンを変更する必要があります。

2
captainblack