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' })
});

参考


Related #gcp

CloudRunでnode.jsを動かす

リポジトリにpushしたらCloudRun上に自動デプロイ

IPv6 IPoE環境で自宅のRaspberryPiにsshできるようにする

GCPにssh port forwardingすることで実現できた

Cloud FunctionsのNode.jsバージョンを更新する

package.jsonとcloudbuild.yamlを更新

Cloud BuildでFirebase Hostingのデプロイを行う

リポジトリへのpush以外をトリガーにしたい場合に使用

Firebase HostingのデプロイをWebhook(API)経由で行う

デプロイボタンが作れるようになった