前提
Cloud Functions をバックエンドにした API Gateway で、1日に0-3回エラーの通知が Slack に飛んでいた。実用上は問題ないので無視していたけど、一回調べてみることにした。
TL;DR
API Gateway 側の timeout 設定だった。
デフォルトは 15s になっていて、Cloud Functions のレスポンスが 15s 以上かかるとエラーになる。OpenAPI schema の deadline
の値を変えることで設定できる。
以下 deadline
の説明↓
The number of seconds to wait for a full response from a request. Responses that take longer than the configured deadline will time out. The default deadline is 15.0 seconds.
https://cloud.google.com/endpoints/docs/openapi/openapi-extensions#deadline
調査
本体のロジックがなにかコケてるのかな? と思ったので Cloud Functions のログを見に行ったけど、通知が飛んできた時間のログを見ても何もなかった。
ただ、15:21 の前の実行が 14:24 で該当の実行はコールドスタートになってそうなところが気になった。
で、API Gateway の方のログを見に行くと、たしかにエラーになっていた。
"gcp api gateway 504" で検索すると、トップには出てこないもののタイムアウト関連の結果が出てきたので調べたところ、前述の通り 15s のタイムアウト的なものがあって、該当の実行は > 15s になってた。
対処としては Herkou の Kaffeine 的なことをするか、YAML で timeout を伸ばすかのどっちかをいつかやろうと思いました (感想)