Lambda@Edge CloudTrail ログが配信されないのはなぜですか?

所要時間1分
0

AWS Lambda@Edge 関数をトリガーとして Amazon CloudFront ディストリビューションに関連付けました。AWS CloudTrail ログストリームで、Amazon CloudWatch の Lambda@Edge 関数の実行ログを見つけることができません。これらのログがない原因をトラブルシューティングするにはどうすればいいですか?

Lambda@Edge 関数に関連付けられた AWS Identity and Access Management (IAM) ロールに必要な許可が付与されていない場合、Lambda@Edge ログの作成は失敗します。コンソールから正しくないリージョンを確認している場合にも、ログが存在していないように見えることがあります。

解決方法

Lambda@Edge 関数に関連付けられた IAM ロールの許可を確認する

ロググループとストリームを作成し、ログイベントを任意の AWS リージョンに配置するために必要な許可が関数実行ロールに付与されていることを確認します。Lambda 関数に関連付けられた実行ロールに必要な許可が付与されていない場合、ログの配信は失敗します。

Lambda@Edge 実行ロールにアタッチされる IAM ポリシーの例:

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

CloudWatch ログにデータを送信するために必要な許可の詳細については、「Lambda@Edge 用の IAM 許可とロールの設定」を参照してください。

Lambda 関数がアクティブ化されたリージョンのログを確認する

Lambda@Edge 関数がアクティブ化されると、Lambda は、関数がアクティブ化された場所に最も近い AWS リージョンに CloudWatch ログストリームを作成します。ロググループ名は /aws/lambda/us-east-1.function-name としてフォーマットされます。ここで、function-name は Lambda 関数の名前です。

Lambda@Edge 関数のログを見つけるには、関数が呼び出されているリージョンを特定し、ログを表示する必要があります。

関数が呼び出されたリージョンを見つけるには:

  1. AWS マネジメントコンソールにログインし、CloudFront コンソールを開きます。
  2. [Telemetry] (テレメトリ) カテゴリで [Monitoring] (モニタリング) を選択します。
  3. [Lambda@Edge] タブを選択します。
  4. [Lambda@Edge function] (Lambda@Edge 関数) を選択し、[View function metrics] (関数メトリクスを表示) を選択します。

これで、モニタリングページから、特定の期間中にレプリカ関数が呼び出されているリージョンを確認できるようになりました。ここから、各リージョンの関数の CloudWatch ログを見つけることができます。これを行うには、[View function logs] (関数ログを表示) を選択し、関数が呼び出されるリージョンを選択します。

注: 特定のリージョンでエラーが表示された場合は、グラフでエラーが表示されているリージョンを選択します。詳細については、「Lambda@Edge リージョンの判別」を参照してください。

または、リクエストのルーティング先であるエッジロケーションを特定するには、x-amz-cf-pop レスポンスのヘッダー値を確認します。その後、CloudWatch で対応するリージョンを確認して、ログファイルを確認します。例えば、x-amz-cf-popIAD89-P1 に設定されている場合、これは IAD が空港コードである us-east-1 リージョンでリクエストが処理されたことを示します。

Lambda が CloudFront に無効ではないレスポンスを返すと、CloudFront はログファイルに書き込まれたエラーメッセージをプッシュします。その後、CloudFront は、Lambda 関数が実行された CloudWatch リージョンにプッシュします。ロググループの形式は次のとおりです: /aws/cloudfront/LambdaEdge/DistributionId。ここで、DistributionId はディストリビューションの ID です。CloudWatch ログファイルがあるリージョンを見つけるには、「Lambda@Edge リージョンの判別」を参照してください。


関連情報

Lambda@Edge 用の IAM 許可とロールの設定

Lambda@Edge 関数の CloudWatch メトリクスおよびログ

アカウントがログを CloudWatch にプッシュするかどうかを判断する

AWS公式
AWS公式更新しました 2年前