ある企業が、Amazon API Gateway + Lambda のサーバーレス API で、同一ユーザーが短時間に連続してリクエストを送る「チャタリング」問題があり、Lambda の無駄な実行が発生している。まったく同じパラメータのリクエストに対しては、一定時間(5 分間)は同じレスポンスを返せば十分である。Lambda の実行コストを削減する最も適切な方法はどれか。
- A. API Gateway のレスポンスキャッシュを有効化し、エンドポイントのキャッシュ TTL を 5 分に設定する。同一パラメータのリクエストは Lambda を呼び出さずにキャッシュから直接レスポンスを返す。
- B. Lambda 関数の同時実行数を制限してリクエストをスロットリングする。
- C. Lambda 関数にローカルメモリキャッシュを実装して実行内でレスポンスを再利用する。
- D. API Gateway の使用量プランでリクエスト数を 1 分あたり 1 回に制限する。
解答と解説を見る
正解: A
Amazon API Gateway のレスポンスキャッシュ機能を有効化すると、指定した TTL の間、同一のリクエスト(同一のパス・クエリ文字列・ヘッダー)に対してキャッシュから直接レスポンスを返し、Lambda が呼び出されない。TTL 5 分に設定することで、5 分以内の同一リクエストは Lambda を起動せずに応答でき、Lambda の実行コストを大幅に削減できる。選択肢BのLambda 同時実行数制限はスロットリング(リクエストを拒否)につながり、ユーザー体験が悪化する。「同じレスポンスを返す」要件にも合わない。選択肢CのLambda ローカルメモリキャッシュは、同一の Lambda コンテナが再利用された場合のみ有効であり、別のコンテナが起動した場合はキャッシュが効かない。また Lambda が起動する点でコスト削減効果が限定的。選択肢Dの使用量プランによるレート制限は 1 分 1 回のみに制限するとサービスが使えなくなる。ユーザー体験を著しく悪化させる解決策。
📚 関連サービスの解説: Amazon API Gateway ・ AWS Lambda