本記事の内容
Firebase Cloud FunctionsをPythonで実装する際に設定するデコレータのMemoryの解説を行います。
Firebaseが公開している公式ドキュメントと、実際のソースコードを見ながら解説をしていきます。
背景
ファイルの生成やなどを行う関数をデプロイしようとしました。
ところがデフォルトのメモリの設定ではオーバーフローしてしまい、メモリの量を増やす必要がありました。
目次
1. デコレータとは
デコレータとは関数やクラスの前後に特定の処理を追加出来る機能です。
Pythonでは、関数やクラスの定義する前に@
をつけることで設定出来ます。
@https_fn.on_request()
def fetch_data(req: https_fn.Request) -> https_fn.Response:
#省略
上記の関数fetch_data()
のデコレータは@https_fn.on_request()
になります。
2. Memoryの設定
関数が使用するメモリの量を指定出来ます
Firebaseのソースコード内のMemoryOptionクラスにメモリの値が定義されています。
class MemoryOption(int, _enum.Enum):
"""
Available memory options supported by Cloud Functions.
"""
MB_128 = 128
MB_256 = 256
MB_512 = 512
GB_1 = 1 << 10
GB_2 = 2 << 10
GB_4 = 4 << 10
GB_8 = 8 << 10
GB_16 = 16 << 10
GB_32 = 32 << 10
ビット演算子が用いられていますが、指定出来る値は、
128
, 256
, 512
, 1024
, 2048
, 4096
, 8192
, 16384
, 32768
のいずれのようです。(全て単位はMBです)
なお、デフォルトの値は256
です。
メモリの料金
Firebaseのメモリは以下の料金形態になっています。
公式ドキュメントによると、メモリの値が増えると料金も比例して増えるようです。
そのため、定義する関数の処理の内容に応じて設定する必要があります。
3. 実装
Memoryの値を256MB
から512MB
に変更してみます。
@https_fn.on_request(memory=512)
def fetch_data(req: https_fn.Request) -> https_fn.Response:
#省略
これでメモリを512MB
に設定することが出来ます。
4. まとめ
今回はFirebase Cloud FunctionsをPythonでデプロイする際に必要なデコレータの設定の中の1つである、Memoryについての解説を行いました。是非参考にして下さい!