この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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 を発行するといったワークアラウンドをご検討ください。