このチュートリアルでは、Cloud Run でセッションを取り扱う方法を示します。
多くのアプリには、認証設定とユーザー設定用のセッション処理が必要です。Jetty フレームワークには、この機能を実行するためのメモリベースの実装が付属しています。ただし、記録されるセッションがインスタンス間で異なる場合があるため、この実装は複数のインスタンスから提供できるアプリには適していません。このチュートリアルでは、Cloud Run でセッションを取り扱う方法を示します。
目標
- アプリを作成する。
- アプリをローカルで実行する。
- アプリを Cloud Run にデプロイする。
料金
このドキュメントでは、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.
-
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.
-
Google Cloud Console から、Cloud Shell でアプリを開きます。
Cloud Shell を使用すると、ブラウザからコマンドラインで直接クラウド リソースにアクセスできます。ブラウザで Cloud Shell を開き、[確認] をクリックしてサンプルコードをダウンロードし、アプリ ディレクトリに移動します。
-
Cloud Shell で、 gcloud CLI を構成して新しい Google Cloud プロジェクトを使用します。
# Configure gcloud for your project gcloud config set project YOUR_PROJECT_ID
-
Maven を更新して Java 11 をデフォルトで使用します。
プロンプトが表示されたら、Java 11 を選択する番号を入力します。そのバージョンのパスが表示されるので、メモしておきます。sudo update-alternatives --config java
- 前の手順でメモしたパスを環境変数としてエクスポートします。
export JAVA_HOME=java-11-path
ウェブアプリ
このアプリは、ユーザーごとに異なる言語で挨拶を表示します。リピーターは常に同じ言語で挨拶されます。
アプリでユーザーの設定を保存するには、現在のユーザーに関する情報をセッションに保存する方法が必要です。このサンプルアプリは、WebFilter
を使用して Firestore のセッションデータを取得、更新します。
次の図は、Firestore が Cloud Run アプリのセッションを取り扱う方法を示しています。
HttpServletRequest
は Cookie を使用してローカル セッションの一意の ID を保存します。これは、セッションの詳細を含む Firestore のドキュメントに対応しています。
セッションの削除
Firestore は、古いセッションや期限切れのセッションを削除しません。Google Cloud Console でセッション データを削除するか、自動削除の手段を実装できます。セッションに、Memcache や Redis などのストレージ ソリューションを使用すると、期限切れのセッションが自動的に削除されます。
ローカルでの実行
HTTP サーバーを起動します。
mvn jetty:run
ウェブブラウザでアプリを表示します。
Cloud Shell
Cloud Shell ツールバーの [ウェブでプレビュー] アイコンをクリックし、[ポート 8080 でプレビュー] を選択します。
ローカルマシン
ブラウザで、
http://localhost:8080
にアクセスします。5 つの挨拶(「Hello World」、「Hallo Welt」、「Hola mundo」、「Salut le Monde」、「Ciao Mondo」)のいずれかが表示されます。別のブラウザまたはシークレット モードでページを開くと、別の言語で表示されます。セッション データは Google Cloud Console で表示して編集できます。
HTTP サーバーを停止するには、ターミナル ウィンドウで
Control+C
を押します。
Cloud Run でのデプロイと実行
Cloud Run を使用すると、高負荷の元で大量のデータを使用して正常に動作するアプリをビルドしてデプロイできます。
ターミナルウィンドウで、Jib Maven プラグインを使用してコードのイメージをビルドし、Google Container Registry(GCR)にデプロイします。
mvn clean package jib:build
Cloud Run にアプリをデプロイします。
gcloud beta run deploy session-handling --image gcr.io/MY_PROJECT/session-handling
--platform managed --region us-central1 --memory 512MMY_PROJECT
は、作成した Cloud プロジェクトの ID に置き換えます。このコマンドにより返された URL にアクセスして、ページ移動のときセッションデータがどのように保持されるかを確認してください。
アプリのデバッグ
Cloud Run アプリに接続できない場合は、次の点を確認してください。
gcloud
デプロイ コマンドが正常に終了して、エラーを出力しなかったことを確認します。エラー(message=Build failed
など)がある場合は、修正し、Cloud Run アプリのデプロイを再度行ってください。Cloud Console で、[ログ エクスプローラ] ページに移動します。
[最近選択したリソース] プルダウン リストで [Cloud Run アプリケーション] をクリックし、[すべての 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.
Cloud Run インスタンスの削除
Cloud Run からサービスを削除します。
- Cloud Console で、Cloud Run の [サービス] ページに移動します。
- 削除するサービスを選択します。
- [削除] delete をクリックして、サービスを削除します。
次のステップ
- 他の Cloud Functions チュートリアルを試す。
- Cloud Run を使用してみる(フルマネージド環境や独自の Google Kubernetes Engine クラスタでステートレス コンテナを実行できます)。