AWS Lambda@Edge がログを記録しない 質問する

AWS Lambda@Edge がログを記録しない 質問する

CloudFront ディストリビューションにデプロイされたビューワー リクエストとオリジン レスポンスの Lambda 関数は実行されていますが、CloudWatch にログを記録していません。私はこのトピックの調査にかなりの時間を費やし、他の投稿からのアドバイスをすべて確認しました。

  • labmda@edge 関数が実行されるリージョンに CloudWatch ログが作成されることがわかっているので、すべてのリージョンのログをチェックしています。いずれにもログはありません。
  • AWSServiceRoleForCloudFrontLogger ロールが存在することを確認しました。

興味深いことに、Lambda 関数の 1 つに意図的にエラーをコード化すると、エラー ログを含むという名前のグループ内にログが作成されますが/aws/cloudfront/LambdaEdge/<cloudfront distribution id>、ここでは console.log ステートメントからの出力はありません。

どうやっても、console.log() を使用してデバッグ ステートメントを含む、成功と失敗の両方のすべてのリクエストを CloudWatch に記録できるようにするのかわかりません。

AWSServiceRoleForCloudFrontLogger には、次の 1 つのポリシーが含まれていますAWSCloudFrontLogger

    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:/aws/cloudfront/*"
        }
    ]
}

編集:

以下は、AWS サポートが提案した AWS ロールです。これが機能し、問題が解決したことを確認できます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:*"
            ]
        }
    ]
}```

ベストアンサー1

おそらく問題は、Lambda に CloudWatch にログを出力する権限がないことです。

Lambda 関数実行ロールの権限をもう一度確認できますか?

関連リンク:AWS Lambda 関数で CloudWatch にログ (テキスト出力) を記録できない

説明

ここでは 2 種類のログが存在するため、2 つの異なる場所で CloudWatch に権限を付与する必要があります。

  1. Lambda関数に入力したログ(console.logを使用)は、関数によってCloudWatchに公開されるため、関数実行ロールには許可CloudWatch へ。これは、Lambda 関数を誰がトリガーするかに関係なく当てはまります。
  2. さて、L@Eですが、リクエスト/レスポンスを次のように変更してしまうことがあります。CloudFront では無効ですこれらのシナリオでは、ClodFrontだけがあなたが失敗したことを認識しており(Lambda関数はこれを認識していません)、この認識をログの形でCloudWatchに公開します。これは別のエンティティであるため、独自の権限ログを CloudWatch (AWSServiceRoleForCloudFrontLogger 経由で提供したもの) にプッシュします。

おすすめ記事