CloudRunで動くexpressサーバにtimeoutを設定する
CloudRunでexpressサーバを動かした際に時間のかかるapi(2分以上)にリクエストを送ったら[[Empty reply from server]]になってしまった。
Cloud Run自体は下記ドキュメントにあるようにデフォルトタイムアウトは5分に設定されているが、フレームワーク側のタイムアウト設定も調整する必要がある。
Cloud Run のリクエスト タイムアウトを変更するだけでなく、使用言語のフレームワークに独自のリクエスト タイムアウト設定があるかどうか確認する必要があります。たとえば、Node.js の場合は、server.timeout プロパティを更新する必要があります。
expressのデフォルトタイムアウトは2分なので、下記のようにしてCloudRunのタイムアウトと揃えた。
const server = app.listen();
server.setTimeout(5 * 60 * 1000);
また、特定のリクエストのみタイムアウトを設定したい場合は以下のようにすれば設定できる。
app.post('/heavy_api', function (req, res) {
req.setTimeout(5 * 60 * 1000);
// 重い処理
res.json({ message: 'success' })
});