🙄

LambdaスロットリングエラーをAPI Gatewayで429エラーで返却しない理由

2021/11/07に公開

結論

  • いきなり答えですが、こちら に記載のある通りです
  • 日本語でざっとまとめると
    • 通常、HTTP 4xxエラーはクライアント側に原因があるため、再試行しないけれど、5xxエラーはサーバー側に原因があるため、ほとんどの場合再試行可能
    • Lambdaスロットリングエラーはそのクライアント側に原因があるというよりは、他のユーザのアクセスのせいで上限に達してしまった=サーバ側(Lambda側)のエラーと考えるべき
    • なのでLambdaの429エラーはAPI Gatewayとしてはデフォルトで500エラーで返すよ
  • API Gatewayが429エラーを返すのは API Gateway自体のスロットリング制限 に引っかかった場合なので、混同しないようにしていると思われます

解説

429エラーとは

ユーザーが指定された時間内に多くのリクエストを送信した ("rate limiting") ことを示します

500エラーとは

サーバーがリクエストを実行を妨げる予期しない条件に遭遇したことを示します

Lambdaスロットリングエラーとは

  • Lambda 同時実行数の制限に引っかかった場合に返却されるエラー
  • タイミングの問題なことが多いので、呼び出し元でリトライ処理を組み込むのがセオリーのようです
    • 呼び出し方法とかにもよるので、こちらもご参照ください

あとがき

  • ローカルのPythonからAPI Gateway経由でLambdaを呼び出していて、429エラーが返ってくることを期待してリトライ処理を組み込んだのですが、Lambda関数の同時実行数を0にしてテストしたときにうまくいかなかったので調べました

  • 追加のコメントにもあるようにプロキシ統合でなければ無理やり429を返すこともできるようですが推奨はされていないようです

Discussion