Cloud Functionsの開発環境Function Frameworkの使い方について
インストールまではググるとでてくるのですが、実際の動かし方がよくわからなくて、
戸惑ったのでメモします。
自分は以下の環境です。(ほぼ初心者)
OS Windows11
Python 3.10
CloudFunctionsは第2世代
GoogleCloud SDKは使える
■FunctionFrameworkのインストール
pip install functions-fraemwork
参考:
Function Frameworks を使用した関数の実行 | Google Cloud Functions に関するドキュメント
■IAMの認証情報作成
これがあると、Cloud Storageのテストもできます。
下のコマンドを実行すると、ブラウザが立ち上がってログインを求められました。
CloudFunctionsを利用するIDでログインすれば認証情報が作成されます。
gcloud auth application-default login
参考:
gcloud auth application-default login | Google Cloud CLI Documentation
Cloud Functions の関数をローカルで検証できる Functions Framework のインストール方法 - G-gen Tech Blog
---------------ここまで
ここまではスムーズにいったのですが・・・
自分のローカルにある、Visual Studio Codeの記述をどうやってクラウドファンクションとしてテスト実行するのかわからなかったので自分の方法をメモします。
もう一度環境のおさらい
Windows11
Python10
CloudFunctionsは第2世代
GoogleCloud SDKは使える
■注意事項
コンソールのパスに注意する。
常に、pythonファイルのあるフォルダがカレントディレクトリであることを確認して、コマンドを打ってください。
■HTTPトリガーの場合
ローカル環境に
main.py
requirements.txtを準備します。
以下例です。
main.py
import functions_framework@functions_framework.httpdef hello_http(request):"""HTTP Cloud Function.Args:request (flask.Request): The request object.Returns:The response text, or any set of values that can be turned into aResponse object using `make_response`"""request_args = request.argselif request_args and 'name' in request_args:name = request_args['name']else:name = 'World'return 'Hello {}!'.format(name)
requirements.txt
functions-framework==3.*
■①コマンド入力
functions-framework --target hello_http --debug
hello_httpの部分は関数名で置き換えてください。
■②ブラウザを立ち上げアドレス入力
CloudFunctionsで利用しているグーグルアカウントでログインしているブラウザを立ち上げ
http://127.0.0.1:8080と入力してください。
と表示されれば成功です。
■クラウドストレージのトリガーの場合
クラウドファンクション上できちんと動くソースを準備してください。
以下ローカルの開発環境でデバックするときの注意点です。
■①コマンド入力
functions-framework --target hello_gcs --debug
hello_gcsの部分は関数名で置き換えてください。
■②GoogleCloudSDKShellで以下のコマンド入力
参考:ローカル関数の呼び出し | Google Cloud Functions に関するドキュメント
上をそのままコピペしても動きません
nameはファイル名にします。フォルダ以下にある場合は folder/Test.txtのように指定します。
Windowsno場合、\を^に変更する必要があります。
まだJSON部分の改行も削除する必要があります。
環境によりそのままコピペできないようです。
参考:長いコマンドを複数行に分割して実行する方法(Windows) | SyachikuLOG
最後は駆け足で書いてしまいましたが、順次追記する予定。