Amazon API Gatewayのレスポンスサイズをモニタリングしてみた
Amazon API Gateway(REST)でレスポンスサイズをモニタリングしたい場合、
API Gatewayのアクセスログを有効にし、
Logs Insightsで $context.responseLength
をパースしましょう。
レスポンスサイズの分布やレスポンスサイズがペイロード上限に抵触していないことを簡単にモニタリング出来ます。
やってみた
それでは、API Gatewayのレスポンスサイズを取得してみましょう。
1. API Gatewayのアクセスログを有効化
API Gatewayのコンソールにおいて、Stages → Logs/Tracing からアクセスログを有効にします。
レスポンスサイズは $context.responseLength
です。
今回は パースしやすいように、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" }
※実際は1行で入力します。
2. アクセスログの出力を確認
CloudWatch Logsのコンソールにおいて、上述のアクセスログ用のロググループにログ出力されていることを確認します。
{ "requestId": "xxx-xxx-xxx-xxx-xxx", "ip": "xx.xx.xx.xx", "caller": "-", "user": "-", "requestTime": "02/Nov/2021:15:22:18 +0000", "httpMethod": "GET", "resourcePath": "/xxx", "status": "200", "protocol": "HTTP/1.1", "responseLength": "123" }
3. Logs Insightsで問い合わせ
CloudWatch Logsのコンソールにおいて、Logs Insights からこのロググループに対して、クエリを実行します。 CloudWatchのダッシュボードにウィジェット追加しておきましょう。
例えば、1時間ごとの最大レスポンスサイズ(MB)を取得したい場合のクエリは以下の通りです。
stats max(responseLength)/1024 as MaxSizeInKB by bin(1h)
クエリ構文の詳細は、次のドキュメントを参照ください。
ペイロード上限
API Gateway と Lambda を連携する場合、それぞれにペイロード上限があります。
- API Gateway のペイロード上限 : 10MB
- Lambda のペイロード上限 : 6MB
この2つを組み合わせると、サービスのペイロード上限はより小さい Lambda の 6MB です。
ペイロード上限を超えるような処理が必要な場合、S3 操作用の pre-signed URL を発行するといったワークアラウンドをご検討ください。