ある日claudia.jsを利用したAPI群のデプロイがコケるようになった。
TooManyRequestsExceptionとあるが、上限値に引っかかるほどAPIを呼んでいるわけでもなさそうだった。
{ TooManyRequestsException: Too Many Requests
at Object.extractError (/xxx/xxx/node_modules/aws-sdk/lib/protocol/json.js:48:27)
at Request.extractError (/xxx/xxx/node_modules/aws-sdk/lib/protocol/rest_json.js:52:8)
at Request.callListeners (/xxx/xxx/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
at Request.emit (/xxx/xxx/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/xxx/xxx/node_modules/aws-sdk/lib/request.js:683:14)
at Request.transition (/xxx/xxx/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/xxx/xxx/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /xxx/xxx/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/xxx/xxx/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/xxx/xxx/node_modules/aws-sdk/lib/request.js:685:12)
message: 'Too Many Requests',
code: 'TooManyRequestsException',
time: 2018-05-16T09:19:37.499Z,
requestId: '483f4e63-58ea-11e8-8ca8-0f1395b3d620',
statusCode: 429,
retryable: false,
retryDelay: 32.340008107058836 }
というわけでAWSへ問い合わせ。
「requestIdだけだと辛い。エラーになっているAPIを特定して」と言われ、そうだよなと悲しくなりながらClaudia.jsのコードを追ってログを仕込み、create-deployment
がTooManyRequestsExceptionで返ってきていることを特定。
そちらを伝えると「特定のRestAPIリソースに対してcreate-deployment
呼ぶと、AWS側でInternalErrorが発生している。その際に内部的にリトライが発生し、最終的にTooManyRequestsExceptionが帰っているっぽい。原因は不明。リソースを作り直せば回避できる」とのお返事。
言われるがままに、既存のRestAPIを削除して、まったく同じものを作り直してみると正常にデプロイできた。というわけで、APIGatewayのcreate-deployment
でTooManyRequestsException
が出ちゃった方は、作り直すといいかもしれません。