概要
Cloud FunctionsでPython(Bata)を利用する場合、関数のエントリーポイントは必ずmain.py
ファイルである必要があります。
Cloud Functions The Python Runtime
https://cloud.google.com/functions/docs/concepts/python-runtime
Your function's entrypoint must be contained in a Python source file named main.py.
素直にmain.py
に関数を追加していくと、きっと肥大化して悲しくなります。
なので、ファイル分割できないか試してみました。
実装
デプロイするファイルを準備します。
> mkdir 任意のディレクトリ
> cd 任意のディレクトリ
> mkdir src
> touch main.py
> touch hoge.py
> touch src/huge.py
from hoge import *
from src.huge import huge_huge
from flask import make_response
def hoge_hoge(request):
return make_response('hoge!', 200)
from flask import make_response
def huge_huge(request):
return make_response('huge!', 200)
はい。
見てのとおりで、import ファイル名 from *
とインポートすることで、実現できました。
import ファイル名 from 関数名
とすることも可能です。
検証
実際にデプロイして実行できるか、試してみます。
> gcloud functions deploy hoge_hoge --runtime=python37 --trigger-http
> gcloud functions deploy huge_huge --runtime=python37 --trigger-http
デプロイできたら実行してみます。
> gcloud functions call hoge_hoge --data "{}"
executionId: m10cogh13tx8
result: hoge!
> gcloud functions call huge_huge --data "{}"
executionId: 2adly82qzlts
result: huge!
やったぜ。
これで、main.py
には実装を含めず、エントリーポイントとしての役割に特化させることができます。
まだ試していませんが、おそらくは規模が大きくなった場合、パッケージ化することで、さらにすっきりさせることができそうです。
参考
Cloud Functions The Python Runtime
https://cloud.google.com/functions/docs/concepts/python-runtime
簡単なPythonのパッケージを作る方法
https://qiita.com/himenoglyph/items/77f2534bc32eaad494dc