作成している Amazon API Gateway の REST API または WebSocket API で発生するエラーをデバッグしたいです。
簡単な説明
API Gateway REST API または WebSocket API のトラブルシューティングには、Amazon CloudWatch Logs を使用します。ログ形式の種類については、「API Gateway 用 CloudWatch ログの形式」を参照してください。
注: HTTP API は、アクセスログ記録のみをサポートします。詳細については、「API Gateway で HTTP API のログ記録を設定する」を参照してください。
ログには次の情報が表示されます。
解決策
CloudWatch にログを送信する IAM ロールを作成する
次の手順を実行します。
- AWS Identity and Access Management (IAM) コンソールを開きます。
- ナビゲーションペインで [ロール] を選択します。
- [ロール] ペインで [ロールの作成] を選択します。
- [ロールの作成] ページで、次の情報を入力します。
信頼されたエンティティとして、AWS サービスを選択します。
[ユースケース] で [API Gateway] を選択し、ラジオボタンで [API Gateway] を選択します。
[次へ] を選択します。
- [アクセス許可ポリシー] で、必要なすべてのアクセス許可を持つ、デフォルトの AWS マネージドポリシーである AmazonAPIGatewayPushToCloudWatchLogs を使用します。
- [次へ] を選択します。
- 名前、確認、作成で、次の情報を入力します。
ロール名に、ロールの名前を入力します。
(オプション)ロールの説明の説明を希望に応じて編集します。
(オプション) タグを追加します。
[ロールの作成] を選択します。
- [ロール] ペインで、作成したロールを選択します。
- [概要] ペインで、次のセクションで使用するためにロールの ARN を書き留めます。
アクセス許可の詳細については、「CloudWatch ログ記録のアクセス許可」を参照してください。
API Gateway コンソールで IAM ロールを追加する
次の手順を実行します。
- API Gateway コンソールを開きます。
- [API] ペインで、HTTP API ではない、REST API または WebSocket API の名前を選択します。
- ナビゲーションペインで [設定] を選択します。
- [設定] で、[CloudWatch ログロールの ARN] に IAM ロールの ARNを入力します。
注: CloudWatch Logs ロールは、リージョン内のすべての API で使用する AWS リージョンレベルの設定です。
- [保存] を選択します。
注: 複数リージョンにわたり複数の API を作成する場合は、各リージョンで上記の手順を実行します。
API ログ記録を有効にして API をステージングする
次の手順を実行します。
- API Gateway コンソールを開きます。
- ナビゲーションペインで [API] を選択し、該当する API を選択します。
- ナビゲーションペインで [ステージ] を選択し、該当するステージを選択します。
- [ログとトレース] で [編集] を選択します。
- [CloudWatch ログ] で、ドロップダウンメニューからレベルを選択します。
注: リクエストログと応答ログをすべて表示するには、[データトレース] オプションを選択し、ログレベルを [エラーと情報ログ] に設定します。データトレースにより、機密データがログに記録される可能性があるため、本番用 API ではデータトレースを有効にしないことがベストプラクティスです。
- [詳細なメトリクス] を選択します。
- [カスタムアクセスログ記録] で次の手順を実行します。
[アクセスログ記録の有効化] を選択します。
[アクセスログの宛先 ARN] で Amazon Data Firehose または CloudWatch ロググループの ARN を入力します。
注: REST API のみが Firehose ARN をサポートしています。
- ログの形式を入力します。
- [変更を保存] を選択します。
ログ記録の設定をテストする
注: API に新しいリクエストを送信するには、クライアントアプリケーションまたは、Postman アプリや WebSocket API 用の wscat などのツールを使用します。
次の手順を実行します。
- CloudWatch コンソールを開きます。
- ナビゲーションペインの [ログ] で、[ロググループ] を選択します。
- [ロググループ] で、デバッグする API のロググループを選択します。
REST API では、ロググループ名の形式は API-Gateway-Execution-Logs_apiId/stageName となります。
WebSocket API では、ロググループ名の形式は /aws/apigateway/apiId/stageName となります。
注: アクセスログは、アクセスログを有効にしたときに指定したロググループに配置されます。
- [ログストリーム] リストで、[最終イベント時刻] が最新であるログストリームを選択すると、リクエストの詳細を含むメッセージが表示されます。
関連情報
API Gateway マッピングテンプレートとアクセスログ記録用変数のリファレンス
Amazon CloudWatch を使用して REST API の実行を監視する
CloudWatch メトリクスを使用して WebSocket API の実行を監視する