多くのアプリには、認証設定とユーザー設定用のセッション処理が必要です。Flask フレームワークには、この機能を実行するためのメモリベースの実装が付属しています。ただし、記録されるセッションがインスタンス間で異なる場合があるため、この実装は複数のインスタンスから提供できるアプリには適していません。このチュートリアルでは、App Engine でセッションを処理する方法を示します。
目標
- アプリを作成する。
- アプリをローカルで実行する。
- App Engine にアプリをデプロイする。
料金
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Firestore API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Firestore API.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Python、
pip
、virtualenv
をシステムにインストールします。手順については、Google Cloud 用の Python 開発環境の設定をご覧ください。
プロジェクトの設定
ターミナル ウィンドウで、選択したディレクトリに移動し、
sessions
という名前の新しいディレクトリを作成します。このチュートリアルのコードはすべて、sessions
ディレクトリ内にあります。sessions
ディレクトリに移動します。cd sessions
次の内容で
requirements.txt
を作成します。依存関係をインストールします。
pip install -r requirements.txt
このチュートリアルの最後では、最終的なファイル構造が次のようになります。
sessions
├── app.yaml
├── main.py
└── requirements.txt
ウェブアプリの作成
このアプリは、ユーザーごとに異なる言語で挨拶を表示します。リピーターは常に同じ言語で挨拶されます。
アプリでユーザーの設定を保存するには、現在のユーザーに関する情報をセッションに保存する方法が必要です。このサンプルアプリは Cookie と Firestore を使用して、セッション データを保存します。
ターミナル ウィンドウで、次の内容の
main.py
という名前のファイルを作成します。次の図は、Firestore が App Engine アプリ用のセッションを処理する方法を示しています。
セッションの削除
セッション データを削除するか、自動削除戦略を実装できます。セッションに、Memcache や Redis などのストレージ ソリューションを使用すると、期限切れのセッションが自動的に削除されます。
ローカルでの実行
ターミナル ウィンドウで、Gunicorn HTTP サーバーをインストールします。
pip install gunicorn
Gunicorn HTTP サーバーを実行します。
gunicorn -b :8080 main:app
ウェブブラウザでアプリを表示します。
Cloud Shell
Cloud Shell ツールバーの [ウェブでプレビュー] アイコンをクリックし、[ポート 8080 でプレビュー] を選択します。
ローカルマシン
ブラウザで、
http://localhost:8080
にアクセスします。「Hello World」、「Hallo Welt」、「Hola mundo」、「Salut le Monde」、「Ciao Mondo」の 5 つの挨拶のいずれかが表示されます。別のブラウザまたはシークレット モードでページを開くと、別の言語で表示されます。セッション データは Google Cloud Console で表示して編集できます。
HTTP サーバーを停止するには、ターミナル ウィンドウで
Control+C
を押します。
App Engine でのデプロイと実行
App Engine スタンダード環境を使用すると、高い負荷の下で大量のデータを使用して正常に動作するアプリをビルドしてデプロイできます。
このチュートリアルでは、App Engine スタンダード環境を使用してサーバーをデプロイします。
ターミナル ウィンドウで
app.yaml
ファイルを作成し、以下をコピーします。App Engine にアプリをデプロイします。
gcloud app deploy
https://your-project-id.appspot.com
で公開されているライブアプリを表示します。gcloud app browse
ここで your-project-id は、Google Cloud プロジェクト ID です。
これで、App Engine インスタンスで実行しているウェブサーバーから挨拶が配信されます。
アプリのデバッグ
App Engine アプリに接続できない場合は、次の点を確認してください。
gcloud
デプロイ コマンドが正常に終了して、エラーを出力しなかったことを確認します。エラー(message=Build failed
など)が発生した場合は、それらを修正してから、もう一度、App Engine アプリのデプロイを試みます。Cloud Console で、[ログ エクスプローラ] ページに移動します。
[最近選択したリソース] プルダウン リストで、[App Engine アプリケーション] をクリックしてから、[All module_id] をクリックします。アプリにアクセスした以降のリクエストのリストが表示されます。リクエストのリストが表示されない場合は、プルダウン リストで [All module_id ] が選択されていることを確認します。エラー メッセージが Cloud Console に出力された場合は、アプリのコードがウェブアプリの作成に関するセクション内のコードと一致することを確認します。
Firestore API が有効になっていることを確認します。
クリーンアップ
プロジェクトの削除
- 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.
App Engine インスタンスの削除
- 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.
- アプリのバージョンを削除するには、[ 削除] をクリックします。
次のステップ
- その他の Cloud Functions チュートリアルをお試しください。
- App Engine の詳細を確認する
- Cloud Run を使用してみる(フルマネージド環境や独自の Google Kubernetes Engine クラスタでステートレス コンテナを実行できます)。