Cloud Run関数(functions)をローカル環境でデバッグする方法
前提
このドキュメントでは、Windows 11環境において、VSCodeとGit Bashを使用してPythonでGoogle Cloud Functionsをローカルデバッグする手順を説明します。
Pipenvで仮想環境を管理し、Cloud Functions Frameworkを用いてローカルエミュレータを実行します。
最後に、VSCodeのデバッグ機能を活用してデバッグ方法をまとめます。
手順
1. Cloud Functions Frameworkのインストール
まず、Python用のCloud Functions Frameworkをインストールする必要があります。以下の手順でインストールを行います。
1.1 仮想環境の作成
Pipenvを使って仮想環境を作成します。プロジェクトディレクトリで以下のコマンドを実行します。
pipenv install functions-framework
1.2 Cloud Functionのコード作成
次に、Cloud Functionのコードを作成します。プロジェクトディレクトリに main.py ファイルを作成し、以下のようにCloud Functionの処理を記述します。
main.py の例:
from flask import escape
def hello_world(request):
return f'Hello, {escape(request.args.get("name", "World"))}!'
Pipfile の例:
Pipenvを使用して依存関係を管理します。Pipfileに以下のように依存関係が記載されているはずです。
コードをコピーする
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[dev-packages]
[packages]
functions-framework = "*"
[requires]
python_version = "3.9"
2. Functions Frameworkの設定
ローカルでCloud Functionを実行するために、Functions Frameworkを使います。これにより、ローカルサーバー上でCloud Functionsのエミュレータを動作させることができます。
Pipfileがあるディレクトリで以下のコマンドを実行して、仮想環境をアクティベートします。
pipenv shell
その後、次のコマンドを実行してCloud Functionをローカルで実行します。
functions-framework --target=hello_world
--target=hello_world は、main.py内の関数名を指定しており、hello_world 関数が実行されます。
デフォルトでは、Cloud Functionは http://localhost:8080/ で動作します。
3. VSCodeでのデバッグ設定
VSCodeでデバッグを行うために、以下の設定を行います。
.vscode/launch.json の設定
VSCodeのデバッグメニューでデバッグを実行できるように設定を追加します。プロジェクトフォルダに .vscode/launch.json を作成し、以下のように設定します。
{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Cloud Function",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/main.py",
"args": [
"functions-framework",
"--target=hello_world"
],
"env": {
"FLASK_ENV": "development",
"PORT": "8080"
}
}
]
}
この設定により、VSCodeのデバッグメニューからCloud Functionをデバッグできるようになります。
4. gcloud CLIを使ったデプロイ
ローカルでのデバッグが完了したら、以下のコマンドを使ってCloud FunctionsをGCPにデプロイすることができます。
gcloud functions deploy hello_world \
--runtime python39 \
--trigger-http \
--allow-unauthenticated
5. 認証の確認
ローカル環境で認証エラーが発生する場合、gcloud auth application-default login を使用してGCPアカウントに認証する必要があります。これにより、エミュレータでGCPリソースにアクセスすることができます。
6. Pipenvからの抜け方
仮想環境から抜ける場合は、以下のコマンドを実行してください。
exit
または
deactivate
これでPython環境でCloud Functionsをローカルでデバッグし、VSCodeとGit Bashを使った効率的な開発ができるようになります。
Discussion