このチュートリアルでは、Google Cloud Console を使用して、Python Bookshelf アプリでキャッチされなかった例外を報告し、追跡する方法について説明します。
Error Reporting は、各エラーの発生件数、スタック トレース、発生履歴を表示する一元管理されたダッシュボードを提供します。エラー発生時のアラートを設定することもできます。
このページは複数ページからなるチュートリアルの一部です。最初からの説明や設定手順を確認するには、Python Bookshelf アプリに移動してください。
設定の構成
このセクションでは、5-logging
ディレクトリのコードを使用します。ファイルを編集し、このディレクトリでコマンドを実行します。
config.py
ファイルを編集用に開き、次の値を置き換えます。[PROJECT_ID]
の値をプロジェクト ID に設定します。これは Cloud Console に表示されます。[DATA_BACKEND]
の値を、構造化データの使用チュートリアルで使用したものと同じ値に設定します。- Cloud SQL または MongoDB を使用している場合は、
Cloud SQL
またはMongo
セクションの値を、「構造化データの使用」ステップで使用したものと同じ値に設定します。 [CLOUD_STORAGE_BUCKET]
の値を Cloud Storage バケット名に設定します。-
OAuth2 configuration
セクションで、[GOOGLE_OAUTH2_CLIENT_ID]
と[GOOGLE_OAUTH2_CLIENT_SECRET]
の値を、以前に作成したアプリケーション クライアント ID とシークレットに設定します。 config.py
ファイルを保存して閉じます。
Cloud SQL を使用する場合:
- 編集する
app.yaml
ファイルを開きます。 -
cloudsql-instance
の値を、config.py
ファイルの[CLOUDSQL_CONNECTION_NAME]
と同じ値に設定します。形式project:region:cloudsql-instance
を使用します。 この行全体のコメントを解除します。 app.yaml
ファイルを保存して閉じます。
依存関係のインストール
仮想環境を作成して依存関係をインストールするには、次のコマンドを使用します。
Linux / macOS
virtualenv -p python3 env
source env/bin/activate
pip install -r requirements.txt
Windows
virtualenv -p python3 env
env\scripts\activate
pip install -r requirements.txt
ローカルマシンでのアプリの実行
ローカル ウェブサーバーを起動します。
python main.py
ブラウザに次のアドレスを入力します。
http://localhost:8080
Ctrl+C キーを押してワーカーを終了し、次にローカル ウェブサーバーを終了します。
App Engine フレキシブル環境へのアプリのデプロイ
サンプルアプリをデプロイします。
gcloud app deploy
ブラウザに次の URL を入力します。
https://PROJECT_ID.REGION_ID.r.appspot.com
以下を置き換えます。
PROJECT_ID
: Google Cloud プロジェクト IDREGION_ID
: App Engine がアプリに割り当てるコード
アプリを更新する場合は、アプリをデプロイしたときと同じコマンドを入力して、更新バージョンをデプロイします。デプロイするとアプリの新しいバージョンが作成され、デフォルト バージョンに設定されます。アプリの古いバージョンはそのまま残ります。それらに関連付けられた仮想マシン(VM)インスタンスも同様です。すべてのアプリ バージョンと VM インスタンスが課金対象のリソースとなります。コストを抑えるには、アプリのデフォルト以外のバージョンを削除します。
アプリのバージョンを削除するには:
- In the Google Cloud console, go to the Versions page for App Engine.
- Select the checkbox for the non-default app version that you want to delete.
- アプリのバージョンを削除するには、[ 削除] をクリックします。
課金対象のリソースをクリーンアップする方法の詳細については、このチュートリアルの最後のステップのクリーンアップセクションをご覧ください。
エラーのシミュレーション
Error Reporting の動作を確認するには、コードに意図的に誤りを挿入し、Cloud Console の Error Reporting ページで例外を探します。
bookshelf/crud.py
で、未定義の変数にアクセスしてインデックス ビューでReferenceError
を生成するオペレーションを追加します。@crud.route("/") def list(): x[3]
アプリをデプロイします。
gcloud app deploy
インデックス ページにアクセスします。
gcloud app browse
メッセージ
An internal error occurred
を表示できます。Cloud Console で、Stackdriver の [Error Reporting] ページに移動します。
エラーの一覧が表示されます。
エラーをクリックすると、エラーが最後に検出された日時、エラーが発生した回数、発生回数のヒストグラム、スタック トレースなどのエラーに関する情報が表示されます。
コードの説明
キャッチされなかった例外を報告するには、Flask の errorhandler
デコレータを使用してから、Python 用 Cloud クライアント ライブラリを使用して Error Reporting に例外を報告します。
クライアントはトレースバック情報を自動的に追加し、ヘルパー関数を使用して Flask リクエストから関連するリクエストの詳細を抽出します。これにより、アプリで発生しキャッチされなかった InternalServerError
HTTP 500
例外の関連するスタック トレースと HTTP コンテキストが Error Reporting に入力されます。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除する手順は次のとおりです。
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.