AWS Lambda@Edge 関数を Amazon CloudFront ディストリビューションに関連付けたにもかかわらず、Amazon CloudWatch ログストリームに Lambda@Edge 関数のログが見つかりません。
解決策
Lambda @Edge 関数に関連付けられた IAM ロールのアクセス許可を確認する
Lambda @Edge 関数に関連付けられた AWS Identity and Access Management (IAM) ロールに必要なアクセス許可がない場合、Lambda @Edge ログは配信されません。関数ロールに、ロググループとストリームを作成し、ログイベントを任意の AWS リージョンに配置するのに必要なアクセス許可があることを確認します。
IAM ポリシーの例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:logs:*:*:*"
]
}
]
}
CloudWatch Logs にデータを送信するために必要なアクセス許可の詳細については、「Lambda @Edge の IAM アクセス許可とロールを設定する」を参照してください。
CloudFront が Lambda 関数を呼び出しているリージョンのログを見つける
CloudFront コンソールでリージョンを確認します。使用したリージョンが誤っている場合、ログが表示されないことがあります。
Lambda @Edge 関数を呼び出すと、Lambda はリクエストを受信したリージョンに CloudWatch Logs ログストリームを作成します。ロググループ名は、/aws/lambda/us-east-1.function-name という形式です。
Lambda @Edge 関数ログを見つけるには、CloudFront が関数を呼び出すリージョンを特定します。次の手順を実行します。
- CloudFront コンソールを開きます。
- [テレメトリ] で [モニタリング] を選択します。
- [Lambda @Edge] タブを選択します。
- 該当する Lambda @Edge 関数を選択し、[メトリクスを表示] を選択します。
- [関数ログを表示] を選択し、CloudFront が関数を呼び出すリージョンを選択します。
注: リージョンにエラーがある場合は、[エラー] メトリクスグラフでそのリージョンを選択します。
- CloudFront がリクエストをルーティングしたエッジロケーションを確認するには、x-amz-cf-pop 応答のヘッダー値を確認します。次に、CloudWatch Logs で対応するリージョンを参照し、ログファイルを確認します。たとえば、x-amz-cf-pop が IAD89-P1 の場合、IAD は空港コードであり、CloudFront は us-east-1 でリクエストを処理したことを示します。
Lambda が CloudFront に無効な応答を返した場合、CloudFront はエラーメッセージをログファイルに記録します。次に、CloudFront はこれらのログを Lambda 関数が実行されたリージョンの CloudWatch ログに発行します。ロググループは、/aws/cloudfront/LambdaEdge/DistributionId という形式です。CloudWatch Logs ログファイルが置かれたリージョンを確認するには、「Lambda @Edge リージョンを判断する」を参照してください。
関連情報
レポート、メトリクス、ログ
アカウントが CloudWatch にログをプッシュしているかどうかを判断する