GCPのCloud Functionsをローカルでも走らせる方法

Cloud Functionsはローカル環境で走らせて、ローカルホストで呼び出すことが可能です。

環境:

python 3.7.0
pip 20.0.2
macOS mojave

引数なし

まず、main.pyで簡単な関数を作ります。

//main.pyファイルにて
def hello_world():
    print("hello world!")

functions-frameworkをpipでインストールし、–target引数から関数名を呼びだします。

$ pip install functions-framework

// main.pyがあるディレクトリにて
$ functions-framework --target hello_world

これで以下のように走り始めるはずです。

[2020-06-23 10:53:33 +0900] [19844] [INFO] Starting gunicorn 20.0.4
[2020-06-23 10:53:33 +0900] [19844] [INFO] Listening at: http://0.0.0.0:8080 (19844)
[2020-06-23 10:53:33 +0900] [19844] [INFO] Using worker: threads
[2020-06-23 10:53:33 +0900] [19847] [INFO] Booting worker with pid: 19847

これで今ローカルホストでcloud functionsがスタンバイしている状態なので、以下のコマンドで呼び出せます。

$ curl http://localhost:8080

引数あり

引数をjson形式でつけることも可能です。

===main.py===

def my_function(request):
    request_json = request.get_json()
    var_in_json = request_json["foo"]
    print(var_in_json)
    return 'Hello World'


===terminal===
以下のコマンドをたたけば、john doeが出力される。
$ curl -d '{"foo": "john doe"}' -X POST -H "Content-Type: application/json" http://localhost:8080