本記事の内容
Firebase Cloud FunctionsをPythonで実装する際に設定出来るタイムアウトの解説を行います。
Firebaseが公開している公式ドキュメントと、実際のソースコードを見ながら解説をしていきます。
背景
先日、生成AIのAPIを用いた関数をFirebseのCloud FunctionsにデプロイしてWebアプリを作っていました。
デプロイした関数には、実行時間がかかる処理を行っていたため、タイムアウトエラーになってしまいました。タイムアウトの時間を変更する方法が気になり、調べてみようと思いました。
目次
1. デコレータとは
デコレータとは関数やクラスの前後に特定の処理を追加出来る機能です。
Pythonでは、関数やクラスの定義する前に@
をつけることで設定出来ます。
@https_fn.on_request()
def fetch_data(req: https_fn.Request) -> https_fn.Response:
#省略
上記の関数のデコレータは@https_fn.on_request()
です。
2. Timeoutの設定
ソースコードはこちらになります
@_dataclasses.dataclass(frozen=True, kw_only=True)
class RuntimeOptions:
#other Options
timeout_sec: int | Expression[int] | _util.Sentinel | None = None
"""
Timeout for the function in sections. Possible values are 0 to 540.
HTTP functions can specify a higher timeout.
A value of ``RESET_VALUE`` restores the default of 60s
The minimum timeout for a 2nd gen function is 1s. The maximum timeout for a
function depends on the type of function: Event handling functions have a
maximum timeout of 540s (9 minutes). HTTP and callable functions have a
maximum timeout of 3,600s (1 hour). Task queue functions have a maximum
timeout of 1,800s (30 minutes)
"""
ソースコードを参考にすると、timeoutのデフォルトの値は60
秒になっていることが分かります。またタイムアウトの最小値は1
秒で、最大540
秒であることが分かります。
また、公式ドキュメントにも、最大値は540
秒と記載されていました。
3. 実装
Timeoutの値を60秒から240秒に変更してみます。
from firebase_functions import https_fn
@https_fn.on_request(timeout_sec=240)
def fetch_data(req: https_fn.Request) -> https_fn.Response:
#省略
これでタイムアウト時間を240秒に設定することが出来ます。
4. まとめ
今回はFirebase Cloud FunctionsをPythonでデプロイする際に必要なデコレータの設定の中の1つである、Timeoutについての解説を行いました。実行時間で困ったときは参考にしてみて下さい。
また、他の設定についても投稿しているので、こちらも是非参考にしてください!