👖

Cloud Run関数(functions)をローカル環境でデバッグする方法

2024/10/19に公開

前提

このドキュメントでは、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