AWS Lambda@Edgeのログはどこ?AWS Lambda@Edgeのログ出力先について

どうも!大阪オフィスの西村祐二です。

今回は小ネタです。

みなさんAWS Lambda@Edgeは使ったことありますでしょうか?

CloudFrontで配信するサイトに対して、Basic認証を設定できたりと、とても可能性を感じるサービスです。

Amazon CloudFrontとAWS Lambda@EdgeでSPAのBasic認証をやってみる

今回は、そのAWS Lambda@Edgeを使っときに意外とハマるログの出力先について記載していきたいと思います。

AWS Lambda@EdgeのCloudWatch Logsにログが見当たらない!?

Lambda@Edgeは正常に動作しているけど、CloudWatch Logsにログが出力されていない!?
ってことがあります。
(CloudWatch Logsへの出力設定は問題ないと仮定しています。)

▼Lambda@Edgeは動作しているけど、モニタリングには何も表示がない

▼「ログにジャンプ」をクリックしても、ロググループがないと言われる

結論:Lambda@Edge実行地域のリージョンのCloudWatch Logsに出力されている

Lambda@Edgeの実行が日本だと、東京リージョンのCloudWatch Logsに/aws/lambda/us-east-1.function-nameとして出力されています。

AWS Lambda@Edgeでは関数自体はバージニアリージョンに作成する必要がありますが、
必ず、バージニアリージョンに出力されるわけではなく、 CloudFrontにアクセスしたとき、AWS Lambda@Edgeを動作させたエッジロケーションが何処かによってログ出力されるリージョンが決定されます。
例えば、日本でCloudFrontにアクセスしてAWS Lambda@Edgeを動作させた場合は、東京リージョン近辺のエッジロケーションにアクセスされるので、東京リージョンのCloudWatch Logsに出力されます。

公式ドキュメントにきちんと記載があります。(自戒)

Lambda 関数の CloudWatch メトリクスと CloudWatch Logs

CloudFront イベントのトリガーを作成すると、Lambda から CloudWatch に自動的にメトリクスが送信されるようになります。メトリクスはすべての Lambda リージョンで使用できます。各メトリクスの名前は、/aws/lambda/us-east-1.function-name です。function-name は、関数を作成したときに割り当てた名前です。CloudWatch は、関数が実行される場所に最も近いリージョンにメトリクスを送信します。

さいごに

いかがだったでしょうか。

AWS Lambda@Edgeのログの出力先について記載しました。
AWS Lambda@Edge関数が実行される地域のリージョンのCloudWatch Logsに出力されます。

AWS Lambda@Edge のロググループが見つからず困ってる人の助けになれば幸いです。