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 関数のログを見つけるには、関数が呼び出されているリージョンを特定し、ログを表示する必要があります。
関数が呼び出されたリージョンを見つけるには:
- AWS マネジメントコンソールにログインし、CloudFront コンソールを開きます。
- [Telemetry] (テレメトリ) カテゴリで [Monitoring] (モニタリング) を選択します。
- [Lambda@Edge] タブを選択します。
- [Lambda@Edge function] (Lambda@Edge 関数) を選択し、[View function metrics] (関数メトリクスを表示) を選択します。
これで、モニタリングページから、特定の期間中にレプリカ関数が呼び出されているリージョンを確認できるようになりました。ここから、各リージョンの関数の CloudWatch ログを見つけることができます。これを行うには、[View function logs] (関数ログを表示) を選択し、関数が呼び出されるリージョンを選択します。
注: 特定のリージョンでエラーが表示された場合は、グラフでエラーが表示されているリージョンを選択します。詳細については、「Lambda@Edge リージョンの判別」を参照してください。
または、リクエストのルーティング先であるエッジロケーションを特定するには、x-amz-cf-pop レスポンスのヘッダー値を確認します。その後、CloudWatch で対応するリージョンを確認して、ログファイルを確認します。例えば、x-amz-cf-pop が IAD89-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 にプッシュするかどうかを判断する