web-dev-qa-db-ja.com

テストPython Google Cloud Functionsローカル

Google Cloud FunctionsでPython3.7ランタイムを試しています。関数を展開して、展開後に機能させることはできますが、展開する前にローカルでテストするためにエミュレータを実行することはできません。

Googleのドキュメントは、Google関数エミュレータをここにインストールするように指示している箇所で少し矛盾しています: https://cloud.google.com/functions/docs/emulator

しかし、Firebaseでは、npm install firebase-admin、firebase-tools、およびfirebase-functionsを教えてくれます。

エミュレータのドキュメントはすべて、JSで書かれた例を参照していますが、Pythonにはありません。したがって、これらのエミュレータがPython関数をローカルで実行するのかどうか疑問に思っています。

ありがとう

12
Michael Gradek

Cloud Functions用のPythonエミュレーターはありません。

HTTP関数をローカルで実行できるようにするには、次のようにFlaskアプリでラップします。

def my_function(request):
    return 'Hello World'

if __name__ == "__main__":
    from flask import Flask, request
    app = Flask(__name__)

    @app.route('/')
    def index():
        return my_function(request)

    app.run('127.0.0.1', 8000, debug=True)
14
Dustin Ingram

ダスティンの答えに基づいて、エミュレーターとして機能するパッケージを開発しました。

pip install gcp-functions-emulator

次の機能を提供したい場合

# mycloudfunction.py
def api(request):
  return 'important data'

エミュレートするには、次のように呼び出す必要があります。

gcpfemu <path/to/file.py> <function_name>

たとえば、上記のコードでは次のように呼び出します。

gcpfemu mycloudfunction.py api

また、データにアクセスするには、たとえばcurlを使用できます。

curl localhost:5000/api
> important data
6
dinigo

Target Type = Script Pathおよびデフォルトオプションを使用してIntelliJで実行するには、次のようになります。

from flask import Flask, request
app = Flask(__name__)


@app.route('/')
def hello():
    return hello_get(request)

if __name__ == '__main__':
    app.run('127.0.0.1', debug=True)
1
Sandro