

# エッジ関数のログ
<a name="edge-functions-logs"></a>

Amazon CloudWatch Logs を使用して、[Lambda@Edge](lambda-at-the-edge.md) と [CloudFront Functions](cloudfront-functions.md) の両方で、エッジ関数のログを取得できます。ログにアクセスするには、CloudWatch コンソールまたは CloudWatch Logs API を使用できます。

**重要**  
ログは、すべてのリクエストを完全に課金するためのものではなく、コンテンツに対するリクエストの本質を把握するものとして使用することをお勧めします。CloudFront はベストエフォートベースでエッジ関数のログを提供します。特定のリクエストのログエントリが、リクエストが実際に処理されてからかなり後に配信されることも、(まれに) 一切配信されないこともあります。ログエントリをエッジ関数のログから省略すると、エッジ関数のログ内のエントリ数は AWS の請求と使用状況レポートに表示される使用量と一致しなくなります。

**Topics**
+ [Lambda@Edge のログ](#lambda-at-edge-logs)
+ [CloudFront Functions のログ](#cloudfront-function-logs)

## Lambda@Edge のログ
<a name="lambda-at-edge-logs"></a>

Lambda@Edge は、関数ログを CloudWatch Logs に自動的に送信し、関数が呼び出された AWS リージョンにログストリームを作成します。AWS Lambda で関数を作成または変更するときは、デフォルトの CloudWatch ロググループ名を使用するか、カスタマイズできます。
+ デフォルトのロググループ名は `/aws/lambda/<FunctionName>` です。`<FunctionName>` は関数の作成時に指定した名前です。CloudWatch にログを送信する際、Lambda@Edge は関数名に `us-east-1` プレフィックスを自動的に追加し、ロググループ名は `/aws/lambda/us-east-1.<FunctionName>` になります。このプレフィックスは、関数が作成された AWS リージョンに対応します。このプレフィックスは、関数が呼び出される他のリージョンでも、ロググループ名の一部として残ります。
+ `/MyLogGroup` などのカスタムロググループ名を指定した場合、Lambda@Edge はリージョンプレフィックスを追加しません。ロググループ名は、関数が呼び出される他のすべてのリージョンで同じままです。

**注記**  
カスタムロググループを作成し、デフォルトの `/aws/lambda/<FunctionName>` と同じ名前を指定すると、Lambda@Edge は関数名に `us-east-1` プレフィックスを追加します。

ロググループ名をカスタマイズするだけでなく、Lambda@Edge 関数は JSON およびプレーンテキストのログ形式とログレベルのフィルタリングをサポートしています。詳細については、「*AWS Lambda デベロッパーガイド*」の「[Lambda 関数の高度なログ記録コントロールの設定](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-cloudwatchlogs-advanced.html)」を参照してください。

**注記**  
Lambda@Edge は、リクエストのボリュームとログのサイズに基づいてログを調整します。

Lambda@Edge 関数ログファイルを確認するには、正しい リージョンの CloudWatch ログファイルを確認する必要があります。Lambda@Edge 関数が実行されているリージョンを確認するには、CloudFront コンソールでその関数のメトリクスのグラフを表示します。メトリックスは リージョンごとに表示されます。同じページで、リージョンを選択してそのリージョンのログファイルを表示し、問題を調査することができます。

Lambda@Edge 関数で CloudWatch Logs を使用する方法の詳細については、以下のトピックを参照してください。
+ CloudFront コンソールの [**Monitoring (モニタリング)**] セクションでのグラフ表示の詳細については、「[Amazon CloudWatch で CloudFront メトリクスをモニタリングする](monitoring-using-cloudwatch.md)」を参照してください。
+ CloudWatch Logs にデータを送信するために必要なアクセス許可については、「[Lambda@Edge 用の IAM アクセス許可とロールのセットアップ](lambda-edge-permissions.md)」を参照してください。
+ Lambda@Edge 関数のログ作成の追加については、*AWS Lambda デベロッパーガイド*の「[Node.js の AWS Lambda 関数ログ作成](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-logging.html)」または「[Python の AWS Lambda 関数ログ作成](https://docs.aws.amazon.com/lambda/latest/dg/python-logging.html)」を参照してください。
+ CloudWatch Logs クォータ (以前は制限と呼ばれていました) の詳細については、*Amazon CloudWatch Logs ユーザーガイド*の「[CloudWatch Logs クォータ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html)」を参照してください。

## CloudFront Functions のログ
<a name="cloudfront-function-logs"></a>

CloudFront 関数のコードに `console.log()` ステートメントが含まれている場合、CloudFront Functions はこれらのログ行を CloudWatch Logs に自動的に送信します。`console.log()` ステートメントがない場合、CloudWatch Logs には何も送信されません。

CloudFront Functions は、関数が実行されたエッジロケーションに関係なく、常に米国東部 (バージニア北部) リージョン (`us-east-1`) にログストリームを作成します。ログストリーム名の形式は `YYYY/M/D/UUID` です。

ロググループ名は次の形式に従います。
+ キャッシュ動作レベルでの CloudFront Functions の場合、形式は `/aws/cloudfront/function/<FunctionName>` です。
+ ディストリビューションレベルの CloudFront Functions (Connection Functions) の場合、形式は `/aws/cloudfront/connection-function/<FunctionName>` です。

`<FunctionName>` は、関数の作成時に付けられた名前です。

**Example ビューワーリクエスト**  
CloudWatch Logs に送信されるログメッセージの例を次に示します。各行は、CloudFront リクエストを一意に識別する ID で始まります。メッセージは、CloudFront ディストリビューション ID を含む `START` 行で始まり、`END` 行で終わります。`START` 行と `END` 行の間には、関数の `console.log()` ステートメントによって生成されるログ行があります。  

```
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== START DistributionID: E3E5D42GADAXZZ
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== Example function log output
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== END
```

**Example 接続リクエスト**  
CloudWatch Logs に送信されるログメッセージの例を次に示します。各行は、CloudFront リクエストを一意に識別する ID で始まります。メッセージは、CloudFront ディストリビューション ID を含む `START` 行で始まり、`END` 行で終わります。`START` 行と `END` 行の間には、関数の `console.log()` ステートメントによって生成されるログ行があります。  

```
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== START DistributionID: E3E5D42GADA123
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== 1.2.3.4
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== END
```

**注記**  
CloudFront Functions は、本番リクエストとレスポンスに応答して実行されるステージ `LIVE` の関数のみ、ログを CloudWatch に送信します。[関数をテスト](test-function.md)するとき、CloudFront は CloudWatch にログを送信しません。テスト出力には、エラー、コンピューティング使用率、関数ログ (`console.log()` ステートメント) に関する情報が表示されますが、この情報は CloudWatch に送信されません。

CloudFront Functions は、AWS Identity and Access Management (IAM) [サービスリンクロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)を使用して、アカウントの CloudWatch Logs にログを送信します。サービスリンクロールは、AWS のサービスに直接リンクされた IAM ロールです。サービスリンクロールはサービスによって事前定義されており、サービスがお客様に他の AWS のサービスを呼び出す際に必要な、すべてのアクセス許可が含まれています。CloudFront Functions は、**AWSServiceRoleForCloudFrontLogger** サービスリンクロールを使用します。このロールの詳細については、「[Lambda@Edge 用のサービスにリンクされたロール](lambda-edge-permissions.md#using-service-linked-roles-lambda-edge)」を参照してください (Lambda@Edge は同じサービスリンクされたロールを使用します)。

関数が検証エラーまたは実行エラーで失敗すると、[標準ログ](AccessLogs.md)と[リアルタイムアクセスログ](real-time-logs.md)に情報が記録されます。エラーの詳細については、`x-edge-result-type`、`x-edge-response-result-type`、および `x-edge-detailed-result-type` フィールドを参照してください。