Cloud Functions(Python)でコードファイルを分割する

1pt   2018-10-11 09:41
IT技術情報局

概要

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/77f2534bc32eaad494dc

Source: python tag

   ITアンテナトップページへ
情報処理/ITの話題が沢山。