0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Cloud Function をローカルで動かす

Posted at

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)のソースを変更

main.py
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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?