このチュートリアルでは、Cloud Run でセッションを取り扱う方法を示します。
多くのアプリには、認証設定とユーザー設定用のセッション処理が必要です。
Gorilla ウェブ ツールキット sessions パッケージには、この機能を実行するためのファイル システムベースの実装が付属しています。ただし、記録されるセッションがインスタンス間で異なる場合があるため、この実装は複数のインスタンスから提供できるアプリには適していません。gorilla/sessions パッケージには、Cookie ベースの実装も付属しています。ただし、この実装では、セッション ID だけでなく、Cookie を暗号化してセッション全体をクライアントに保存する必要があるため、一部のアプリでは大きすぎる場合があります。
目標
- アプリを作成する。
- アプリをローカルで実行する。
- アプリを Cloud Run にデプロイする。
費用
このドキュメントでは、課金対象である次のコンポーネントを使用します。 Google Cloud
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- アカウントにログインします Google Cloud を初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
コンソールで、Cloud Shellでアプリを開きます。 Google Cloud
Cloud Shell を使用すると、ブラウザからコマンドラインで直接クラウド リソースにアクセスできます。ブラウザで Cloud Shell を開き、 [**確認**] をクリックしてサンプルコードをダウンロードし、アプリ ディレクトリに移動します。
-
Cloud Shell で、gcloud CLI を構成して
新しい Google Cloud プロジェクトを使用します:
# Configure gcloud for your project gcloud config set project YOUR_PROJECT_ID
プロジェクトの設定
ターミナル ウィンドウで、サンプルアプリ リポジトリのクローンをローカル マシンに作成します。
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
サンプルコードが入っているディレクトリに移動します。
cd golang-samples/getting-started/sessions
ウェブアプリについて理解する
このアプリは、ユーザーごとに異なる言語で挨拶を表示します。リピーターは常に同じ言語で挨拶されます。
アプリでユーザーの設定を保存するには、現在のユーザーに関する情報をセッションに保存する方法が必要です。このサンプルアプリは、Firestore を使用してセッション データを保存します。
アプリは、依存関係をインポートし、
sessions.Storeと HTML テンプレートを保持するためのapp関数を定義して、挨拶の一覧を定義することにより起動します。次に、アプリが
main関数を定義します。この関数は、新しいappインスタンスを作成し、インデックス ハンドラを登録して、HTTP サーバーを起動します。newApp関数は、projectID値とcollectionID値を設定して HTML テンプレートを解析することで、appインスタンスを作成します。インデックス ハンドラは、ユーザーのセッションを取得し、必要に応じてセッションを作成します。新しいセッションには、ランダムな言語とビューカウント「0」が割り当てられます。次に、ビューカウントが 1 増加し、セッションが保存され、HTML テンプレートにより応答が書き込まれます。
次の図は、Firestore が Cloud Run アプリのセッションを取り扱う方法を示しています。
セッションの削除
コンソールでセッション データを削除するか、自動削除戦略を実装できます。Google Cloud セッションに、Memcache や Redis などのストレージ ソリューションを使用すると、期限切れのセッションが自動的に削除されます。
ローカルでの実行
ターミナル ウィンドウで、
sessionsバイナリをビルドします。go buildHTTP サーバーを起動します。
./sessionsウェブブラウザでアプリを表示します。
Cloud Shell
Cloud Shell ツールバーの [ウェブでプレビュー]
アイコンをクリックし、[ポート 8080 でプレビュー] を選択します。ローカルマシン
ブラウザで、
http://localhost:8080にアクセスします。「Hello World」、「Hallo Welt」、「Hola mundo」、「Salut le Monde」、「Ciao Mondo」の 5 つの挨拶のいずれかが表示されます。別のブラウザまたはシークレット モードでページを開くと、別の言語で表示されます。 セッション データは Google Cloud コンソールで表示して編集できます。

HTTP サーバーを停止するには、ターミナル ウィンドウで
Control+Cを押します。
Cloud Run でのデプロイと実行
Cloud Run を使用すると、高負荷の元で大量の データを使用して正常に動作するアプリをビルドしてデプロイできます。
- アプリを Cloud Run にデプロイします。
gcloud run deploy firestore-tutorial-go
--source . --allow-unauthenticated --port=8080
--set-env-vars=GOOGLE_CLOUD_PROJECT=YOUR_PROJECT_ID - このコマンドにより返された URL にアクセスして、ページ移動のときセッションデータがどのように保持されるかを確認してください。
これで、Cloud Run インスタンスで実行しているウェブサーバーから挨拶が配信されます。
アプリのデバッグ
Cloud Run アプリに接続できない場合は、次の点を確認してください。
gcloudデプロイ コマンドが正常に終了して、エラーを出力しなかったことを確認します。エラー(message=Build failedなど)がある場合は、修正し、 Cloud Run アプリのデプロイを再度行ってください。コンソールで、[ログ エクスプローラ] ページに移動します。 Google Cloud
[最近選択したリソース] プルダウン リストで [Cloud Run アプリケーション] をクリックし、[すべての module_id] をクリックします。アプリにアクセスした以降のリクエストのリストが表示されます。リクエストのリストが表示されない場合は、プルダウン リストで [すべての module_id] が選択されていることを確認します。 エラー メッセージが Google Cloud コンソールに出力された場合は、アプリのコードが ウェブアプリの作成に関するセクション内のコードと一致することを確認します。
Firestore API が有効になっていることを確認します。
クリーンアップ
プロジェクトを削除する
- コンソールで [**リソースの管理**] ページに移動します。 Google Cloud
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、 [Shut down] をクリックしてプロジェクトを削除します。
Cloud Run インスタンスの削除
- コンソールで、App Engine の [**バージョン**] ページに移動します。 Google Cloud
- デフォルト以外で削除するアプリのバージョンのチェックボックスをオンにします。 削除します。
- アプリのバージョンを削除するには、 [Delete] をクリックします。
次のステップ
- Cloud Run 関数のチュートリアルを試す
- Cloud Run の詳細を確認する。
- Cloud Run を使用してみる(フルマネージド環境や独自の Google Kubernetes Engine クラスタでステートレス コンテナを実行できます)。