GoogleAppEngine上で動作しているDjangoアプリをStackdriver Debuggerでデバッグする

AppEngineで動かしてるDjangoアプリをStackdriver Debuggerでデバッグする手順について。

Python 用 Stackdriver Debugger の設定  |  Stackdriver Debugger のドキュメント  |  Google Cloud

ドキュメントには、Django 1.Xの話しかなく、手順も良くなかったのでメモを残します(フィードバックはしておきました)。

Python 3.7、Django 2.1.4、AppEngineはStandard、Flexible両方で試しました。

requirements.txtへの追記

インストールするライブラリは、ドキュメント通り google-python-cloud-debugger で大丈夫でした。

requirements.txtgoogle-python-cloud-debugger をインストールするように追記しておきます。

google-python-cloud-debugger

Djangoの設定

DjangoアプリをAppEngineで動かす場合、エントリポイントは wsgi.py になります(gunicorn等でwsgi.pyを読み込ませてる場合)。

mysite という名前でプロジェクトを作った場合、 mysite/wsgi.py にStackdriver Debuggerを有効にするコードを追記します。

import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
application = get_wsgi_application()
# Enable Stackdriver Debugger(以下が追記部分)
try:
    import googleclouddebugger
    googleclouddebugger.enable()
except ImportError:
    pass

デバッグしてみる

変更したものをAppEngineにデプロイ後、GCPのコンソールからStackdriverデバッグの画面を開いてみます。

ソースコードが表示されない場合は、デプロイ時のコマンドを gcloud beta app deploy (betaコマンド)にしてみると改善するかもしれません。

ソースコードが表示されたら、デバッグしたい行にスナップショットのポイントや条件、式を指定し、実際にブラウザでアプリケーションを操作します。

指定したスナップショットのポイントを通過すると、デバッグの画面で、変数やコールスタックなどを確認できます。

f:id:nullpobug:20190115145321p:plain

本番環境を気軽にデバッグできるので便利ですね。