function-frameworkの使い方
cloud functionの動作確認をしたいときに、デプロイして確認すると時間がかかってしまうことないでしょうか。
デプロイしたはいいが、つまらないミスで動作しておらず、デプロイを繰り返してしまう。
そのため確認作業にかなり時間がかかって困っておりました。
動作確認時間の短縮方法がないか調べていたところ、ローカルで動作確認できる方法(functions-framework)があったので、こちらを使ってみました。
利用環境
- gcloud CLIがインストールされていること
- python3.x以上がで実行 python3.7.0
関数を準備する
functionsで動かす関数を用意します。
以下の関数を、main.pyとして作成します。
def cloud_function_test(request):
print("ログ出力")
return "hello world"
インストールする
ターミナルからpipでパッケージをインストールします。
pip install functions-framework
ローカルサーバーを起動する
main.pyのあるフォルダでコマンドを実行してください。
functions-framework --target cloud_function_test --debug
以下のようなにCLIに表示されれば、サーバーが起動されました。
* Serving Flask app 'main'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:8080
* Running on http://192.168.10.8:8080
Press CTRL+C to quit
* Restarting with watchdog (fsevents)
* Debugger is active!
* Debugger PIN: 143-809-603
アクセスして確認してみます。
サーバーを起動しているターミナルは残したままにしておき、別の新しいターミナルを開きます。
curl http://127.0.0.1:8080
hello world%
コマンドオプション
フラグ | 変数 | 説明 |
---|---|---|
--target |
FUNCTION_TARGET |
リクエストを受け取る関数名 |
--signature-type |
FUNCTION_SIGNATURE_TYPE |
トリガーの種類を記載 Default: http ; accepted values: http , event or cloudevent
|
--debug |
DEBUG |
デバッグモード。ソース編集のたびにリロードされる状態となる |
pub/subを使ったローカルテスト方法について
別記事作成予定
まとめ
パッケージを導入して、サーバーを起動するだけなのでお手軽にcloudfunction環境をローカルに構築できました。
これで動作確認がスムーズにできる。
おまけ
普段は、今回のfunctions-frameworkをつかって引数の受け取り方などを確認しています。
※ cloudfunction(python)では裏側でflaskが動いているようなので、そちらで確かめても同じはず。
クエリパラメータの受け取り方
受け側(function)のソースを変更
def cloud_function_test(request):
received = request.args.to_dict()
value1 = received.get("key1")
value2 = received.get("key2")
print(f"key1:{value1} key2:{value2}")
return "hello world"
パラメータをつけてアクセス
curl "localhost:8080?key1=abc&key2=def"
key1:abc key2:def