概要
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
main.py
from hoge import * from src.huge import huge_huge
hoge.py
from flask import make_response def hoge_hoge(request): return make_response('hoge!', 200)
src/huge.py
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/77f2534bc32eaad494d