🙄
LambdaスロットリングエラーをAPI Gatewayで429エラーで返却しない理由
結論
- いきなり答えですが、こちら に記載のある通りです
- 日本語でざっとまとめると
- 通常、HTTP 4xxエラーはクライアント側に原因があるため、再試行しないけれど、5xxエラーはサーバー側に原因があるため、ほとんどの場合再試行可能
- Lambdaスロットリングエラーはそのクライアント側に原因があるというよりは、他のユーザのアクセスのせいで上限に達してしまった=サーバ側(Lambda側)のエラーと考えるべき
- なのでLambdaの429エラーはAPI Gatewayとしてはデフォルトで500エラーで返すよ
- API Gatewayが429エラーを返すのは API Gateway自体のスロットリング制限 に引っかかった場合なので、混同しないようにしていると思われます
解説
429エラーとは
ユーザーが指定された時間内に多くのリクエストを送信した ("rate limiting") ことを示します
500エラーとは
サーバーがリクエストを実行を妨げる予期しない条件に遭遇したことを示します
Lambdaスロットリングエラーとは
- Lambda 同時実行数の制限に引っかかった場合に返却されるエラー
- Lambda 単体としては 429 エラーを返す
- https://aws.amazon.com/jp/premiumsupport/knowledge-center/lambda-troubleshoot-throttling/
- 東京リージョンでは1アカウントあたり1000が上限(上限緩和の申請をすることは可能)
- タイミングの問題なことが多いので、呼び出し元でリトライ処理を組み込むのがセオリーのようです
- 呼び出し方法とかにもよるので、こちらもご参照ください
あとがき
-
ローカルのPythonからAPI Gateway経由でLambdaを呼び出していて、429エラーが返ってくることを期待してリトライ処理を組み込んだのですが、Lambda関数の同時実行数を0にしてテストしたときにうまくいかなかったので調べました
-
追加のコメントにもあるようにプロキシ統合でなければ無理やり429を返すこともできるようですが推奨はされていないようです
Discussion