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

Cloud Runのコールドスタートを避けるためにcurlで起こし続ける

定期リクエストを送っている間はコールドスタートは発生していないことが確認できた

GCP VMインスタンスのSSHポートを変更した

Network Internet Egress from Americas to EMEA

[Action Required] Internal error has affected services in Cloud Run that use Cloud Load Balancing

デフォルトURLで利用している場合は対応不要

GCPの無料インスタンスがF1-microからE2-Microに変わった

メールが来ていたのを見落としていた

ローカルディレクトリをCloud Storageに同期する

gsutil rsyncを利用した