

# API Gateway で REST API をモニタリングする
<a name="rest-api-monitor"></a>

このセクションでは、CloudWatch のメトリクス、CloudWatch Logs、Firehose、AWS X-Ray を使用して API をモニタリングする方法について説明します。CloudWatch の実行ログと CloudWatch のメトリクスを組み合わせることにより、エラーの記録と実行のトレースを行って、API のパフォーマンスをモニタリングすることができます。API コールを Firehose のログに記録することもできます 。AWS X-Ray を使用して、API を構成するダウンストリームサービスを通じて呼び出しをトレースすることもできます。

**注記**  
API Gateway は、次の場合にログとメトリクスが生成されない可能性があります。  
413 Request Entity Too Large エラー
431 Request Header Fields Too Large エラー
過剰な 429 Too Many Requests エラー
API マッピングを持たないカスタムドメインに送信されたリクエストからの 400 シリーズのエラー
内部の障害によって発生した 500 シリーズのエラー
API Gateway は、REST API メソッドをテストするときに、ログとメトリクスを生成しません。CloudWatch エントリがシミュレートされます。詳細については、「[API Gateway コンソールを使用して REST API メソッドをテストする](how-to-test-method.md)」を参照してください。

**Topics**
+ [Amazon CloudWatch のメトリクスを使用して REST API の実行をモニタリングする](monitoring-cloudwatch.md)
+ [API Gateway で REST API の CloudWatch ログ記録を設定する](set-up-logging.md)
+ [API Gateway で REST API コールのログを Amazon Data Firehose に記録する](apigateway-logging-to-kinesis.md)
+ [API Gateway のアクセスのログ記録のための変数](api-gateway-variables-for-access-logging.md)
+ [API Gateway で X-Ray を使用して REST API へのユーザーリクエストをトレースする](apigateway-xray.md)

# Amazon CloudWatch のメトリクスを使用して REST API の実行をモニタリングする
<a name="monitoring-cloudwatch"></a>

CloudWatch を使用して API の実行をモニタリングすることで、API Gateway から raw データを収集し、リアルタイムに近い読み取り可能なメトリクスに加工することができます。これらの統計は 15 か月間記録されるため、履歴情報にアクセスしてウェブアプリケーションやサービスの動作をより的確に把握できます。デフォルトでは、API Gateway のメトリクスデータは 1 分間隔で自動的に CloudWatch に送信されます。詳細については、*Amazon CloudWatch ユーザーガイド*の「[Amazon CloudWatch とは](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)」を参照してください。

API Gateway からレポートされるメトリクスには、さまざまな方法で分析できる情報が含まれています。以下に、メトリクスの一般的な使用方法を示します。これらの使用方法を参考にしてください。
+ バックエンドの応答性を測定するため、[**IntegrationLatency**] メトリクスをモニタリングします。
+ API コールの全体的な応答性を測定するために、**Latency** メトリクスをモニタリングします。
+ 目的のパフォーマンスの実現に向けてキャッシュ容量を最適化するために、**CacheHitCount** と **CacheMissCount** メトリクスをモニタリングします。

**Topics**
+ [Amazon API Gateway のディメンションとメトリクス](api-gateway-metrics-and-dimensions.md)
+ [API Gateway の API ダッシュボードで CloudWatch のメトリクスを表示する](how-to-api-dashboard.md)
+ [CloudWatch コンソールで API Gateway のメトリクスを表示する](metrics_dimensions_view_in_cloud_watch.md)
+ [CloudWatch コンソールで API Gateway のログイベントを表示する](view-cloudwatch-log-events-in-cloudwatch-console.md)
+ [AWS の API Gateway 用モニタリングツール](monitoring_automated_manual.md)

# Amazon API Gateway のディメンションとメトリクス
<a name="api-gateway-metrics-and-dimensions"></a>

API Gateway が Amazon CloudWatch に送信するメトリクスとディメンションを以下に示します。詳細については、「[Amazon CloudWatch のメトリクスを使用して REST API の実行をモニタリングする](monitoring-cloudwatch.md)」を参照してください。

## API Gateway のメトリクス
<a name="api-gateway-metrics"></a>

Amazon API Gateway は、メトリクスデータを 1 分ごとに CloudWatch に送信します。

`AWS/ApiGateway` 名前空間には、次のメトリクスが含まれます。


| メトリクス | 説明 | 
| --- | --- | 
|  4XXError |  指定された期間に取得されたクライアント側エラーの数。 API Gateway は、変更されたゲートウェイのレスポンスステータスコードを 4xxError エラーとしてカウントします。 `Sum` 統計は、このメトリクス、つまり、指定された期間内の 4XXError エラーの合計数を表します。`Average` 統計は、4XXError のエラー率 (4XXError エラーの合計数をその期間のリクエストの合計数で割った値) を表します。分母は Count メトリクス (下記) に対応します。 Unit: Count  | 
|  5XXError  |  指定された期間に取得されたサーバー側エラーの数。 `Sum` 統計は、このメトリクス、つまり、指定された期間内の 5XXError エラーの合計数を表します。`Average` 統計は、5XXError のエラー率 (5XXError エラーの合計数をその期間のリクエストの合計数で割った値) を表します。分母は Count メトリクス (下記) に対応します。 Unit: Count  | 
|  CacheHitCount  |  指定された期間内に API キャッシュから配信されたリクエストの数。 `Sum` 統計は、このメトリクス、つまり、指定された期間内のキャッシュヒットの合計数を表します。`Average` 統計は、キャッシュヒット率、つまり、キャッシュヒットの合計数をその期間のリクエストの合計数で割ったものです。分母は Count メトリクス (下記) に対応します。 Unit: Count  | 
|  CacheMissCount  |  API キャッシュが有効になっている特定の期間における、バックエンドから提供されたリクエストの数。 `Sum` 統計は、このメトリクス、つまり、指定された期間内のキャッシュミスの合計数を表します。`Average` 統計は、キャッシュミス率、つまり、キャッシュミスの合計数をその期間のリクエストの合計数で割ったものです。分母は Count メトリクス (下記) に対応します。 Unit: Count  | 
|  Count  |  指定期間内の API リクエストの合計数。 `SampleCount` 統計は、このメトリクスを表します。 Unit: Count  | 
|  IntegrationLatency  |  API Gateway がバックエンドにリクエストを中継してから、バックエンドからレスポンスを受け取るまでの時間。 Unit: Millisecond  | 
|  Latency  |  API Gateway がクライアントからリクエストを受け取ってから、クライアントにレスポンスを返すまでの時間。レイテンシーには、統合のレイテンシーおよびその他の API Gateway のオーバーヘッドが含まれます。 Unit: Millisecond  | 

## メトリクスのディメンション
<a name="api-gateway-metricdimensions"></a>

API Gateway のメトリクスをフィルタリングするには、次の表のディメンションを使用できます。

**注記**  
API Gateway は、メトリクスを CloudWatch に送信する前に、ApiName ディメンションから ASCII 以外の文字を削除します。APIName に ASCII 文字が含まれていない場合、API ID は ApiName として使用されます。


| ディメンション | 説明 | 
| --- | --- | 
|  ApiName  |  指定した API 名を使用して、API Gateway の REST API のメトリクスをフィルタリングします。  | 
|  ApiName, Method, Resource, Stage  |  指定した API 名、ステージ、リソース、メソッドを使用して、API Gateway の API のメソッドのメトリクスをフィルタリングします。 詳細な CloudWatch のメトリクスを明示的に有効にしない限り、API Gateway はこれらのメトリクスを送信しません。コンソールでステージを選択し、**[ログとトレース]** で **[編集]** を選択します。**[詳細なメトリクス]**、**[変更を保存]** の順に選択します。[update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) AWS CLI コマンドを呼び出して `metricsEnabled` プロパティを `true` に更新することもできます。 これらのメトリクスを有効にすることで、アカウントに追加料金が発生します。詳細については、[Amazon CloudWatch 料金表](https://aws.amazon.com/cloudwatch/pricing/)をご覧ください。  | 
|  ApiName, Stage  |  指定した API 名とステージを使用して、API Gateway の API のステージリソースのメトリクスをフィルタリングします。  | 

# API Gateway の API ダッシュボードで CloudWatch のメトリクスを表示する
<a name="how-to-api-dashboard"></a>

API Gateway コンソールの API ダッシュボードを使用して、API Gateway にデプロイされた API に関する CloudWatch のメトリクスを表示できます。これは、時間の経過に伴う API アクティビティの概要として表示されます。

**Topics**
+ [前提条件](#how-to-api-dashboard-prerequisites)
+ [ダッシュボードでの API アクティビティの調査](#how-to-api-dashboard-console)

## 前提条件
<a name="how-to-api-dashboard-prerequisites"></a>

1. API Gateway で API が作成済みであることが必要です。「」の手順に従います[API Gateway で REST API を開発する](rest-api-develop.md)

1. API は少なくとも一度はデプロイする必要があります。「[API Gateway で REST API をデプロイする](how-to-deploy-api.md)」の手順に従います

## ダッシュボードでの API アクティビティの調査
<a name="how-to-api-dashboard-console"></a>

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

1. APIを選択します。

1. ナビゲーションペインで、**[ダッシュボード]** を選択します。

1. **[ステージ]** では、目的のステージを選択します。

1. **[日付範囲]** を選択して日付の範囲を指定します。

1. **[API コール]**、**[レイテンシー]**、**[統合のレイテンシー]**、****[レイテンシー]、**[4xx エラー]**、および **[5xx エラー]** というタイトルの個別のグラフに表示される各メトリクスを、必要に応じて更新して確認します。
**ヒント**  
メソッドレベルで CloudWatch のメトリクスを確認するには、メソッドレベルで CloudWatch Logs を有効にしている必要があります。メソッドレベルでログを設定する方法については、「」を参照してください[ステージレベルの設定のオーバーライド](set-up-stages.md#how-to-method-override)

# CloudWatch コンソールで API Gateway のメトリクスを表示する
<a name="metrics_dimensions_view_in_cloud_watch"></a>

メトリクスはまずサービスの名前空間ごとにグループ化され、次に各名前空間内のさまざまなディメンションの組み合わせごとにグループ化されます。API のメソッドレベルでメトリクスを表示するには、[詳細なメトリクス] をオンにします。詳細については、「[ステージ設定の変更](set-up-stages.md#how-to-stage-settings)」を参照してください。

**CloudWatch コンソールを使用して API Gateway のメトリクスを表示するには**

1. CloudWatch コンソール ([https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)) を開きます。

1. 必要に応じて AWS リージョン を変更します。ナビゲーションバーから、AWS リソースがあるリージョンを選択します。

1. ナビゲーションペインで [**Metrics (メトリクス)**] を選択してください。

1. [**すべてのメトリクス**] タブで、[**API Gateway**] を選択します。

1.  ステージ別にメトリクスを表示するには、[**ステージ別**] パネルを選択します。次に、API とメトリクス名を選択します。

1. API 別にメトリクスを表示するには、[**API 名別**] パネルを選択します。次に、API とメトリクス名を選択します。

**AWS CLI を使ってメトリクスを表示するには**

1. 次の [list-metrics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/list-metrics.html) コマンドを使用して、メトリクスを一覧表示します。

   ```
   aws cloudwatch list-metrics --namespace "AWS/ApiGateway"
   ```

   メトリクスを作成した後、メトリクスが表示されるまでに最大 15 分かかります。メトリクスの統計をより早く確認するには、[get-metric-data](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/update-domain-name.html) または [get-metric-statistics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/update-domain-name.html) を使用します。

1. 次の [get-metrics-statistics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/get-metric-statistics.html) コマンドを使用して、5 分間隔での一定期間の平均を表示します。

   ```
   aws cloudwatch get-metric-statistics --namespace AWS/ApiGateway --metric-name Count --start-time 2011-10-03T23:00:00Z --end-time 2017-10-05T23:00:00Z --period 300 --statistics Average
   ```

# CloudWatch コンソールで API Gateway のログイベントを表示する
<a name="view-cloudwatch-log-events-in-cloudwatch-console"></a>

次のセクションでは、必要な前提条件を示し、CloudWatch コンソールで API Gateway のログイベントを表示する方法について説明します。

## 前提条件
<a name="view-cloudwatch-log-event-prerequisites"></a>

1. API Gateway で API が作成済みであることが必要です。「[API Gateway で REST API を開発する](rest-api-develop.md)」の手順に従います。

1. API は、少なくとも 1 回、デプロイして呼び出す必要があります。「[API Gateway で REST API をデプロイする](how-to-deploy-api.md)」および「[API Gateway で REST API を呼び出す](how-to-call-api.md)」の手順に従います。

1. ステージで CloudWatch Logs を有効にする必要があります。「[API Gateway で REST API の CloudWatch ログ記録を設定する](set-up-logging.md)」の手順に従います。

## ログに記録された API リクエストや API レスポンスを CloudWatch コンソールで表示するには
<a name="view-cloudwatch-log-event"></a>

1. CloudWatch コンソール ([https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)) を開きます。

1. 必要に応じて AWS リージョン を変更します。ナビゲーションバーから、AWS リソースがあるリージョンを選択します。詳細については、「[リージョンとエンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html)」を参照してください。

1. ナビゲーションペインで、**[ログ]**、**[ロググループ]** の順に選択します。

1. [**ロググループ**] 一覧で、"**API-Gateway-Execution-Logs\$1\$1rest-api-id\$1/\$1stage-name\$1**" という名前のロググループを選択します。

1.  [**ログストリーム**] 一覧で、ログストリームを選択します。タイムスタンプを使用して、目的のログストリームを見つけることができます。

1. 未加工のテキストを表示するには、[**テキスト**] を選択します。または、行ごとにイベントを表示するには、[**行**] を選択します。

**重要**  
 CloudWatch ではロググループやログストリームを削除することができますが、API Gateway の API のロググループやログストリームは手動で削除せず、API Gateway にそれらのリソースを管理させるようにしてください。ロググループまたはストリームを手動で削除すると、API のリクエストとレスポンスがログに記録されなくなる場合があります。その場合は、API のロググループ全体を削除して API を再デプロイしてくさい。これは、API Gateway によって API のデプロイ時に API ステージのロググループまたはログストリームが作成されるためです。

# AWS の API Gateway 用モニタリングツール
<a name="monitoring_automated_manual"></a>

AWS では、API Gateway のモニタリングに使用できるさまざまなツールを提供しています。これらのツールの中には、自動モニタリングを設定できるものもあれば、手操作を必要とするものもあります。モニタリングタスクをできるだけ自動化することをお勧めします。

## AWS の自動モニタリングツール
<a name="monitoring_automated_tools"></a>

以下の自動モニタリングツールを使用して、API Gateway を監視し、問題が発生したときにレポートすることができます。
+ **Amazon CloudWatch のアラーム** – 単一のメトリクスを指定した期間モニタリングし、特定のしきい値に対する複数の期間にわたるメトリクスの値に基づいて、1 つ以上のアクションを実行します。アクションは、Amazon Simple Notification Service (Amazon SNS) のトピックまたは Amazon EC2 Auto Scaling のポリシーに送信される通知です。CloudWatch アラームは、特定の状態にあるという理由だけでアクションを呼び出すことはありません。状態が変更され、指定された期間維持されている必要があります。詳細については、「[Amazon CloudWatch のメトリクスを使用して REST API の実行をモニタリングする](monitoring-cloudwatch.md)」を参照してください。
+ **Amazon CloudWatch Logs** - AWS CloudTrail またはその他の出典からログファイルをモニタリング、保存、およびアクセスします。詳細については、「Amazon CloudWatch ユーザーガイド」の「[Amazon CloudWatch Logs とは](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)」を参照してください。**
+ **Amazon EventBridge (旧 CloudWatch Events)** - イベントに一致したものを 1 つ以上のターゲットの関数やストリームにルーティングして、変更、状態の情報の収集、是正措置を行います。詳細については、「EventBridge ユーザーガイド」の「[Amazon EventBridge とは](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)」を参照してください。**
+ **AWS CloudTrail ログモニタリング** - アカウント間でログファイルを共有し、CloudTrail のログファイルを CloudWatch Logs に送信することでそれらをリアルタイムでモニタリングし、ログを処理するアプリケーションを Java で作成し、CloudTrail からの提供後にログファイルが変更されていないことを検証します。詳細については、「*AWS CloudTrail ユーザーガイド*」の「[CloudTrail ログファイルの使用](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-working-with-log-files.html)」を参照してください。

## 手動モニタリングツール
<a name="monitoring_manual_tools"></a>

API Gateway のモニタリングでもう 1 つ重要な点は、CloudWatch のアラームの対象外の項目を手動でモニタリングすることです。API Gateway、CloudWatch、その他の AWS のコンソールのダッシュボードは、AWS 環境の状態を一目で把握できるビューを提供します。API 実行のログファイルを確認することもお勧めします。
+ API Gateway のダッシュボードには、指定した期間の API の特定のステージに関する以下の統計情報が表示されます。
  + **API 呼び出し**
  + **キャッシュヒット**、API キャッシュが有効になっている場合のみ。
  + **キャッシュミス**、API キャッシュが有効になっている場合のみ。
  + **レイテンシー**
  + **統合のレイテンシー**
  + **4XX エラー**
  + **5XX エラー**
+ CloudWatch のホームページには、以下の情報が表示されます。
  + 現在のアラームとステータス
  + アラームとリソースのグラフ
  + サービスのヘルスステータス

  また、CloudWatch を使用して以下のことを行えます。
  + 重視するサービスをモニタリングするための[カスタマイズしたダッシュボード](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)を作成します
  + メトリクスデータをグラフ化して、問題のトラブルシューティングを行い、傾向を確認する
  + AWS リソースのすべてのメトリクスを検索して、参照する
  + 問題があることを通知するアラームを作成/編集する

## API Gateway をモニタリングする CloudWatch のアラームの作成
<a name="creating_alarms"></a>

アラームの状態が変わったら、Amazon SNS メッセージを送信する Amazon CloudWatch のアラームを作成することができます。アラームは、指定期間にわたって単一のメトリクスを監視し、指定したしきい値に対応したメトリクスの値に基づいて、期間数にわたって 1 つ以上のアクションを実行します。アクションは、Amazon SNS のトピックまたはオートスケーリングのポリシーに送信される通知です。アラームは、持続している状態変化に対してのみアクションを呼び出します。CloudWatch のアラームは、メトリクスが特定の状態にあるだけではアクションを呼び出しません。アクションを呼び出すには、指定した期間継続している必要があります。

# API Gateway で REST API の CloudWatch ログ記録を設定する
<a name="set-up-logging"></a>

 リクエストの実行や API へのクライアントのアクセスに関連する問題のデバッグに役立てるために、Amazon CloudWatch Logs で API コールのログを有効にすることができます。CloudWatch の詳細については、「[Amazon CloudWatch のメトリクスを使用して REST API の実行をモニタリングする](monitoring-cloudwatch.md)」を参照してください。

## API Gateway での CloudWatch によるログの形式
<a name="apigateway-cloudwatch-log-formats"></a>

 CloudWatch による API のログには、実行ログとアクセスログの 2 種類があります。実行ログでは、API Gateway によって CloudWatch Logs が管理されます。このプロセスには、ロググループとログストリームの作成、および呼び出し元のリクエストとレスポンスのログストリームへのレポートが含まれます。

ログに記録されるデータには、エラーや実行のトレース (リクエストやレスポンスのパラメータ値やペイロードなど)、Lambda オーソライザー (旧カスタムオーソライザー) が使用するデータ、API キーが必要かどうか、使用量プランが有効かどうかなどの情報が含まれます。API Gateway は、認可ヘッダー、API キー値、および同様の機密リクエストパラメータをログデータからマスキングします。

セキュリティ体制を向上させるには、`ERROR` または `INFO` レベルで実行ログを使用することをお勧めします。これは、さまざまなコンプライアンスフレームワークに準拠するために必要になる場合があります。詳細については、*AWS Security Hub ユーザーガイド*の「[Amazon API Gateway のコントロール](https://docs.aws.amazon.com/securityhub/latest/userguide/apigateway-controls.html)」を参照してください。

API をデプロイすると、API Gateway はロググループとそのログストリームを作成します。ロググループの名前は `API-Gateway-Execution-Logs_{rest-api-id}/{stage_name}` 形式に従います。各ロググループ内で、ログはログデータにさらに分割され、ログデータがレポートされるときに [**最終のイベント時刻**] によって順序付けられます。

アクセスログの作成では、API デベロッパーとして、API にアクセスしたユーザーと、呼び出し元が API にアクセスした方法を記録します。独自のロググループを作成したり、既存のロググループを選択したりすることができます。これらは、API Gateway で管理することができます。アクセスの詳細を指定するには、[`$context`](api-gateway-variables-for-access-logging.md) 変数、ログ形式、ロググループの送信先を選択します。

アクセスログには少なくとも `$context.requestId` または `$context.extendedRequestId` が含まれている必要があります。ベストプラクティスとして、`$context.requestId` と `$context.extendedRequestId` をログ形式に含めます。

**`$context.requestId`**  
これにより、`x-amzn-RequestId` ヘッダーに値が記録されます。クライアントは、`x-amzn-RequestId` ヘッダーの値を共通の一意の識別子 (UUID) 形式の値で上書きできます。API Gateway は、`x-amzn-RequestId` レスポンスヘッダー内のこのリクエスト ID を返します。API Gateway は、アクセスログの上書きされたリクエスト ID のうち UUID の形式ではないものを `UUID_REPLACED_INVALID_REQUEST_ID` に置き換えます。

**`$context.extendedRequestId`**  
extendedRequestID は、API Gateway が生成する一意の ID です。API Gateway は、`x-amz-apigw-id` レスポンスヘッダー内のこのリクエスト ID を返します。API 発信者は、このリクエスト ID を提供することやオーバーライドすることはできません。API のトラブルシューティング役立てるために、必要に応じて、この値を AWS サポートに提供します。詳細については、「[API Gateway のアクセスのログ記録のための変数](api-gateway-variables-for-access-logging.md)」を参照してください。

[Common Log Format](https://httpd.apache.org/docs/current/logs.html#common) (CLF)、JSON、XML、CSV など、分析バックエンドでも採用されているログ形式を選択します。その後、フィードに直接アクセスログを入力して、メトリクスを計算してレンダリングすることができます。ログの形式を定義するには、ロググループの ARN を[ステージ](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html)の [accessLogSettings/destinationArn](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#destinationArn) プロパティに設定します。ロググループの ARN は、CloudWatch コンソールで取得できます。アクセスログの形式を定義するには、選択した形式を[ステージ](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html)の [accessLogSetting/format](https://docs.aws.amazon.com/apigateway/latest/api/API_Stage.html#format) プロパティに設定します。

API Gateway コンソールには、一般的に使用されるアクセスログの形式の例が表示されます。以下にもその例を示します。
+ `CLF` ([Common Log Format](https://httpd.apache.org/docs/current/logs.html#common)):

  ```
  $context.identity.sourceIp $context.identity.caller $context.identity.user [$context.requestTime]"$context.httpMethod $context.resourcePath $context.protocol" $context.status $context.responseLength $context.requestId $context.extendedRequestId
  ```
+  `JSON`: 

  ```
  { "requestId":"$context.requestId", "extendedRequestId":"$context.extendedRequestId","ip": "$context.identity.sourceIp", "caller":"$context.identity.caller", "user":"$context.identity.user", "requestTime":"$context.requestTime", "httpMethod":"$context.httpMethod", "resourcePath":"$context.resourcePath", "status":"$context.status", "protocol":"$context.protocol", "responseLength":"$context.responseLength" }
  ```
+ `XML`: 

  ```
  <request id="$context.requestId"> <extendedRequestId>$context.extendedRequestId</extendedRequestId> <ip>$context.identity.sourceIp</ip> <caller>$context.identity.caller</caller> <user>$context.identity.user</user> <requestTime>$context.requestTime</requestTime> <httpMethod>$context.httpMethod</httpMethod> <resourcePath>$context.resourcePath</resourcePath> <status>$context.status</status> <protocol>$context.protocol</protocol> <responseLength>$context.responseLength</responseLength> </request>
  ```
+ `CSV` (カンマ区切り値):

  ```
  $context.identity.sourceIp,$context.identity.caller,$context.identity.user,$context.requestTime,$context.httpMethod,$context.resourcePath,$context.protocol,$context.status,$context.responseLength,$context.requestId,$context.extendedRequestId
  ```

## CloudWatch によるログのアクセス許可
<a name="set-up-access-logging-permissions"></a>

CloudWatch Logs を有効にするには、API Gateway の CloudWatch に対するログの読み取りと書き込みのアクセス許可をアカウントに付与する必要があります。[AmazonAPIGatewayPushToCloudWatchLogs](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonAPIGatewayPushToCloudWatchLogs.html) には、必要なすべてのアクセス許可が含まれています。

**注記**  
API Gateway は IAM ロールを引き受けるために AWS Security Token Service を呼び出すため、リージョンで AWS STS が有効になっていることを確認します。詳細については、「[AWS リージョンでの AWS STS の管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html)」を参照してください。

これらのアクセス許可をアカウントに付与するには、`apigateway.amazonaws.com` を信頼できるエンティティとして IAM ロールを作成し、前述のポリシーを IAM ロールにアタッチして、その IAM ロールの ARN を[アカウント](https://docs.aws.amazon.com/apigateway/latest/api/API_GetAccount.html)の [cloudWatchRoleArn](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateAccount.html#cloudWatchRoleArn) プロパティに設定します。[cloudWatchRoleArn](https://docs.aws.amazon.com/apigateway/latest/api/API_UpdateAccount.html#cloudWatchRoleArn) プロパティは、CloudWatch Logs を有効にする AWS リージョンごとに設定する必要があります。

IAM ロール ARN の設定時にエラーが発生した場合は、AWS Security Token Service アカウントの設定をチェックして、使用しているリージョンで AWS STS が有効になっていることを確認してください。AWS STS を有効にする方法の詳細については、*IAM ユーザーガイド*の「[AWS リージョンでの AWS STS の管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html#sts-regions-activate-deactivate)」を参照してください。

## API Gateway コンソールを使用した CloudWatch による API のログの設定
<a name="set-up-access-logging-using-console"></a>

CloudWatch による API のログを設定するには、API をステージにデプロイしておく必要があります。また、アカウントに[適切な CloudWatch Logs ロール](#set-up-access-logging-permissions)の ARN を設定しておく必要があります。

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

1. メインナビゲーションペインで **[設定]** を選択し、**[ログ]** で **[編集]** を選択します。

1. **[CloudWatch ログのロール ARN]** に、適切な権限を持つ IAM ロールの ARN を入力します。API Gateway を使用して API を作成する AWS アカウント ごとにこれを実行する必要があります。

1. メインナビゲーションペインで、**[API]** を選択して、以下のいずれかを実行します。

   1.  既存の API を選択し、ステージを選択します。

   1.  API を作成してから、ステージにデプロイします。

1. メインナビゲーションペインで、**[ステージ]** を選択します。

1.  **[ログおよびトレース]** セクションで **[編集]** を選択します。

1. 実行ログ作成を有効にするには

   1. **[CloudWatch Logs]** ドロップダウンメニューからログ記録レベルを選択します。ログ記録レベルは、以下のとおりです。
      + **オフ** — この段階ではログ記録はオンになっていません。
      + **エラーのみ** — ログ記録はエラーに対してのみ有効になっています。
      + **エラーと情報ログ** — ログ記録はすべてのイベントに対して有効になっています。

   1. (オプション) **[データトレース]** を選択して、ステージのデータトレースログ記録を有効にします。このログは API のトラブルシューティングに役立ちますが、機密データが記録される可能性があります。
**注記**  
本番稼働用 API では **[データトレース]** を有効にしないことをお勧めします。

   1. (オプション) **[詳細メトリクス]** を選択して、詳細な CloudWatch メトリクスを有効にします。

   CloudWatch のメトリクスの詳細については、「[Amazon CloudWatch のメトリクスを使用して REST API の実行をモニタリングする](monitoring-cloudwatch.md)」を参照してください。

1. アクセスログの作成を有効にするには

   1. **[カスタムアクセスロギング]** を有効にします。

   1. **[アクセスログの送信先 ARN]** に、ロググループの ARNを入力します。ARN 形式は `arn:aws:logs:{region}:{account-id}:log-group:log-group-name` です。

   1. **[ログの形式]** にログの形式を入力します。**[CLF]**、**[JSON]**、**[XML]**、または **[CSV]** を選択できます。ログ形式の例について詳しくは、「[API Gateway での CloudWatch によるログの形式](#apigateway-cloudwatch-log-formats)」を参照してください。

1. **[Save changes]** (変更の保存) をクリックします。

**注記**  
実行ログとアクセスログを互いに独立して有効にすることができます。

これで、API Gateway で API へのリクエストのログを記録する準備が整いました。ステージ設定、ログ、またはステージ変数を更新するときに API を再デプロイする必要はありません。

## CloudFormation を使用した CloudWatch API ログ記録の設定
<a name="set-up-access-logging-using-cloudformation"></a>

次の CloudFormation テンプレート例を使用して Amazon CloudWatch Logs ロググループを作成し、ステージの実行およびアクセスログ記録を設定します。CloudWatch Logs を有効にするには、API Gateway の CloudWatch に対するログの読み取りと書き込みのアクセス許可をアカウントに付与する必要があります。詳細については、**「AWS CloudFormation ガイド」の「[アカウントに IAM ロールを関連付ける](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-account.html#aws-resource-apigateway-account--examples)」を参照してください。

```
  TestStage:
    Type: AWS::ApiGateway::Stage
    Properties:
      StageName: test
      RestApiId: !Ref MyAPI
      DeploymentId: !Ref Deployment
      Description: "test stage description"
      MethodSettings:
        - ResourcePath: "/*"
          HttpMethod: "*"
          LoggingLevel: INFO
      AccessLogSetting:
        DestinationArn: !GetAtt MyLogGroup.Arn
        Format: $context.extendedRequestId $context.identity.sourceIp $context.identity.caller $context.identity.user [$context.requestTime] "$context.httpMethod $context.resourcePath $context.protocol" $context.status $context.responseLength $context.requestId
  MyLogGroup:
    Type: AWS::Logs::LogGroup
    Properties:
      LogGroupName: !Join
        - '-'
        - - !Ref MyAPI
          - access-logs
```

# API Gateway で REST API コールのログを Amazon Data Firehose に記録する
<a name="apigateway-logging-to-kinesis"></a>

API へのクライアントのアクセスに関連する問題のデバッグに役立てるために、API コールのログを Amazon Data Firehose に記録できます。Firehose の詳細については、「[Amazon Data Firehose とは](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html)」を参照してください。

アクセスログでは、CloudWatch または Firehose のいずれかのみを有効にできます。両方を有効にすることはできません。ただし、実行ログで CloudWatch を有効にし、アクセスログで Firehose を有効にすることはできます。

**Topics**
+ [API Gateway の Firehose ログ形式](#apigateway-kinesis-log-formats)
+ [Firehose ログ記録のアクセス許可](#set-up-kinesis-access-logging-permissions)
+ [API Gateway コンソールを使用して Firehose アクセスログ記録を設定する](#set-up-kinesis-access-logging-using-console)

## API Gateway の Firehose ログ形式
<a name="apigateway-kinesis-log-formats"></a>

Firehose ログ記録では、[CloudWatch ログ記録](https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-logging.html)と同じ形式を使用します。

## Firehose ログ記録のアクセス許可
<a name="set-up-kinesis-access-logging-permissions"></a>

ステージで Firehose アクセスログ記録を有効にすると、API Gateway はアカウントにサービスリンクロールを作成します (ロールがまだ存在しない場合)。このロールは `AWSServiceRoleForAPIGateway` という名前で、`APIGatewayServiceRolePolicy` マネージドポリシーがロールにアタッチされます。サービスにリンクされたロールの詳細については、「[サービスにリンクされたロールの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)」を参照してください。

**注記**  
Firehose ストリームの名前は `amazon-apigateway-{your-stream-name}` にする必要があります。

## API Gateway コンソールを使用して Firehose アクセスログ記録を設定する
<a name="set-up-kinesis-access-logging-using-console"></a>

API ログ記録を設定するには、API をステージにデプロイしている必要があります。また、Firehose ストリームを作成している必要があります。

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

1.  次のいずれかを行います。

   1.  既存の API を選択し、ステージを選択します。

   1.  API を作成し、ステージにデプロイします。

1. メインナビゲーションペインで、**[ステージ]** を選択します。

1.  **[ログおよびトレース]** セクションで **[編集]** を選択します。

1. Firehose ストリームへのアクセスログ記録を有効にするには:

   1. **[カスタムアクセスロギング]** を有効にします。

   1. **[アクセスログの送信先 ARN]** に、Firehose ストリームの ARN を入力します。ARN 形式は `arn:aws:firehose:{region}:{account-id}:deliverystream/amazon-apigateway-{your-stream-name}` です。
**注記**  
Firehose ストリームの名前は `amazon-apigateway-{your-stream-name}` にする必要があります。

   1. **[ログの形式]** にログの形式を入力します。**[CLF]**、**[JSON]**、**[XML]**、または **[CSV]** を選択できます。ログ形式の例について詳しくは、「[API Gateway での CloudWatch によるログの形式](set-up-logging.md#apigateway-cloudwatch-log-formats)」を参照してください。

1. [**Save changes**] (変更の保存) をクリックします。

これで、API Gateway で API へのリクエストのログを Firehose に記録する準備が整いました。ステージ設定、ログ、またはステージ変数を更新するときに API を再デプロイする必要はありません。

# API Gateway のアクセスのログ記録のための変数
<a name="api-gateway-variables-for-access-logging"></a>

 アクセスログの作成では、API デベロッパーとして、API にアクセスしたユーザーと、呼び出し元が API にアクセスした方法を記録します。独自のロググループを作成したり、既存のロググループを選択したりすることができます。これらは、API Gateway で管理することができます。アクセスの詳細を指定するには、次の大文字と小文字が区別される `$context` 変数を使用できます。

データ変換の参照変数のリストについては、「[API Gateway のデータ変換の変数](api-gateway-mapping-template-reference.md)」を参照してください。


| パラメータ | 説明 | 
| --- | --- | 
| \$1context.accountId |  API 所有者の AWS アカウント ID。  | 
| \$1context.apiId |  API Gateway が API に割り当てる識別子。  | 
| \$1context.authorize.error | 認可エラーメッセージ。 | 
| \$1context.authorize.latency | 認可レイテンシー (ミリ秒単位)。 | 
| \$1context.authorize.status | 認可の試行から返されたステータスコード。 | 
| \$1context.authorizer.claims.property |  メソッドの呼び出し側が認証に成功した後に Amazon Cognito ユーザープールから返されるクレームのプロパティ。詳細については、「[Amazon Cognito ユーザープールをオーソライザーとして使用して REST API へのアクセスを制御する](apigateway-integrate-with-cognito.md)」を参照してください。  `$context.authorizer.claims` を呼び出すと NULL が返されます。   | 
| \$1context.authorizer.error | オーソライザーから返されたエラーメッセージ。 | 
| \$1context.authorizer.integrationLatency | 許可統合レイテンシー (ミリ秒)。 | 
| \$1context.authorizer.integrationStatus | Lambda オーソライザーから返されたステータスコード。 | 
| \$1context.authorizer.latency | オーソライザーのレイテンシー (ミリ秒単位)。 | 
| \$1context.authorizer.principalId |  クライアントにより送信され、API Gateway Lambda オーソライザー (以前のカスタムオーソライザー) から返されたトークンと関連付けられたプリンシパルユーザー ID。詳細については、「[API Gateway Lambda オーソライザーを使用する](apigateway-use-lambda-authorizer.md)」を参照してください。  | 
| \$1context.authorizer.property |  API Gateway Lambda オーソライザーの関数から返された `context` マップの指定されたキー/値ペアの文字列化された値。たとえば、オーソライザーが次の `context` マップを返すとします。 <pre>"context" : {<br />  "key": "value",<br />  "numKey": 1,<br />  "boolKey": true<br />}</pre> `$context.authorizer.key` の呼び出しでは `"value"` 文字列が返され、`$context.authorizer.numKey` の呼び出しでは `"1"` 文字列が返され、`$context.authorizer.boolKey` の呼び出しでは `"true"` 文字列が返されます。 *プロパティ* でサポートされる特殊文字は、アンダースコア `(_)` 文字のみです。 詳細については、「[API Gateway Lambda オーソライザーを使用する](apigateway-use-lambda-authorizer.md)」を参照してください。  | 
| \$1context.authorizer.requestId | AWS エンドポイントのリクエスト ID | 
| \$1context.authorizer.status | オーソライザーから返されたステータスコード。 | 
| \$1context.authenticate.error | 認証の試行から返されたエラーメッセージ。 | 
| \$1context.authenticate.latency | 認証レイテンシー (ミリ秒単位)。 | 
| \$1context.authenticate.status | 認証の試行から返されたステータスコード。 | 
| \$1context.awsEndpointRequestId |  AWS エンドポイントのリクエスト ID  | 
| \$1context.cipherSuite |  クライアントと API Gateway 間の TLS ハンドシェイク中にネゴシエートされる IANA 形式の暗号。 | 
| \$1context.customDomain.basePathMatched |  受信リクエストが一致した API マッピングのパス。クライアントがカスタムドメイン名を使用して API にアクセスする場合に適用されます。たとえば、クライアントがリクエストを `https://api.example.com/v1/orders/1234` に送信し、リクエストがパス `v1/orders` を持つ API マッピングと一致する場合 、値は `v1/orders` になります。詳細については[API マッピングを使用して、API ステージを REST API のカスタムドメイン名に接続します。](rest-api-mappings.md)を参照してください。  | 
| \$1context.customDomain.routingRuleIdMatched | 受信リクエストが一致したルーティングルール。クライアントがカスタムドメイン名を使用して API にアクセスする場合に適用されます。詳細については[API ステージを REST API のカスタムドメイン名に接続するためのルーティングルール](rest-api-routing-rules.md)を参照してください。 | 
| \$1context.deploymentId | API デプロイの ID。 | 
| \$1context.domainName |  API の呼び出しに使用された完全ドメイン名。これは、受信 `Host` ヘッダーと同じである必要があります。  | 
| \$1context.domainPrefix |  `$context.domainName` の 1 つ目のラベル。  | 
| \$1context.endpointType | API のエンドポイントタイプ。 | 
| \$1context.error.message |  API Gateway のエラーメッセージを含む文字列。この変数は、Velocity Template Language エンジン、およびアクセスログ記録では処理されない、[GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html) 本文マッピングテンプレートの単純な変数の置換でのみ使用できます。詳細については、「[CloudWatch メトリクスを使用して WebSocket API の実行をモニタリングする](apigateway-websocket-api-logging.md)」および「[エラーレスポンスをカスタマイズするためのゲートウェイレスポンスのセットアップ](api-gateway-gatewayResponse-definition.md#customize-gateway-responses)」を参照してください。  | 
| \$1context.error.messageString | \$1context.error.message を引用符で囲んだ値、つまり "\$1context.error.message"。 | 
| \$1context.error.responseType |  [GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html) の [type](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html#responseType)。この変数は、Velocity Template Language エンジン、およびアクセスログ記録では処理されない、[GatewayResponse](https://docs.aws.amazon.com/apigateway/latest/api/API_GatewayResponse.html) 本文マッピングテンプレートの単純な変数の置換でのみ使用できます。詳細については、「[CloudWatch メトリクスを使用して WebSocket API の実行をモニタリングする](apigateway-websocket-api-logging.md)」および「[エラーレスポンスをカスタマイズするためのゲートウェイレスポンスのセットアップ](api-gateway-gatewayResponse-definition.md#customize-gateway-responses)」を参照してください。  | 
| \$1context.error.validationErrorString |  詳細な検証エラーメッセージを含む文字列。  | 
| \$1context.extendedRequestId | API Gateway が生成して API リクエストに割り当てる拡張 ID。拡張リクエスト ID には、デバッグとトラブルシューティングに役立つ情報が含まれています。 | 
| \$1context.httpMethod |  使用される HTTP メソッドです。有効な値には、`DELETE`、`GET`、`HEAD`、`OPTIONS`、`PATCH`、`POST` および `PUT` があります。  | 
| \$1context.identity.accountId |  リクエストに関連付けられた AWS アカウント ID です。  | 
| \$1context.identity.apiKey |  API キーを必要とする API メソッドの場合、この変数はメソッドリクエストに関連付けられている API キーです。API キーを必要としないメソッドの場合、この変数は null になります。詳細については、「[API Gateway での REST API の使用量プランと API キー](api-gateway-api-usage-plans.md)」を参照してください。  | 
| \$1context.identity.apiKeyId | API キーを必要とする API リクエストに関連付けられた API キー ID。 | 
| \$1context.identity.caller |  リクエストに署名した発信者のプリンシパル ID。IAM 認可を使用するリソースでサポートされています。  | 
| \$1context.identity.cognitoAuthenticationProvider |  リクエスト元の発信者が使用するすべての Amazon Cognito 認証プロバイダーのカンマ区切りのリスト。リクエストが Amazon Cognito 認証情報で署名されている場合にのみ使用できます。 たとえば、Amazon Cognito ユーザープールのアイデンティティの場合、`cognito-idp. region.amazonaws.com/user_pool_id,cognito-idp.region.amazonaws.com/user_pool_id:CognitoSignIn:token subject claim` 利用可能な Amazon Cognito 認証プロバイダーについては、「Amazon Cognito 開発者ガイド」の「[フェデレーティッド ID の使用](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-identity.html)」を参照してください。** | 
| \$1context.identity.cognitoAuthenticationType |  リクエストを行う発信者の Amazon Cognito 認証タイプ。リクエストが Amazon Cognito 認証情報で署名されている場合にのみ使用できます。有効な値は、認証されたアイデンティティ`authenticated`および認証されていないアイデンティティ`unauthenticated`です。 | 
| \$1context.identity.cognitoIdentityId |  リクエストを行う発信者の Amazon Cognito ID。リクエストが Amazon Cognito 認証情報で署名されている場合にのみ使用できます。  | 
| \$1context.identity.cognitoIdentityPoolId |  リクエストを行う発信者の Amazon Cognito ID プール ID。リクエストが Amazon Cognito 認証情報で署名されている場合にのみ使用できます。  | 
| \$1context.identity.principalOrgId |  [AWS 組織 ID](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_details.html)。  | 
| \$1context.identity.sourceIp |  API Gateway エンドポイントへのリクエストを行う即時 TCP 接続のソース IP アドレス。  | 
| \$1context.identity.clientCert.clientCertPem |  クライアントが相互 TLS 認証中に提示した PEM エンコードされたクライアント証明書。相互 TLS が有効なカスタムドメイン名を使用してクライアントが API にアクセスすると、アクセスログに存在します。相互 TLS 認証が失敗した場合にのみ、アクセスログに存在します。  | 
| \$1context.identity.clientCert.subjectDN |  クライアントが提示する証明書のサブジェクトの識別名。相互 TLS が有効なカスタムドメイン名を使用してクライアントが API にアクセスすると、アクセスログに存在します。相互 TLS 認証が失敗した場合にのみ、アクセスログに存在します。  | 
| \$1context.identity.clientCert.issuerDN |  クライアントが提示する証明書の発行者の識別名。相互 TLS が有効なカスタムドメイン名を使用してクライアントが API にアクセスすると、アクセスログに存在します。相互 TLS 認証が失敗した場合にのみ、アクセスログに存在します。  | 
| \$1context.identity.clientCert.serialNumber |  証明書のシリアル番号。相互 TLS が有効なカスタムドメイン名を使用してクライアントが API にアクセスすると、アクセスログに存在します。相互 TLS 認証が失敗した場合にのみ、アクセスログに存在します。  | 
| \$1context.identity.clientCert.validity.notBefore |  証明書が無効になる前の日付。相互 TLS が有効なカスタムドメイン名を使用してクライアントが API にアクセスすると、アクセスログに存在します。相互 TLS 認証が失敗した場合にのみ、アクセスログに存在します。  | 
| \$1context.identity.clientCert.validity.notAfter |  証明書が無効になった日付。相互 TLS が有効なカスタムドメイン名を使用してクライアントが API にアクセスすると、アクセスログに存在します。相互 TLS 認証が失敗した場合にのみ、アクセスログに存在します。  | 
|  \$1context.identity.vpcId | API Gateway エンドポイントへのリクエストを行う VPC の VPC ID。 | 
|  \$1context.identity.vpceId |  API Gateway エンドポイントへのリクエストを行う VPC エンドポイントの VPC エンドポイント ID。プライベート API がある場合にのみ表示されます。  | 
| \$1context.identity.user |  リソースアクセスに対して許可されるユーザーのプリンシパル識別子。IAM 認可を使用するリソースでサポートされています。  | 
| \$1context.identity.userAgent |  API 発信者の [https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent) ヘッダー。  | 
| \$1context.identity.userArn |  認証後に識別された有効ユーザーの Amazon リソースネーム (ARN) です。詳細については、「[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)」を参照してください。  | 
| \$1context.integration.error | 統合から返されたエラーメッセージ。 | 
| \$1context.integration.integrationStatus | Lambda プロキシ統合の場合、バックエンドの Lambda 関数コードからではなく、AWS Lambda から返されるステータスコード。 | 
| \$1context.integration.latency | 統合レイテンシー (ミリ秒)。これは \$1context.integrationLatency と同等です。 | 
| \$1context.integration.requestId | AWS エンドポイントのリクエスト ID これは \$1context.awsEndpointRequestId と同等です。 | 
| \$1context.integration.responseTransferMode | 統合のレスポンス転送モード。BUFFERED または STREAMED のいずれかとなります。 | 
| \$1context.integration.status | 統合から返されたステータスコード。Lambda プロキシ統合では、これは Lambda 関数コードから返されたステータスコードです。 | 
| \$1context.integration.timeToAllHeaders | API Gateway が統合接続を確立してから、クライアントからすべての統合レスポンスヘッダーを受信するまでの時間。 | 
| \$1context.integration.timeToFirstContent | API Gateway が統合接続を確立してから、最初のコンテンツバイトを受信するまでの時間。 | 
| \$1context.integrationLatency | 統合レイテンシー (ミリ秒)。 | 
| \$1context.integrationStatus | Lambda プロキシ統合の場合、このパラメータはバックエンド Lambda 関数コードからではなく、AWS Lambda から返されるステータスコードを表します。 | 
| \$1context.isCanaryRequest |  リクエストが canary に送信された場合は `true` を返し、リクエストが canary に送信されなかった場合は `false` を返します。canary が有効になっている場合にのみ表示されます。 | 
| \$1context.path | リクエストパス。たとえば、https://\$1rest-api-id\$1.execute-api.\$1region\$1.amazonaws.com/\$1stage\$1/root/child の非プロキシリクエスト URL の場合、\$1context.path 値は /\$1stage\$1/root/child。 | 
| \$1context.protocol | HTTP/1.1 などのリクエストプロトコル。 API Gateway API は HTTP/2 リクエストを受け入れることができますが、API Gateway は HTTP/1.1 を使用してバックエンド統合にリクエストを送信します。その結果、クライアントが HTTP/2 を使用するリクエストを送信した場合でも、リクエストプロトコルは HTTP/1.1 として記録されます。   | 
| \$1context.requestId |  リクエストの ID。クライアントは、このリクエスト ID を上書きできます。API Gateway が生成する一意のリクエスト ID に `$context.extendedRequestId` を使用します。  | 
| \$1context.requestOverride.header.header\$1name |  リクエストヘッダーオーバーライド。このパラメータが定義されている場合、[**Integration Request (統合リクエスト)**] ペインで定義されている [**HTTP Headers (HTTP ヘッダー)**] の代わりに使用されるヘッダーが含まれます。詳細については、「[API Gateway で REST API の API リクエストパラメータおよびレスポンスパラメータとステータスコードを上書きする](apigateway-override-request-response-parameters.md)」を参照してください。  | 
| \$1context.requestOverride.path.path\$1name |  リクエストパスオーバーライド。このパラメータが定義されている場合、[**Integration Request (統合リクエスト)**] ペインで定義されている [**URL Path Parameters (URL パスパラメータ)**] の代わりに使用されるリクエストパスが含まれます。詳細については、「[API Gateway で REST API の API リクエストパラメータおよびレスポンスパラメータとステータスコードを上書きする](apigateway-override-request-response-parameters.md)」を参照してください。  | 
| \$1context.requestOverride.querystring.querystring\$1name |  リクエストクエリ文字列オーバーライド。このパラメータが定義されている場合、[**Integration Request (統合リクエスト)**] ペインで定義されている [**URL Query String Parameters (URL クエリ文字列パラメータ)**] の代わりに使用されるリクエストクエリ文字列が含まれます。詳細については、「[API Gateway で REST API の API リクエストパラメータおよびレスポンスパラメータとステータスコードを上書きする](apigateway-override-request-response-parameters.md)」を参照してください。  | 
| \$1context.responseLatency | レスポンスレイテンシー (ミリ秒)。 | 
| \$1context.responseLength | レスポンスペイロードの長さ (バイト単位)。 | 
| \$1context.responseOverride.header.header\$1name | レスポンスヘッダーオーバーライド。このパラメータが定義されている場合、[Integration Response (統合レスポンス)] ペインの [Default mapping (デフォルトのマッピング)] として定義されている [Response header (レスポンスヘッダー)] の代わりに返されるヘッダーが含まれます。詳細については、「[API Gateway で REST API の API リクエストパラメータおよびレスポンスパラメータとステータスコードを上書きする](apigateway-override-request-response-parameters.md)」を参照してください。 | 
| \$1context.responseOverride.status | レスポンスステータスコードオーバーライド。このパラメータが定義されている場合、[Integration Response (統合レスポンス)] ペインの [Default mapping (デフォルトのマッピング)] として定義されている [Method response status (メソッドレスポンスのステータス)] の代わりに返されるステータスコードが含まれます。詳細については、「[API Gateway で REST API の API リクエストパラメータおよびレスポンスパラメータとステータスコードを上書きする](apigateway-override-request-response-parameters.md)」を参照してください。 | 
| \$1context.requestTime | [CLF](https://httpd.apache.org/docs/current/logs.html#common) 形式の要求時間 (dd/MMM/yyyy:HH:mm:ss \$1-hhmm)。 | 
| \$1context.requestTimeEpoch | [エポック](https://en.wikipedia.org/wiki/Unix_time)形式のリクエスト時間 (ミリ秒単位)。 | 
| \$1context.resourceId |  API Gateway がリソースに割り当てる識別子です。  | 
| \$1context.resourcePath |  リソースへのパスです。たとえば、`https://{rest-api-id}.execute-api.{region}.amazonaws.com/{stage}/root/child` の非プロキシリクエスト URI の場合、`$context.resourcePath` 値は `/root/child`。詳細については、「[チュートリアル: HTTP 非プロキシ統合を使用して REST API を作成する](api-gateway-create-api-step-by-step.md)」を参照してください。  | 
| \$1context.stage |  API リクエストのデプロイステージ (`Beta`、`Prod` など)。  | 
| \$1context.status | メソッドレスポンスのステータス。 | 
| \$1context.tlsVersion |  クライアントと API Gateway 間の TLS ハンドシェイク中にネゴシエートされる TLS バージョン。 | 
| \$1context.waf.error |  から返されたエラーメッセージAWS WAF | 
| \$1context.waf.latency | AWS WAF レイテンシー (ミリ秒単位)。 | 
| \$1context.waf.status |  から返されたステータスコードAWS WAF | 
| \$1context.xrayTraceId |  X-Rayトレースのトレース ID。詳細については、「[API Gateway REST API で AWS X-Ray を設定する](apigateway-enabling-xray.md)」を参照してください。  | 
| \$1context.wafResponseCode |  [AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-chapter.html) から受け取ったレスポンス: `WAF_ALLOW` または `WAF_BLOCK`。ステージがウェブ ACL に関連付けられていない場合は、設定されません。詳細については、「[AWS WAF を使用して API Gateway の REST API を保護する](apigateway-control-access-aws-waf.md)」を参照してください。  | 
| \$1context.webaclArn |  リクエストを許可するかブロックするかを決定するために使用されるウェブ ACL の完全な ARN。ステージがウェブ ACL に関連付けられていない場合は、設定されません。詳細については、「[AWS WAF を使用して API Gateway の REST API を保護する](apigateway-control-access-aws-waf.md)」を参照してください。  | 

# API Gateway で X-Ray を使用して REST API へのユーザーリクエストをトレースする
<a name="apigateway-xray"></a>

[AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-apigateway.html) を使用して、Amazon API Gateway の REST API から基盤となるサービスへのユーザーリクエストの流れをトレースして分析することができます。API Gateway では、API Gateway のすべての REST API エンドポイントタイプ (リージョン、エッジ最適化、プライベート) で X-Ray によるトレースがサポートされています。X-Ray は、X-Ray を利用できるすべての AWS リージョンで Amazon API Gateway と併用できます。

X-Ray では、リクエスト全体をエンドツーエンドで確認できるため、API とそのバックエンドのサービスのレイテンシーを分析することができます。X-Ray のサービスマップを使用して、リクエスト全体のレイテンシーや X-Ray と統合されているダウンストリームのサービスのレイテンシーを確認できます。また、サンプリングルールを設定することで、X-Ray で記録するリクエストとサンプリングレートを条件に応じて指定できます。

既にトレースされているサービスから API Gateway の API を呼び出すと、API Gateway はその API に対して X-Ray によるトレースが有効になっていない場合でもトレースを行います。

X-Ray は、API のステージに対して、API Gateway コンソールを使用するか、API Gateway の API または CLI を使用して有効にすることができます。

**Topics**
+ [API Gateway REST API で AWS X-Ray を設定する](apigateway-enabling-xray.md)
+ [API Gateway で AWS X-Ray サービスマップとトレースビューを使用する](apigateway-using-xray-maps.md)
+ [API Gateway API の AWS X-Ray サンプリングルールを設定する](apigateway-configuring-xray-sampling-rules.md)
+ [Amazon API Gateway API に対する AWS X-Ray トレース](apigateway-understanding-xray-traces.md)

# API Gateway REST API で AWS X-Ray を設定する
<a name="apigateway-enabling-xray"></a>

このセクションでは、API Gateway REST API を使用して [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-apigateway.html) をセットアップする方法について詳しく説明します。

**Topics**
+ [API Gateway での X-Ray のトレースモード](#apigateway-tracing-modes)
+ [X-Ray によるトレースのアクセス許可](#set-up-xray-tracing-permissions)
+ [API Gateway コンソールでの X-Ray によるトレースの有効化](#apigateway-xray-console-setup)
+ [API Gateway CLI を使用した AWS X-Ray トレースの有効化](#apigateway-xray-cli-setup)

## API Gateway での X-Ray のトレースモード
<a name="apigateway-tracing-modes"></a>

アプリケーションを経由するリクエストのパスは、トラック ID を使用して追跡されます。トレースでは、1 つのリクエスト (通常は HTTP `GET` または `POST` リクエスト) で生成されたセグメントをすべて収集します。

API Gateway の API のトレースには、次の 2 つのモードがあります。
+ **パッシブ**: API のステージに対して X-Ray によるトレースを有効にしていない場合は、これがデフォルトの設定です。この方法では、API Gateway の API は、アップストリームのサービスで X-Ray が有効になっている場合にのみトレースされます。
+ **アクティブ**: API Gateway の API のステージに対してこの設定を行っている場合、API Gateway は X-Ray で指定されているサンプリングアルゴリズムに基づいて API の呼び出しのリクエストを自動でサンプリングします。

  ステージに対してアクティブトレースを有効にすると、サービスにリンクされたロールがアカウントにない場合は API Gateway によってロールが作成されます。このロールは `AWSServiceRoleForAPIGateway` という名前で、`APIGatewayServiceRolePolicy` マネージドポリシーがロールにアタッチされます。サービスにリンクされたロールの詳細については、「[サービスにリンクされたロールの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)」を参照してください。
**注記**  
X-Ray はサンプリングアルゴリズムを適用することでトレースを効率的にしつつ、API が受け取るリクエストの代表的なサンプルを提供します。デフォルトのサンプリングアルゴリズムは 1 秒間につき 1 リクエストで、この制限を超えた場合はリクエストの 5 パーセントがサンプリングされます。

API のトレースモードは、API Gateway マネジメントコンソール、API Gateway CLI、または AWS SDK を使用して変更できます。

## X-Ray によるトレースのアクセス許可
<a name="set-up-xray-tracing-permissions"></a>

ステージに対して X-Ray によるトレースを有効にすると、サービスにリンクされたロールがアカウントにない場合は API Gateway によってロールが作成されます。このロールは `AWSServiceRoleForAPIGateway` という名前で、`APIGatewayServiceRolePolicy` マネージドポリシーがロールにアタッチされます。サービスにリンクされたロールの詳細については、「[サービスにリンクされたロールの使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)」を参照してください。

## API Gateway コンソールでの X-Ray によるトレースの有効化
<a name="apigateway-xray-console-setup"></a>

Amazon API Gateway コンソールを使用して、API のステージに対してアクティブトレースを有効にすることができます。

これらのステップでは、すでに API をステージにデプロイしていることを前提としています。

1. API Gateway コンソール ([https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway)) にサインインします。

1. API を選択し、メインナビゲーションペインで **[ステージ]** を選択します。

1. **[ステージ]** ペインで、ステージを選択します。

1. **[ログおよびトレース]** セクションで **[編集]** を選択します。

1. X-Ray によるアクティブトレースを有効にするには、**[X-Ray トレース]** を選択して、X-Ray トレースを有効にします。

1. [**Save changes**] (変更の保存) をクリックします。

API のステージに対して X-Ray を有効にすると、X-Ray マネジメントコンソールを使用してトレースとサービスマップを表示できます。

## API Gateway CLI を使用した AWS X-Ray トレースの有効化
<a name="apigateway-xray-cli-setup"></a>

次の [create-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-stage.html) コマンドは、アクティブ X-Ray トレースありでステージを作成します。

```
aws apigateway create-stage \
    --rest-api-id rest-api-id \
    --stage-name stage-name \
    --deployment-id deployment-id \
    --region region \
    --tracing-enabled=true
```

出力は次のようになります。

```
{
    "tracingEnabled": true, 
    "stageName": stage-name, 
    "cacheClusterEnabled": false, 
    "cacheClusterStatus": "NOT_AVAILABLE", 
    "deploymentId": deployment-id, 
    "lastUpdatedDate": 1533849811, 
    "createdDate": 1533849811, 
    "methodSettings": {}
}
```

次の [create-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/create-stage.html) コマンドは、アクティブ X-Ray トレースなしでステージを作成します。

```
aws apigateway create-stage \
    --rest-api-id rest-api-id \
    --stage-name stage-name \
    --deployment-id deployment-id \
    --region region \
    --tracing-enabled=false
```

出力は次のようになります。

```
{
    "tracingEnabled": false, 
    "stageName": stage-name, 
    "cacheClusterEnabled": false, 
    "cacheClusterStatus": "NOT_AVAILABLE", 
    "deploymentId": deployment-id, 
    "lastUpdatedDate": 1533849811, 
    "createdDate": 1533849811, 
    "methodSettings": {}
}
```

次の [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) は、デプロイされた API のアクティブ X-Ray トレースをオンにします。

```
aws apigateway update-stage \
    --rest-api-id rest-api-id \
    --stage-name stage-name \
    --patch-operations op=replace,path=/tracingEnabled,value=true
```

次の [update-stage](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-stage.html) は、デプロイされた API のアクティブ X-Ray トレースをオフにします。

```
aws apigateway update-stage \
    --rest-api-id rest-api-id \
    --stage-name stage-name \
    --region region \
    --patch-operations op=replace,path=/tracingEnabled,value=false
```

出力は次のようになります。

```
{
    "tracingEnabled": false, 
    "stageName": stage-name, 
    "cacheClusterEnabled": false, 
    "cacheClusterStatus": "NOT_AVAILABLE", 
    "deploymentId": deployment-id, 
    "lastUpdatedDate": 1533850033, 
    "createdDate": 1533849811, 
    "methodSettings": {}
}
```

API のステージに対して X-Ray を有効にしたら、X-Ray CLI を使用してトレース情報を取得します。詳細については、「[AWS CLI での X-Ray API の使用](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-api.html#xray-api-tutorial)」を参照してください。

# API Gateway で AWS X-Ray サービスマップとトレースビューを使用する
<a name="apigateway-using-xray-maps"></a>

このセクションでは、[AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-apigateway.html) サービスマップとトレースビューを API Gateway で使用する方法について詳しく説明します。

**Topics**
+ [X-Ray のサービスマップの例](#apigateway-using-xray-maps-active)
+ [X-Ray のトレースビューの例](#apigateway-using-xray-trace-view-active)

## X-Ray のサービスマップの例
<a name="apigateway-using-xray-maps-active"></a>

AWS X-Ray サービスマップは、API とそのすべてのダウンストリームサービスに関する情報を表示します。API Gateway で API のステージに対して X-Ray を有効にすると、サービスマップにノードが表示され、API Gateway のサービスにかかった全体の時間についての情報が示されます。レスポンスのステータスに関する詳細情報、および選択されたタイムフレームの API 応答時間のヒストグラムを取得できます。AWS Lambda や Amazon DynamoDB などの AWS のサービスと統合している API では、それらのサービスに関連するパフォーマンスメトリクスを提供するノードの数が多くなります。API ステージごとにサービスマップが作成されます。

以下の例に示しているのは、`test` という API の `xray` ステージのサービスマップです。この API には 2 つの Lambda 統合があります。ノードは、API Gateway サービス、と 2 つの Lambda 関数を表しています。

サービスマップ構造の詳細については、「[X-Ray トレースマップを使用する](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html#xray-console-servicemap)」を参照してください。

![\[API Gateway の API のステージのサービスマップの例\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/images/apigateway-xray-servicemap-2.png)


サービスマップから拡大して API ステージのトレースビューを表示できます。トレースには、API に関する詳細情報が、セグメントおよびサブセグメントとして表示されます。例えば、上記のサービスマップのトレースには、Lambda サービスと Lambda 関数のセグメントが含まれます。詳細については、[AWS LambdaおよびAWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/xray-services-lambda.html)を参照してください。

X-Ray のサービスマップでノードまたはエッジを選択すると、X-Ray コンソールにレイテンシーの分布のヒストグラムが表示されます。レイテンシーのヒストグラムを使用して、サービスでリクエストを完了するのにかかる時間を確認できます。次の図は、上記のサービスマップの `xray/test` という API Gateway のステージのヒストグラムです。レイテンシー分散ヒストグラムの詳細については、「[レイテンシーのヒストグラムを使用する](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html#xray-console-histograms)」を参照してください。

![\[API Gateway の API のステージの X-Ray のヒストグラム\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/images/apigateway-xray-histogram-1.png)


## X-Ray のトレースビューの例
<a name="apigateway-using-xray-trace-view-active"></a>

次の図は、Lambda バックエンド関数を使用して、上記のサンプル API で生成されたトレース ビューを示しています。正常に行われた API メソッドリクエストと、レスポンスコード 200 を示しています。

トレースビューの詳細については、「[トレースとトレースの詳細を表示する](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html#xray-console-traces)」を参照してください。

![\[アクティブトレースを有効にした API Gateway\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/images/apigateway-xray-traceview-1.png)


# API Gateway API の AWS X-Ray サンプリングルールを設定する
<a name="apigateway-configuring-xray-sampling-rules"></a>

AWS X-Ray コンソールまたは SDK を使用して、Amazon API Gateway API のサンプリングルールを設定できます。サンプリングルールでは、API で X-Ray が記録するリクエストを指定します。サンプリングルールをカスタマイズすることで、コードを変更または再デプロイすることなく、その場で、記録するレコードの量を制御したり、サンプリング動作を変更したりできます。

X-Ray のサンプリングルールを指定する前に、X-Ray デベロッパーガイドの以下のトピックを参照してください。
+ [サンプリングルールを設定する](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html#xray-console-sampling)
+ [X-Ray API でのサンプリングルールの使用](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-api.html#xray-api-sampling)

**Topics**
+ [API Gateway の API に関連する X-Ray のサンプリングルールのオプション値](#apigateway-xray-sampling-rule-options)
+ [X-Ray のサンプリングルールの例](#apigateway-xray-sampling-rules-examples)

## API Gateway の API に関連する X-Ray のサンプリングルールのオプション値
<a name="apigateway-xray-sampling-rule-options"></a>

API Gateway に関連する X-Ray のサンプリングのオプションを以下に示します。文字列値では、ワイルドカードを使用して、1 つの文字列 (?) またはゼロ以上の文字 (\$1) に一致させることができます。**[リザーバ]** 設定と **[レート]** 設定の使用方法などの詳細な説明については、「[サンプリングルールを設定する](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html#xray-console-sampling)」を参照してください。
+ [**Rule name (ルール名)**] (文字列) - ルールの一意の名前。
+ [**Priority (優先度)**] (1～9999 の整数) - サンプリングルールの優先度。サービスでは、優先度の昇順でルールが評価され、一致する最初のルールを使用してサンプリングの決定が行われます。
+ [**Reservoir (リザーバ)**] (負ではない整数) - 固定レートを適用するまでに 1 秒あたりの一致するリクエストを計測する上限の固定数。リザーバはサービスで直接使用されませんが、ルールを一括して使用するすべてのサービスに適用されます。
+ [**Rate (レート)**] (0～100) - リザーバの上限に達した後に一致するリクエストを計測するサンプリング率。
+ [**Service name (サービス名)**] (文字列) - ***\$1api-name\$1*/*\$1stage-name\$1*** 形式の API のステージ名。たとえば、[PetStore](api-gateway-create-api-from-example.md) サンプル API を `test` というステージにデプロイする場合、サンプリングルールで指定する [**サービス名**] の値は **pets/test** となります。
+ [**Service type (サービスタイプ)**] (文字列) - API Gateway の API では、**AWS::ApiGateway::Stage** または **AWS::ApiGateway::\$1** を指定できます。
+ [**Host (ホスト)**] (文字列) - HTTP ヘッダーの Host のホスト名。これを **\$1** に設定すると、すべてのホスト名に対して一致します。または、一致させる完全なホスト名または部分的なホスト名を指定できます (例: **api.example.com** または **\$1.example.com**)。
+ [**Resource ARN**] (リソース ARN) (文字列) - API ステージの ARN (**arn:aws:apigateway:*region*::/restapis/*api-id*/stages/*stage-name*** など)。

  ステージ名は、コンソールや API Gateway の CLI または API から取得できます。ARN 形式の詳細については、「[Amazon Web Services 全般のリファレンス](https://docs.aws.amazon.com/general/latest/gr/)」を参照してください。
+ [**HTTP method (HTTP メソッド)**] (文字列) - サンプリングするメソッド (例: **GET**)。
+ **[URL path]** (URL パス) (文字列) — リクエストの URL パス。
+ (オプション) [**Attributes (属性)**] (キーと値) - 元の HTTP リクエストのヘッダー (例: **Connection**、**Content-Length**、**Content-Type**)。各属性の値は、最大 32 文字とすることができます。

## X-Ray のサンプリングルールの例
<a name="apigateway-xray-sampling-rules-examples"></a>

**サンプリングルールの例 1**

このルールでは、`GET` ステージの `testxray` API に対するすべての `test` リクエストをサンプリングします。
+ **ルール名 - ****test-sampling**
+ **優先度 - ****17**
+ **リザーバのサイズ - ****10**
+ **固定レート - ****10**
+ **サービス名 - ****testxray/test**
+ **サービスタイプ - ****AWS::ApiGateway::Stage**
+ **HTTP メソッド - ****GET**
+ **リソース ARN - ****\$1**
+ **ホスト - ****\$1**

**サンプリングルールの例 2**

このルールでは、`testxray` ステージの `prod` API に対するすべてのリクエストをサンプリングします。
+ **ルール名 - ****prod-sampling**
+ **優先度 - ****478**
+ **リザーバのサイズ - ****1**
+ **固定レート - ****60**
+ **サービス名 - ****testxray/prod**
+ **サービスタイプ - ****AWS::ApiGateway::Stage**
+ **HTTP メソッド - ****\$1**
+ **リソース ARN - ****\$1**
+ **ホスト - ****\$1**
+ **属性** - **\$1\$1**

# Amazon API Gateway API に対する AWS X-Ray トレース
<a name="apigateway-understanding-xray-traces"></a>

このセクションでは、Amazon API Gateway API に対する AWS X-Ray トレースのセグメント、サブセグメント、およびその他のトレースフィールドについて説明します。

このセクションを読む前に、X-Ray デベロッパーガイドの以下のトピックを参照してください。
+  [AWS マネジメントコンソールを使用する](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html)
+  [X-Ray セグメントドキュメント](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-api.html#xray-api-segmentdocuments)
+ [概念](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html#xray-concepts)

**Topics**
+ [API Gateway の API のトレースに関連するオブジェクトの例](#apigateway-understanding-xray-traces-example-segments)
+ [トレースについて](#apigateway-understanding-xray-traces-segments)

## API Gateway の API のトレースに関連するオブジェクトの例
<a name="apigateway-understanding-xray-traces-example-segments"></a>

このセクションでは、API Gateway の API のトレースに関連するいくつかのオブジェクトについて説明します。

**注釈**

注釈は、セグメントとサブセグメントに表示されます。これらは、トレースをフィルタリングするために、サンプリングルールでフィルタ式として使用されます。詳細については、「[サンプリングルールを設定する](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html#xray-console-sampling)」を参照してください。

`annotations` オブジェクトの例を以下に示します。この例では、API のステージは、API の ID と API のステージ名によって識別されます。

```
"annotations": {
    "aws:api_id": "a1b2c3d4e5",
    "aws:api_stage": "dev"
}
```

注釈の詳細については、[X-Ray セグメントドキュメント](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-api.html#xray-api-segmentdocuments)を参照してから、「**X-Ray セグメントドキュメント**」、「**注釈**」の順に選択します。

**AWS リソースデータ**

`aws` オブジェクトは、セグメントでのみ使用されます。次に示す例は、デフォルトのサンプリングルールに一致する `aws` オブジェクトです。サンプリングルールの詳細については、「[サンプリングルールを設定する](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-console.html#xray-console-sampling)」を参照してください。

```
"aws": {
    "xray": {
        "sampling_rule_name": "Default"
    },
    "api_gateway": {
        "account_id": "123412341234",
        "rest_api_id": "a1b2c3d4e5",
        "stage": "dev",
        "request_id": "a1b2c3d4-a1b2-a1b2-a1b2-a1b2c3d4e5f6"
    }
}
```

`aws` オブジェクトの詳細については、[X-Ray セグメントドキュメント](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-api.html#xray-api-segmentdocuments)を参照してから、「**X-Ray セグメントドキュメント**」、「**AWS リソースデータ**」の順に選択します。

## トレースについて
<a name="apigateway-understanding-xray-traces-segments"></a>

次の例は、API Gateway のステージのトレースのセグメントを示しています。トレースセグメントを構成するフィールドの詳細については、[X-Ray セグメントドキュメント](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray-interface-api.html#xray-api-segmentdocuments)を参照してください。

```
        {
            "Document": {
                "id": "a1b2c3d4a1b2c3d4",
                "name": "testxray/dev",
                "start_time": 1533928226.229,
                "end_time": 1533928226.614,
                "metadata": {
                    "default": {
                        "extended_request_id": "abcde12345abcde=",
                        "request_id": "a1b2c3d4-a1b2-a1b2-a1b2-a1b2c3d4e5f6"
                    }
                },
                "http": {
                    "request": {
                        "url": "https://example.com/dev?username=demo&message=hellofromdemo/",
                        "method": "GET",
                        "client_ip": "192.0.2.0",
                        "x_forwarded_for": true
                    },
                    "response": {
                        "status": 200,
                        "content_length": 0
                    }
                },
                "aws": {
                    "xray": {
                        "sampling_rule_name": "Default"
                    },
                    "api_gateway": {
                        "account_id": "123412341234",
                        "rest_api_id": "a1b2c3d4e5",
                        "stage": "dev",
                        "request_id": "a1b2c3d4-a1b2-a1b2-a1b2-a1b2c3d4e5f6"
                    }
                },
                "annotations": {
                    "aws:api_id": "a1b2c3d4e5",
                    "aws:api_stage": "dev"
                },
                "trace_id": "1-a1b2c3d4-a1b2c3d4a1b2c3d4a1b2c3d4",
                "origin": "AWS::ApiGateway::Stage",
                "resource_arn": "arn:aws:apigateway:us-east-1::/restapis/a1b2c3d4e5/stages/dev",
                "subsegments": [
                    {
                        "id": "abcdefgh12345678",
                        "name": "Lambda",
                        "start_time": 1533928226.233,
                        "end_time": 1533928226.6130002,
                        "http": {
                            "request": {
                                "url": "https://example.com/2015-03-31/functions/arn:aws:lambda:us-east-1:123412341234:function:xray123/invocations",
                                "method": "GET"
                            },
                            "response": {
                                "status": 200,
                                "content_length": 62
                            }
                        },
                        "aws": {
                            "function_name": "xray123",
                            "region": "us-east-1",
                            "operation": "Invoke",
                            "resource_names": [
                                "xray123"
                            ]
                        },
                        "namespace": "aws"
                    }
                ]
            },
            "Id": "a1b2c3d4a1b2c3d4"
        }
```