API Gateway REST API または WebSocket API をトラブルシューティングするために CloudWatch Logs を有効にする方法を教えてください。

最終更新日: 2020 年 1 月 20 日

開発している Amazon API Gateway REST API または WebSocket API のエラーをデバッグする必要があります。API をトラブルシューティングするためにログを有効にするにはどうすればよいですか?

簡単な説明

開発中の API Gateway REST API または WebSocket API をトラブルシューティングするには、Amazon CloudWatch Logs への実行ログおよびアクセスログの記録を有効にします。

注意: HTTP API は現在、アクセスログの記録のみをサポートしており、これらの API ではログ記録の設定が異なります。詳細については、HTTP API のログ記録の設定を参照してください。

実行ログには、API のほとんどのエラーを特定して修正するために使用できる、役に立つ情報が含まれています。この情報には以下が含まれます。

アクセスログには、API にアクセスしたユーザーとそのアクセス方法に関する詳細が含まれます。このログは、トラブルシューティングにも使用できます。ログ記録の各タイプの詳細については、API Gateway の CloudWatch ログ形式を参照してください。

解決方法

CloudWatch へのログ記録用の IAM ロールを作成する

  1. AWS Identity and Access Management (IAM) コンソールの左側のナビゲーションペインで、[ロール] を選択します。
  2. [ロール] ペインで、[ロールの作成] を選択します。
  3. [ロールの作成] ページで、次の手順を実行します。
    [信頼されたエンティティの種類を選択] で [AWS サービス] を選択します。
    [このロールを使用するサービスを選択] で [API Gateway] を選択します。
    [次のステップ: アクセス権限] を選択します。
  4. [Attached アクセス権限ポリシー] では、AWS が管理するポリシーである AmazonAPIGatewayPushToCloudWatchLogs がデフォルトで選択されていることに注意してください。このポリシーには、必要なアクセス権限のすべてがあります。
  5. [次のステップ: タグ] を選択します。
  6. 希望する場合はオプションでタグを追加し、その後 [次のステップ: 確認] を選択します。
  7. [確認] で以下を行います。
    [ロール名] には、ロールにとって意味のある名前を入力します。
    (オプション) [ロールの説明] の説明を希望に応じて編集します。
    [ロールの作成] を選択します。
  8. 作成したロールの名前を [ロール] ペインの検索バーに入力し、検索結果からそのロールを選択します。
  9. [概要] ペインで [ロール ARN] をコピーします。これは、次のセクションの [Amazon リソースネーム (ARN)] で必要になります。

詳細については、「CloudWatch ログ記録のアクセス許可」を参照してください。

API Gateway コンソールで IAM ロールを追加する

注意: 異なる AWS リージョン間で複数の API を開発している場合は、各リージョンでこれらのステップを完了してください。

  1. API Gateway コンソールAPIs ペインで、作成した API の名前を選択します。
  2. 左のナビゲーションペインの下部で、[設定] を選択します。
  3. [設定]で、[CloudWatch ログのロール ARN] に、コピーした IAM ロール ARN を貼り付けます。
  4. [保存] を選択します。
    注意: コンソールは ARN が正常に保存されたことを確認しません。

API とステージのログ記録を有効にする

  1. API Gateway コンソールで、API のステージエディターを見つけます
  2. [ステージエディター] ペインで [ログ/トレース] タブを選択します。
  3. [ログ/トレース] タブの [CloudWatch Settings] で、以下を実行して実行ログを有効にします。
    [Enable CloudWatch Logs] チェックボックスにチェックを入れます。
    [ログレベル] には、すべてのリクエストの実行ログを生成するために [INFO] を選択します。または、[ERROR] を選択して、エラーになった API へのリクエストのみの実行ログを生成します。
    REST API の [リクエスト/レスポンスをすべてログ] チェックボックスにチェックを入れます。または、WebSocket API のために [メッセージデータをすべてログ] チェックボックスにチェックを入れます。
  4. [Custom Access Logging] で、以下を実行してアクセスログを有効にします。
    [Enable Access Logging] チェックボックスにチェックを入れます。
    [Access Log Destination ARN] に、CloudWatch ロググループまたは Amazon Kinesis Data Firehose ストリームの ARN を入力します。
    Log Format を入力します。ガイダンスについては、[CLF]、[JSON]、[XML]、または [CSV] を選択して、その形式の例を確認できます。
  5. [変更を保存] を選択します。
    注意: コンソールはこれらの設定が正常に保存されたことを確認しません。

詳細については、「API Gateway コンソールを使用して CloudWatch API ログ作成をセットアップする」を参照してください。

ログ記録の設定をテストする

  1. クライアントアプリケーション、または Postman アプリwscat (WebSocket API 向け) などのツールを使用して、API への新しいリクエストを送信します。
  2. CloudWatch コンソールの左にあるナビゲーションペインの [Logs] で [Log Groups] を選択します。
  3. [Log Groups] リストで、デバッグする API のロググループを選択します。
    REST API については、ロググループの名前が API-Gateway-Execution-Logs_apiId/stageName 形式になります。
    WebSocket API については、ロググループの名前が /aws/apigateway/apiId/stageName 形式になります。
    注意: アクセスログは、アクセスログ作成を有効にしたときに ARN を指定したロググループにあります。
  4. [Log Streams] のリストで、最新の Last Event Time を持つログストリームを選択し、リクエストの実行またはアクセスの詳細を含むメッセージを表示します。

詳細については、「API Gateway ログイベントを CloudWatch コンソールで表示する」を参照してください。